Получить все условия, которые привели к выполнению правила
Я хочу получить все индивидуальные условия, которые привели к выполнению правила.
Например, если у меня есть следующее правило:
package app1;
rule 'rule1'
when
MyObjectType1( booleanPredicate1() )
or
(
MyObjectType2( booleanPredicate2() )
and
MyObjectType3( booleanPredicate3() )
)
or
MyObjectType4( booleanPredicate4() )
then
System.out.println("In rule - " + drools.getRule().getName());
end
а также booleanPredicate1()
, booleanPredicate2()
а также booleanPredicate4()
являются true
тогда я хочу получить следующий вывод:
booleanPredicate1() resulted in rule execution.
booleanPredicate4() resulted in rule execution.
До сих пор я пробовал внутри реализации всех таких методов предикатов, я добавил оператор ведения журнала, который выполняется только тогда, когда этот метод собирается вернуть true
:
boolean booleanPredicate1()
{
boolean ret = false;
...
...
if (<business-logic-defined-predicate>)
{
ret = true;
}
if(ret)
{
addToLog("booleanPredicate1 became true.");
}
return ret;
}
но с этим решением, я также получу вывод booleanPredicate2() resulted in rule execution.
что неправильно.
Есть ли способ, с помощью которого я могу получить правильные результаты регистрации?
1 ответ
Посмотрите мою статью о шаблонах разработки правил, в которой есть раздел, отвечающий на ваш вопрос.
Чтобы подвести итог здесь: вам нужны правила для отдельных значений истинности, чтобы зарегистрировать, что верно для некоторого факта или некоторой комбинации фактов. Правило в том виде, в котором оно у вас есть, будет объединять логические значения из реестра, а реестр содержит ответ на вашу проблему.