[rules-users] Formula value assginment in LHS

Anstis, Michael (M.) manstis1 at ford.com
Fri Jul 3 02:23:10 EDT 2009


Why not simply use something like this:-
 
rule "TaxCalc"
    when
         $i : Invoice($st : salesTax, $gst : gstRate, $sa : salesAmount,
$id : importDuty, $gr : govtRebate)
    then
         $i.setTotalTax(round($st + ($gst * $sa / 100) + $id - $gr, 2));
         update($i);
end

What do you gain by checking whether the Total Tax is different from the
value of the calculation? I must be missing something from your
simplified example?!?
 
(I think, big disclaimer!!) you could achieve your requirement using
eval and a tax value function that uses a cache under the hood, much
like the following:-
 
rule "TaxCalc"
    when
         $i : Invoice($tt : totalTax, $st : salesTax, $gst : gstRate,
$sa : salesAmount, $id : importDuty, $gr : govtRebate)
         eval(Invoice($tt != taxFunction($st, $gst, $sa, Sid, $gr))
    then
         $i.setTotalTax(taxFunction($st, $gst, $sa, Sid, $gr);
         update($i);
end

Evals cannot be indexed so you take a performance hit.
 
With kind regards,
 
Mike



________________________________

	From: rules-users-bounces at lists.jboss.org
[mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Shabbir Dhari
	Sent: 03 July 2009 01:24
	To: rules-users at lists.jboss.org
	Subject: [rules-users] Formula value assginment in LHS
	
	
	Dear all
	
	We are developing a financial business application that contains
hundreds of business rules for validations and calculations. In the
calculation rules we change the value of attribute if values past in the
request is incorrect e.g.  
	
	rule "TaxCalc"
	    when
	         $i : Invoice()
	         Invoice (totalTax != (round(salesTax + (gstRate *
salesAmount / 100) + importDuty - govtRebate, 2)))
	    then
	         i.setTotalTax(round(salesTax + (gstRate * salesAmount /
100) + importDuty - govtRebate, 2));
	end
	
	The above code works perfectly fine. Only problem is the perform
calculation twice. What I was looking if possible I can store calculated
tax in a variable and simply assign variable to attribute if rule
condiation fails. Some thing like:
	
	rule "TaxCalc"
	    when
	        $i : Invoice() 
	        Invoice (totalTax != calTax : (round(salesTax + (gstRate
* salesAmount / 100)+ importDuty - govtRebate, 2)))
	    then
	        i.setTotalTax(calTax);
	    end
	
	But this does not work - shows system error at calculated value
assignment. Is there any work around?
	
	
	
________________________________

	Click here to find out more POP access for Hotmail is here!
<http://windowslive.ninemsn.com.au/article.aspx?id=802246>  

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090703/34d5ef8e/attachment.html 


More information about the rules-users mailing list