2016-12-30 68 views
1

我想獲取導致執行規則的所有單個條件。獲取導致規則執行的所有條件

舉例來說,如果我有以下規則:

package app1; 

rule 'rule1' 
when 
    MyObjectType1(booleanPredicate1()) 
    or 
    (
     MyObjectType2(booleanPredicate2()) 
     and 
     MyObjectType3(booleanPredicate3()) 
    ) 
    or 
    MyObjectType4(booleanPredicate4()) 
then 
    System.out.println("In rule - " + drools.getRule().getName()); 
end 

booleanPredicate1()booleanPredicate2()booleanPredicate4()true的話,我想下面的輸出:

  • booleanPredicate1() resulted in rule execution.
  • booleanPredicate4() resulted in rule execution.

我已經試過到目前爲止所有這些斷言方法的實現裏面,我已經添加它獲取只有當該方法是否會返回一個執行的日誌記錄語句true

boolean booleanPredicate1() 
{ 
    boolean ret = false; 
    ... 
    ... 
    if (<business-logic-defined-predicate>) 
    { 
    ret = true; 
    } 
    if(ret) 
    { 
    addToLog("booleanPredicate1 became true."); 
    } 
    return ret; 
} 

但用這個解決方案,我也會得到輸出booleanPredicate2() resulted in rule execution.這是錯誤的。

有沒有什麼辦法可以得到正確的記錄結果?

回答

0

諮詢my paper on rule design patterns它有一個部分回答你的問題。

這裏總結一下:你需要規定個體真值來註冊某些事實或事實的某些組合。現在,您的規則將結合註冊表中的布爾值,註冊表包含您的問題的答案。

+0

Thanks @laune!您能否詳細說明該論文的哪一部分包含解決方案? –

+0

只需閱讀它 - 其他部分不會影響您對基於規則的系統的理解。 – laune