[rules-users] How to handle priority in a rule

Maxime mcatelin at perinfo.com
Fri May 11 10:31:38 EDT 2007


Hello,

I'm trying to find how to manage priority within a rule.  Let me explain 
the problem. I'll try to be as clear as possible but bear with me since 
I am new to rules. 

We have two objects, the Product is the object I'm trying to price and 
the object Price is the one that knows all the prices. Both products and 
prices have fields amount and length.  Product amount is initialized to 
0 and prices are going to determine the product amount depending on its 
length.

Let's see an example :

Product : P -> length = 5, amount = 0
Price : P1  -> length = 1, amount = 50
Price : P2  -> length = 3, amount = 100

With this configuration, after asserting the 3 objects to the WM, the 
amount field of Product P should have a value of 200 ( 1*100 + 2*50) 
because the price with the greatest length should be favored over the 
other ones.

Here is the rule I made :

rule "Price Product rule using price length"
    when
        $s : Product (length > 0)
        $price : Price($length: length)
    then
        $s.setAmount($s.getAmount() + $price.getAmount());
        $s.setLength($s.getLength() - $length.intValue());
        modify($s);
end

This is obviously wrong because it always takes the first asserted price 
object.  I don't know how to make a rule which would take the amount of 
the price object with the greatest length in priority.

Any help would be very much appreciated.

Cheers,

Max




More information about the rules-users mailing list