2016-11-15 3 views
0
global Integer rank1; 
global Integer rank2; 


rule "Data" 
salience 10 
when 
     req : Requests(status == "ON") 
then 
    drools.getWorkingMemory().setGlobal("rank1", 8); 
    drools.getWorkingMemory().setGlobal("rank2", 6); 
end 

rule "1" extends "Data" 
salience 8 
    when 
     req1 : Requests() 
    then 
     System.out.print("1"); 
end 

rule "2" extends "Data" 
salience 6 
    when 
    req2 : Requests() 
    then 
    System.out.print("2"); 
end 

ここで、rank1とrank2はJavaコードで0に初期化されています。 出力は11112222です。 私は同じ出力をしたいのですが、静的な顕著性を使用する代わりに、動的にします。Drools動力学

rule "1" extends "Data" 
    salience rank1 
    ....... 

が、コードの出力は、あなたが事実を挿入前にグローバルを設定する必要が21212121.

答えて

0

です。グローバルは動的に評価されません。あなたが本当に、よりダイナミックな顕著性が必要な場合は

あなたはクラス

class Salience { 
    private int rank1; 
    private int rank2; 
    // ... 
} 

を作成し、適切な値を持つという事実を挿入し、必要に応じてそれらを変更する必要があります。その後、パターンはルートルールに追加必要があります:

rule "Data" 
when 
    Salience($rank1: rank1, $rank2: rank2) 
    Requests(...) 
then 

、あなたが顕現属性に$rank1$rank2を使用することができます。

注:ほとんどの場合、論理的にも顕著でもなく、ほとんどの場合設計上の瑕疵である使用法で、あなたの問題に対する解決策があります。

+0

thats not working –

+0

何が問題なのですか?あなたは何をした? – laune

関連する問題