NVelocity(或速度),为独立式求值
题
我在我的应用程序中使用NVelocity生成HTML格式的电子邮件。我的应用程序有一个事件驱动的模型,其中对象的保存和/或更新导致这些邮件被发送出去。每个事件可以触发零个,一个或多个多封电子邮件。
我希望能够配置哪些电子邮件获得在运行时发出的,而无需修改代码。我想我可以充分利用NVelocity#如果()指令来做到这一点。这是我的想法......
步骤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()指令,而无需通过跳火圈像我上面的方法吗?有验证的时间的公式语法提前推荐的方法?
感谢。
解决方案
如果一个非技术终端用户是一个改变的标准,我会非常小心,以验证他的输入。你可以很容易地通过运行针对输入模板(即你的VelocityMerge()
法)进行验证,如果NVelocity抱怨你拒绝输入,否则将它保存到数据库中。
另一个限制是,你必须知道前期可存在于标准的所有变量,如serg555评论。有些邮件模板可能需要一个变量,没有其他邮件的需求,但你仍然不得不将其提供给的所有的模板。这是否是一个真正的限制或不取决于你的邮件模板的同质性(?)。
而且最终用户定义的标准必须知道所有可用的变量(例如$User
),并且每个变量的属性(例如名字,姓氏,等)。有些帮助屏幕,列出了他们,也许吧。
不隶属于 StackOverflow