Have you tried running what you have?

I'd expect it to give the result you expect already (other than throwing an error because $lfna_SEI and $r_SE are not bound in the last rule and assuming chkRuleExpre is constant over time). Rules do not normally execute in any sequential order (unless you explicitly make them so). As the facts are inserted into WM they are matched against your rules and activations scheduled. When all facts are inserted into WM and you call fireAllRules the activations are played out and "truth maintenance" ensures the "result" of their firing is consistent with the facts in WM (either inserted by rules or the programmer). This is in essence "how inference engines" work.

After you've called fireAllRules (and assuming you have a stateful session) you insert more ABC's then you'd have to expect the last rule to be re-evaluated - following another call to fireAllRules. So in part when rule 3 ultimately gives the "correct" answer depends upon when you stop inserting ABC's.

On 17 September 2010 07:35, Ritesh <ritesh.khot@sungard.com> wrote:

Hi,

I have 3 rules in my drl file and want the last one should get fired only
after all the facts in rule1 and rule2 gets inserted in working memory.
Please see below code for more understanding. Please suggest.

Thanks

declare DistinctAT
    d_auditT : String
end

declare ActualSum
    auditT : String
    sumOfThree : BigDecimal
end

rule "insert combined sum"
       dialect 'java'
when
   ABC( $a:A, $b:B, $c:C )

then
       BigDecimal actSum = $c.multiply(0.13);
       ActualSum $as = new ActualSum();
       $as.setAuditT($a);
       $as.setSumOfThree(actSum);
       insert($as);
       System.out.println("AT :" + $movAuditT);
end

rule "insert distinct AT"

       dialect 'java'
when
   $a : ActualSum( $AT : auditT )
       not DistinctAT( d_auditT == $AT )
then
       DistinctAT $disAT = new DistinctAT();
       $disAT.setD_auditT($AT);
       insert($disAT);
       System.out.println("Done!");
end

rule "Get Sum Group by AT"

       dialect 'java'
when

DistinctAT( $dAT: d_auditT )

$total : Double()
from accumulate( ActualSum( auditT == $dAT, $actSum_Main : sumOfThree ),
sum( $actSum_Main ) )

eval(
       chkRuleExpre( $total,$lfna_SEI,$r_SEI )
)

then
       System.out.println("Done Main Rule, total :" + $total);
end

--
View this message in context: http://drools-java-rules-engine.46999.n3.nabble.com/How-to-activate-deactivate-a-rule-tp1516088p1516088.html
Sent from the Drools - User mailing list archive at Nabble.com.
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users