2016-12-30 14 views
1

Я хочу получить все индивидуальные условия, которые привели к выполнению правила.Получить все условия, которые привели к выполнению правила

Например, если у меня есть следующее правило:

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., который является неправильным.

Есть ли способ, с помощью которого я могу получить правильные результаты ведения журнала?

ответ

0

Проконсультироваться my paper on rule design patterns У него есть раздел, отвечая на ваш вопрос.

Подводя итог этому: вам нужны правила для индивидуальных значений истинности, чтобы зарегистрировать то, что истинно для какого-то факта или некоторой комбинации фактов. Правило, как вы его сейчас, будет затем объединить логические значения из реестра, а реестр содержит ответ на вашу проблему.

+0

Спасибо @laune! Не могли бы вы прояснить, в каком разделе этой статьи содержится решение этой проблемы? –

+0

Просто прочитайте это - другие разделы не повредят вашему пониманию систем, основанных на правилах. – laune