This is what in Portuguese we call a "tempest in a glass of water"... :)

     In fact, the problem is simple once you think about how write a constraint to give you the largest Price. Using the "not" CE will help you on this matter:

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

   So the above rule is saying: match a Product with a Price, in a way that does NOT exist another Price whose length is greater than the matched Price, but still less or equal to the Product length. In other words, match a Product with the Price with the greatest length but still less or equal to the Product length.

   Hope it helps.

   Regards,
       Edson

2007/5/11, Mark Proctor <mproctor@codehaus.org>:
Interesting problem, you want dyanmic prioritisation based upon the
value of a field. We have no declarative sugar for this, but it might
make a nice use case. We could allow someone to specify an expression
that determine a value of priority.
    salience = ($price.length);

That would allow for some interesting situations. Its unlikely this will
make 4.0 - but the solution interests me enough that if I get bored, I
might just do it ;)

Until that time I think you'll have to use some combination of a
command/semaphore object and additional rules.

Mark

Maxime wrote:
> 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
>
> _______________________________________________
> rules-users mailing list
> rules-users@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>

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



--
  Edson Tirelli
  Software Engineer - JBoss Rules Core Developer
  Office: +55 11 3529-6000
  Mobile: +55 11 9287-5646
  JBoss, a division of Red Hat @ www.jboss.com