0

Kie ワークベンチで記述され、Kie Exceution サーバーと統合されたルールを実行しようとしていますが、期待どおりの応答が得られました。しかし、私の要件は、定義された大きなルールのリストに対して特定のルールを 1 つだけ実行することです。私が達成できる可能な方法は何ですか。私はアクティベーショングループ、ルールフローグループを使用しましたが、これを達成するのに役立つ人がいる場合は運がありません。

KIE Workbench で Guided Decision テーブルを作成しました。ソースはこのように生成されました

    package demo.drools_examples;
    //from row number: 1
    rule "Row 1 Rule1"
    dialect "mvel"
    when
        f1 : Account( accountType == "Regular" )
    then
        f1.setBaseAmount( 10.0 );
        f1.setBaseThreshold( 10.0 );
        calculateAmount(f1);
        calculateThreshold(f1);
    end
    //from row number: 2
    rule "Row 2 Rule1"
    dialect "mvel"
    when
        f1 : Account( accountType == "Registered" )
    then
        f1.setBaseAmount( 5.0 );
        f1.setBaseThreshold( 15.0 );
        calculateAmount(f1);
        calculateThreshold(f1);
   end
   //from row number: 3
   rule "Row 3 Rule1"
   dialect "mvel"
   when
        f1 : Account( accountType == "Saving" )
    then
        f1.setBaseAmount( 20.0 );
        f1.setBaseThreshold( 10.0 );
        calculateAmount(f1);
        calculateThreshold(f1);
   end

fireallRules(1) を呼び出すのではなく、ルール 1 のみを呼び出すように saliance 、アクティベーション グループ、またはその他のポリシーを定義するにはどうすればよいでしょうか。助けてください。

4

1 に答える 1

0

fireAllRules を呼び出す必要がありますが、ひねりがあります。

AgendaFilter af = new SingleRuleFilter( "Row 1 Rule1" );
int nFired = kieSession.fireAllRules( af );

そして、次のように書くだけです:

public class SingleRuleFilter implements AgendaFilter {
    private String name;
    public SingleRuleFilter( String name ){
         this.name = name;
    }
    public boolean accept( Activation activation ){
         return activation.getRule().getName().equals( name );
    }
}
于 2015-05-08T14:48:03.290 に答える