Обходит объект Drools в DRL - PullRequest
0 голосов
/ 12 июня 2018

У меня есть проблема, когда после того, как я установил объект в «FAILED» в первом правиле, но при запуске 2-го правила значение все еще указывает на исходное значение, которое «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", но выполняется второе правилово время проверки «когда», тогда значение результата по-прежнему равно «PASS»

Вопрос 2) Как я могу получить значение результата, установленное как «FAIL» во 2-м правиле «когда» при проверке предложения?

1 Ответ

0 голосов
/ 13 июня 2018

Существует специальная «функция» для изменения факта в Drools, и это не insert.То, что вы делаете в первом правиле, - это снова вставьте этот факт в сеанс (что приводит к путанице с Drools).То, что вы ищете, это метод modify:

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

  modify($ruleEngine){
    setOutputObject(outputObject)
  };
end

rule "2nd rule"
dialect "java"
when
  $ruleEngine:RuleEngine( outputObject!.result == "PASS" )
then
  //...
end

Надеюсь, это поможет,

...