簡體   English   中英

NVelocity(或Velocity)作為獨立的公式評估器

[英]NVelocity (or Velocity) as a stand-alone formula evaluator

我在應用程序中使用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()指令而不會像我上面那樣跳過籃球? 是否有建議的方法可以提前驗證公式語法?

謝謝。

如果非技術的最終用戶是更改標准的用戶,那么我將非常小心地驗證他的輸入。 如果NVelocity抱怨您拒絕輸入,則可以通過對輸入運行模板(即VelocityMerge()方法)來輕松驗證它,否則將其保存到數據庫中。

另一個限制是,您必須預先知道標准中可能存在的所有變量,如serg555所評論。 某些郵件模板可能需要一個其他郵件不需要的變量,但仍然需要使它可用於所有模板。 這是否是真正的限制取決於郵件模板的同質性(?)。

定義標准的最終用戶還必須知道所有可用變量(例如$User )和每個變量的屬性(例如FirstName,LastName等)。 可能會列出一些幫助屏幕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM