Hello,

If I have a complex rule with a few conditions concatenated via AND and OR and 
NOT, and the rule evaluated to true during the engine run - is there a way to 
figure out which of the conditions caused the rule to evaluate to true?

In a simple example:
rule "test1"
    dialect "java"
    when
        $data : ContractRulesData (region=='NE' && sum > 250)
    then
        approverList.add("approver1, approver2, Level1");
        System.out.println("test1 is TRUE; result: approver1, approver2, 
Level1");
end

I tried to add an AgendaListener with the following code to find out which 
rules have fired:
    public void afterActivationFired(AfterActivationFiredEvent event, 
WorkingMemory workingMemory) {
        Activation activation = event.getActivation();
        Rule rule = activation.getRule();
        GroupElement[] leftElements = rule.getTransformedLhs();
        System.out.println("afterActivationFired: rule = " + rule.getName());
        System.out.println("Conditions: ");
        for (GroupElement left_el: leftElements){
            System.out.println(left_el.toString());
        }

The output is somewhat cryptic :
afterActivationFired: rule = test1
Conditions: 
AND[Pattern type='[ClassObjectType 
class=com.emptoris.ecm.domain.ContractRulesData]', index='0', offset='0', 
identifer='[Declaration: type=ValueType = 'Object' identifier=$data]']

So, is there a way to get even more information about the conditions and 
whether they evaluated to TRUE or FALSE?


Thanks,
Marina
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to