DRL中的Drools对象传递问题

时间:2018-06-12 15:00:51

标签: java drools rule

我在这里遇到一个问题,在第一条规则上将对象设置为“FAILED”但运行第二条规则时,该值仍指向原始值“PASS”。请注意,值是从kie客户端传递的。

    rule "1st rule"
    dialect "java"
    when
    $ruleEngine:RuleEngine()
    then
    OutputObject outputObject = new OutputObject();
    outputObject.setResult("FAIL" );
    $ruleEngine.setOutputObject(outputObject);      
    insert ($ruleEngine);
end

rule "2nd rule"
    dialect "java"
    when
    $ruleEngine:RuleEngine(     
    ( String.valueOf($ruleEngine.getOutputObject.getResult()).equals("PASS") )  //=====> the value is still PASS            
    )

    then
    System.out.println("output object==" + $ruleEngine.getOutputObject().getResult().equals("FAIL"));  // ===> is true      
    System.out.println("output object:" + $ruleEngine.getOutputObject().getResult()); // ==> object is FAIL ?? Why?

end

规则的输出

output object==true
output object:FAIL

问题1)为什么结果值设置为“FAIL”但在“when”检查期间运行第二个规则然后结果值仍为“PASS”

问题2)如何在第二条规则“何时”检查条款中将结果值设置为“FAIL”?

1 个答案:

答案 0 :(得分:2)

有一个特定的功能&#39;修改Drools中的事实而不是<system.web> <globalization uiCulture="en" culture="en-AU" /> </system.web> 。你在第一条规则中所做的是在会话中再次插入事实(导致混淆Drools)。您正在寻找的是insert方法:

modify

希望它有所帮助,