2013-04-10 33 views
3

如何獲取Drools的when/Lhs子句中的規則名稱?在'when'子句中獲取規則名稱:Drools

+0

您能否向我們解釋您爲什麼需要它? – 2013-04-10 09:30:15

+0

感謝您的回覆!我的規則名稱附有一個唯一的「ID」。我使用這個'id'來確保規則只對給定的用戶觸發一次[我有一張表,它維護着一個給定用戶觸發的規則列表]。如果這個特定的'userId'和'Id'出現在數據庫中,則不會評估該規則。該方法是否存在任何水?有其他方法嗎?打開建議:) – Avinash 2013-04-10 09:41:46

回答

0

不要將ID附加到規則的名稱,使用一個類,您可以將所有感興趣的規則ID定義爲常量並使用這些常量,這樣您還可以非常輕鬆地跟蹤引用所有這些ID的位置。

rule "MyRule" 
    when 
     eval((com.test.Rules.RULE1_ID) == 123) 
    then 
     ... 
end 

或者,如果你有短短的規則,你可以使用標誌部分User指示是否規則已經爲各自的用戶或者沒有被執行,然後你的支票會是什麼樣子User(!myRuleHasRun)

+0

再次感謝:)這種方法會確保規則只被解僱一次嗎?請原諒這個問題,但我似乎不太清楚上面提到的概念:)我的規則不是靜態的,我也使用DSL來映射規則。所有規則名稱都是基於它包含的條款[要求]生成的。再次感謝您對幫助我解決問題的興趣:)我錯過了什麼? – Avinash 2013-04-10 10:57:22

+0

第一種方法解決了獲取執行規則的id的問題,您仍然必須像以前一樣進行檢查。第二種方法完全解決了你的問題,那就是需要完成的檢查。默認情況下,標誌必須是'false',當規則啓動時它必須更新爲'true',並且顯然會持續。因爲我不知道所有的細節,所以我們很難指出需要做什麼。你確定你想要非靜態規則嗎?你爲什麼需要它們是非靜態的?與最初的話題無關的問題,但你必須考慮。 – 2013-04-10 11:08:05

+0

我確實需要他們是動態的。他們是要求的一部分。我會試着說出你的話,並保持你的發言。感謝您的關注:)非常感謝! – Avinash 2013-04-10 11:17:02