<br> This is what in Portuguese we call a "tempest in a glass of water"... :)<br><br> 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:
<br><br>rule "Price Product rule using price length"<br> when<br> $s : Product ( $productLength : length > 0)<br> $price : Price( $priceLength : length <= $productLength )<br> not Price( length > $priceLength, length <= $productLength )
<br> then<br> $s.setAmount($s.getAmount() + $price.getAmount());<br> $s.setLength($s.getLength() - $priceLength.intValue());<br> modify($s);<br>end<br><br> 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.
<br><br> Hope it helps.<br><br> Regards,<br> Edson<br><br><div><span class="gmail_quote">2007/5/11, Mark Proctor <<a href="mailto:mproctor@codehaus.org">mproctor@codehaus.org</a>>:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Interesting problem, you want dyanmic prioritisation based upon the<br>value of a field. We have no declarative sugar for this, but it might<br>make a nice use case. We could allow someone to specify an expression<br>that determine a value of priority.
<br> salience = ($price.length);<br><br>That would allow for some interesting situations. Its unlikely this will<br>make 4.0 - but the solution interests me enough that if I get bored, I<br>might just do it ;)<br><br>Until that time I think you'll have to use some combination of a
<br>command/semaphore object and additional rules.<br><br>Mark<br><br>Maxime wrote:<br>> Hello,<br>><br>> I'm trying to find how to manage priority within a rule. Let me<br>> explain the problem. I'll try to be as clear as possible but bear with
<br>> me since I am new to rules.<br>> We have two objects, the Product is the object I'm trying to price and<br>> the object Price is the one that knows all the prices. Both products<br>> and prices have fields amount and length. Product amount is
<br>> initialized to 0 and prices are going to determine the product amount<br>> depending on its length.<br>><br>> Let's see an example :<br>><br>> Product : P -> length = 5, amount = 0<br>> Price : P1 -> length = 1, amount = 50
<br>> Price : P2 -> length = 3, amount = 100<br>><br>> With this configuration, after asserting the 3 objects to the WM, the<br>> amount field of Product P should have a value of 200 ( 1*100 + 2*50)<br>> because the price with the greatest length should be favored over the
<br>> other ones.<br>><br>> Here is the rule I made :<br>><br>> rule "Price Product rule using price length"<br>> when<br>> $s : Product (length > 0)<br>> $price : Price($length: length)
<br>> then<br>> $s.setAmount($s.getAmount() + $price.getAmount());<br>> $s.setLength($s.getLength() - $length.intValue());<br>> modify($s);<br>> end<br>><br>> This is obviously wrong because it always takes the first asserted
<br>> price object. I don't know how to make a rule which would take the<br>> amount of the price object with the greatest length in priority.<br>><br>> Any help would be very much appreciated.<br>><br>
> Cheers,<br>><br>> Max<br>><br>> _______________________________________________<br>> rules-users mailing list<br>> <a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>><br><br>_______________________________________________<br>rules-users mailing list<br><a href="mailto:rules-users@lists.jboss.org">
rules-users@lists.jboss.org</a><br><a href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a><br></blockquote></div><br><br clear="all"><br>-- <br> Edson Tirelli
<br> Software Engineer - JBoss Rules Core Developer<br> Office: +55 11 3529-6000<br> Mobile: +55 11 9287-5646<br> JBoss, a division of Red Hat @ <a href="http://www.jboss.com">www.jboss.com</a>