Kie workbench引导决策表只执行一条规则

时间:2015-05-08 12:26:37

标签: drools kie kie-workbench

我正在尝试执行在Kie workbench中编写的规则并与Kie Exceution服务器集成,并按预期获得响应。 但我的要求是只对一个定义的大规则列表执行一个特定的规则。我可以实现的方式有哪些。 我使用激活组,规则流程组,但没有运气如果任何人可以帮助我实现这一点。

我在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

如何定义saliance,激活组或任何其他策略以仅调用规则1而不是调用fireallRules(1)..请帮助我

1 个答案:

答案 0 :(得分: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 );
    }
}