[rules-users] How to handle priority in a rule
Edson Tirelli
tirelli at post.com
Fri May 11 13:00:54 EDT 2007
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 at 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 at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/rules-users
> >
>
> _______________________________________________
> rules-users mailing list
> rules-users at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20070511/804cc20e/attachment.html
More information about the rules-users
mailing list