2016-12-30 4 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.

は、私がこれまで試したようなすべての述語のメソッドの実装内できたもの、私はそのメソッドが返すために起こっているときにのみ実行されますloggingステートメントを追加しました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

ありがとう@laune!このペーパーのどのセクションにこの問題の解決策が含まれているかを明確にしてください。 –

+0

ちょうどそれを読む - 他のセクションはルールベースのシステムのあなたの理解を傷つけることはありません。 – laune

関連する問題