我在我的应用程序中使用 NVelocity 来生成 html 电子邮件。我的应用程序有一个事件驱动模型,其中保存和/或更新对象会导致这些电子邮件被发送出去。每个事件都可以触发零封、一封或多封电子邮件。
我希望能够配置在运行时发送哪些电子邮件,而无需修改代码。我在想我可以利用 NVelocity #if() 指令来做到这一点。这是我的想法...
步骤 1) 在发送电子邮件之前,管理员必须配置一个公式供 NVelocity 评估。例如:
$User.FirstName == "Jack"
步骤 2) 保存或创建对象时,根据输入公式在内存中构建 NVelocity 模板。例如:
String formula = GetFormulaFromDB(); // $User.FirstName == "Jack"
String templ = "#if( " + formula + ") 1 #else 0 #end";
步骤 3) 针对模板在内存中执行 NVelocity 引擎。检查结果以查看我们是否必须发送电子邮件:
String result = VelocityMerge(templ); // utility function
if( result.Trim() == "1" )
{
SendEmail();
}
我知道这并不完全是 NVelocity 的意图,但我认为它可能会起作用 :) 这样做的好处之一是公式可以使用与模板中使用的相同的语法。
有没有人有任何警告或建议?有没有一种方法可以执行 #if() 指令而无需像我上面那样跳过箍?是否有推荐的方法来提前验证公式语法?
谢谢。