[rules-users] Convert logic to DRL rules

Edson Tirelli tirelli at post.com
Wed Feb 21 07:06:55 EST 2007


    Bill,

    This is a bug. May I ask you please to report in JIRA?

    The reason is a varible must be specified in each possible logical 
branches to be usable in it or in the consequence. Anyway, I think the 
way it is now, you can probably define it only once and use everywhere 
and it will work, but that is not the correct behavior.

    []s
    Edson


Bill Zhang wrote:

> Hi Edson,
>
> In the following part,
>
> $person : ( Person( $id : id,
>                     age > 35 | <25,
>                     zipCode == "23546" | == "68570",
>                     $lop : lastOrderPrice,
>                     $ton : totalOrderNumber,
>                     ( $lop > 300 || $ton > 2 ))
>             OR
>             Person( $id : id,
>                     lastOrderCategory == "098" | == "109",
>                     zipCode == "74567" | == "23756" ) )
>  AND // this is optional, you can simply ommit it
> ...
>
> $id has been defined twice and Drools is giving the duplicate
> declaration error. I'll keep doing some more experiments...
>
> Thanks,
>
> Bill
>
>
>
> On 2/19/07, Edson Tirelli <tirelli at post.com> wrote:
>
>>    Bill,
>>
>>    Your case is a bit more complicated because what you want is to
>> match every single object which match a permutation of SETS of
>> constraints. What you need to do is to understand the differences
>> between conditional elements (and, &&, or, ||) and connective
>> constraints (&, |). Manual has details about the conditional elements
>> and the use of multiple patterns. Connective constraints is new, but it
>> is pretty obvious where they are used.
>>
>>    So, I will write a possible solution for your rule, but without
>> fully understanding the above, it will be hard to understand, I think.
>> Also, for your use case, best would be to have
>> http://jira.jboss.com/jira/browse/JBRULES-653  already implemented
>> (scheduled for m2), but we can work around it using an ID field for 
>> person:
>>
>> rule ...
>> when
>>  $person : ( Person( $id : id,
>>                     age > 35 | <25,
>>                     zipCode == "23546" | == "68570",
>>                     $lop : lastOrderPrice,
>>                     $ton : totalOrderNumber,
>>                     ( $lop > 300 || $ton > 2 ))
>>             OR
>>             Person( $id : id,
>>                     lastOrderCategory == "098" | == "109",
>>                     zipCode == "74567" | == "23756" ) )
>>  AND // this is optional, you can simply ommit it
>>  ( Person( id == $id,
>>            status == "K",
>>            delinquent == true )
>>  OR
>>    Person( id == $id,
>>            status == "T",
>>            delinquent == true,
>>            delinquentBucket == "3" )
>>   )
>> then
>>   $person.setStatus( "KT" );
>> end
>>
>>     I didn't tried to run the above example, but it should work fine 
>> in M1.
>>     After having the JBRULES-653 ready, the rule would be:
>>
>> rule ...
>> when
>>  $person : ( Person( age > 35 | <25,
>>                     zipCode == "23546" | == "68570",
>>                     $lop : lastOrderPrice,
>>                     $ton : totalOrderNumber,
>>                     ( $lop > 300 || $ton > 2 ))
>>             OR
>>             Person( lastOrderCategory == "098" | == "109",
>>                     zipCode == "74567" | == "23756" ) )
>>  AND // this is optional, you can simply ommit it
>>  ( Person( this == $person,
>>            status == "K",
>>            delinquent == true )
>>  OR
>>    Person( this == $person,
>>            status == "T",
>>            delinquent == true,
>>            delinquentBucket == "3" )
>>   )
>> then
>>   $person.setStatus( "KT" );
>> end
>>
>>
>>    It is important to note that the above syntax avoid the need for you
>> to write all possible permutations of your AND/OR patterns, as the
>> engine is calculating the permutations for you. But if you want "simple
>> to read" rules, all you need to do is do the permutations yourself and
>> write down (in this case) 2 rules:
>>
>> rule R1
>> when
>>  $person : ( Person( age > 35 | <25,
>>                     zipCode == "23546" | == "68570",
>>                     $lop : lastOrderPrice,
>>                     $ton : totalOrderNumber,
>>                     ( $lop > 300 || $ton > 2 ),
>>                     status == "K",
>>                     delinquent == true )
>>             OR
>>             Person( lastOrderCategory == "098" | == "109",
>>                     zipCode == "74567" | == "23756",
>>                     status == "K",
>>                     delinquent == true ) )
>> then
>>   $person.setStatus( "KT" );
>> end
>>
>> rule R2
>> when
>>  $person : ( Person( age > 35 | <25,
>>                     zipCode == "23546" | == "68570",
>>                     $lop : lastOrderPrice,
>>                     $ton : totalOrderNumber,
>>                     ( $lop > 300 || $ton > 2 ),
>>                     status == "T",
>>                     delinquent == true,
>>                     delinquentBucket == "3" )
>>             OR
>>             Person( lastOrderCategory == "098" | == "109",
>>                     zipCode == "74567" | == "23756",
>>                     status == "T",
>>                     delinquent == true,
>>                     delinquentBucket == "3" ) )
>> then
>>   $person.setStatus( "KT" );
>> end
>>
>>    Hope it helps.
>>
>>    []s
>>    Edson
>>
>>
>> Bill Zhang wrote:
>>
>> > Edson and Mark,
>> >
>> > Thank you for your help.
>> >
>> > I have the complete rule expressed in PASCAL-like language in the
>> > following. Mark mentioned that "and" is not needed at top level but I
>> > am not sure what syntax I can use to express the top-level "and" in
>> > the following rule when the top-level "and" is used to connect Person
>> > objects with complex matching logic.
>> >
>> > Thank you for pointing out the diffrence between "and" in a rules
>> > engine vs. normal programming language - I will do some more
>> > experiments on that.
>> >
>> > IF
>> > (
>> > (
>> >  (
>> >   (Person.Age > 35 OR Person.Age < 25)
>> >   AND
>> >   (Person.ZipCode =23546 OR Person.ZipCode = 68590)
>> >  )
>> >  and
>> >  (
>> >   (Person.LastOrderPrice > 300)
>> >   OR
>> >   (Person.TotalOrderNumber > 2)
>> >  )
>> > )
>> > OR
>> > (
>> >  (
>> >   (Person.LastOrderCategory in ("098", "109") ) AND
>> >   (Person.ZipCode =74567 or Person.ZipCode = 23765)
>> >  )
>> >  and
>> >  (
>> >   (Person.LastOrderPrice > 1000 OR
>> >   (Person.TotalOrderNumber > 1)
>> >  )
>> > )
>> > )
>> >
>> > AND // Top Level AND
>> >
>> > (
>> >  (Person.Status="K" AND Person.IsDelinquent = "true")
>> >  OR
>> >  (Person.Status="T" AND Person.IsDelinquent = "true" AND
>> > Person.DelinquentBucket = "3")
>> > )
>> >
>> > THEN Person.Status = "KT";
>> >
>> >
>> >
>> >
>> > On 2/19/07, Edson Tirelli <tirelli at post.com> wrote:
>> >
>> >>   Bill,
>> >>
>> >>   The new version works fine with nested conditional elements and 
>> allow
>> >> for any level of nesting. You simply must be very careful with OR 
>> as the
>> >> semantics of OR in a rules engine are not exactly the same as most
>> >> people are used to in imperative programming.
>> >>   Also, the syntax you showed bellow is not correct (but maybe it was
>> >> simply a typo in the e-mail).
>> >>
>> >>   Maybe if you can write your "intent" or a sample rule (in english)
>> >> you are trying to implement it is easier to help.
>> >>
>> >>    []s
>> >>    Edson
>> >>
>> >>
>> >> Bill Zhang wrote:
>> >>
>> >> > Edson,
>> >> >
>> >> > Thanks for the reply. The rule you authored worked fine on my new
>> >> > Drools build from SVN.
>> >> >
>> >> > However, I did notice that the following pattern matching is not
>> >> working:
>> >> >
>> >> > $p: Person(
>> >> >      (Person(some comparison logic) or Person(some comparison 
>> logic) )
>> >> >      and
>> >> >      (Person(some comparison logic) or Person(some comparison 
>> logic) )
>> >> > )
>> >> >
>> >> > Looks like althugh "or" is allowed, the new version does not use 
>> "and"
>> >> > within pattern matching. Am I right or did I do something wrong?
>> >> >
>> >> > Thanks,
>> >> >
>> >> > Bill
>> >> >
>> >> > On 2/19/07, Edson Tirelli <tirelli at post.com> wrote:
>> >> >
>> >> >>   Bill,
>> >> >>
>> >> >>   Unfortunatelly we are working hard to get all features 
>> finished in
>> >> >> time for the release and the documentation will only be done right
>> >> >> before release unless we get some help from community. So, maybe
>> >> if you
>> >> >> (or anyone else) think you can help with that, we would gladly
>> >> provide
>> >> >> you with info that when written down would be usefull both for 
>> your
>> >> >> users/team and to other drools users.
>> >> >>
>> >> >>   You need to use bound variables when you want to do an OR (||)
>> >> >> between constraints of different fields inside a single Pattern.
>> >> So, in
>> >> >> your example, as you want to do:
>> >> >>
>> >> >> lastOrderPrice > 300 OR totalOrderNumber >2
>> >> >>
>> >> >>   For the same Person object, it means you need to do either:
>> >> >>
>> >> >> Person(  $lop: lastOrderPrice,  $ton: totalOrderNumber,  ( $lop >
>> >> 300 ||
>> >> >> $ton >2 ))
>> >> >>
>> >> >>   Or using a predicate without the bound variables:
>> >> >>
>> >> >> $p: Person( ($p.getLastOrderPrice() > 300 ||
>> >> $p.getTotalOrderNumber() >
>> >> >> 2 ) )
>> >> >>
>> >> >>   Or use an eval (that I think is the least efficient way):
>> >> >>
>> >> >> $p: Person()
>> >> >> eval( $p.getLastOrderPrice() > 300 || $p.getTotalOrderNumber() 
>> > 2 )
>> >> >>
>> >> >>    From the above options, I would go with the first.
>> >> >>    Unfortunatelly, there is no semantics currently defined for the
>> >> >> syntax you used:
>> >> >>
>> >> >> Person( lastOrderPrice > 300 || totalOrderNumber >2 )
>> >> >>
>> >> >>    We may eventually do it in the future, but for now (Mark can
>> >> confirm
>> >> >> that), we don't have resources to add it to the next major release
>> >> >> (again, unless community comes in to help).
>> >> >>
>> >> >>   []s
>> >> >>   Edson
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >> Bill Zhang wrote:
>> >> >>
>> >> >> > That's it, Edson. I'll give it a try and I'll let you know
>> >> whether I
>> >> >> > make it.
>> >> >> >
>> >> >> > Edson, I will appreciate if you can point to me where is the 
>> most
>> >> >> > recent syntax document. Thanks.
>> >> >> >
>> >> >> > I am not sure why I need to use bound variables ($lop:
>> >> >> > lastOrderPrice). Can I write it in the following:
>> >> >> >
>> >> >> > rule ...
>> >> >> > when
>> >> >> >   $person : ( Person( age > 35 | <25,
>> >> >> >                              zipCode == "23546" | == "68570",
>> >> >> >                              ( lastOrderPrice > 300 ||
>> >> >> > totalOrderNumber >2 ))
>> >> >> >                   or
>> >> >> >                   Person( lastOrderCategory == "098" | == "109",
>> >> >> >                               zipCode == "74567" | == "23756" 
>> ) )
>> >> >> > then
>> >> >> >   $person.setStatus( "KT" );
>> >> >> > end
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > Thanks to everyone helping me. This is really a great community.
>> >> >> >
>> >> >> > On 2/19/07, Edson Tirelli <tirelli at post.com> wrote:
>> >> >> >
>> >> >> >>
>> >> >> >>    Bill,
>> >> >> >>
>> >> >> >>    Your statement bellow can be written in 3.1M1 as:
>> >> >> >>
>> >> >> >> rule ...
>> >> >> >> when
>> >> >> >>    $person : ( Person( age > 35 | <25,
>> >> >> >>                               zipCode == "23546" | == "68570",
>> >> >> >>                               $lop: lastOrderPrice,
>> >> >> >>                               $ton: totalOrderNumber,
>> >> >> >>                               ( $lop > 300 || $ton >2 ))
>> >> >> >>                    or
>> >> >> >>                    Person( lastOrderCategory == "098" | == 
>> "109",
>> >> >> >>                                zipCode == "74567" | == 
>> "23756" ) )
>> >> >> >> then
>> >> >> >>    $person.setStatus( "KT" );
>> >> >> >> end
>> >> >> >>
>> >> >> >>     []s
>> >> >> >>     Edson
>> >> >> >>
>> >> >> >> Bill Zhang wrote:
>> >> >> >>
>> >> >> >> > Hi Alex,
>> >> >> >> >
>> >> >> >> > Thank you for confirming this. Writing such a builder may
>> >> take us a
>> >> >> >> > lot of time because our business user is used to free style
>> >> >> >> > Pascal-like authoring using quite complex logic. For example,
>> >> >> >> >
>> >> >> >> > IF
>> >> >> >> > (
>> >> >> >> > (
>> >> >> >> >  (Person.Age > 35 OR Person.Age < 25) AND
>> >> >> >> >  (Person.ZipCode =23546 or Person.ZipCode = 68590)
>> >> >> >> > )
>> >> >> >> > and
>> >> >> >> > (
>> >> >> >> >  (Person.LastOrderPrice > 300 OR
>> >> >> >> >  (Person.TotalOrderNumber > 2)
>> >> >> >> > )
>> >> >> >> > )
>> >> >> >> > OR
>> >> >> >> > (
>> >> >> >> > (
>> >> >> >> >  (Person.LastOrderCategory in ("098", "109") ) AND
>> >> >> >> >  (Person.ZipCode =74567 or Person.ZipCode = 23765)
>> >> >> >> > )
>> >> >> >> > and
>> >> >> >> > (
>> >> >> >> >  (Person.LastOrderPrice > 1000 OR
>> >> >> >> >  (Person.TotalOrderNumber > 1)
>> >> >> >> > )
>> >> >> >> > )
>> >> >> >> > ...
>> >> >> >> >
>> >> >> >> > THEN Person.Status = "KT";
>> >> >> >> >
>> >> >> >> > Before I set out to write the builder, I would like to know
>> >> whether
>> >> >> >> > the new syntax can handle the above logic? Also, where can I
>> >> find
>> >> >> >> > document for the new syntax?
>> >> >> >> >
>> >> >> >> > I am also trying to find some existing open source Java
>> >> library to
>> >> >> >> > "flatten out" these complex logic - to break these complex
>> >> logic to
>> >> >> >> > atomic ones that can be handled by Drools. Do you have any
>> >> >> >> > recommendation?
>> >> >> >> >
>> >> >> >> > Thanks a lot for your help.
>> >> >> >> >
>> >> >> >> > Bill Y.
>> >> >> >> >
>> >> >> >> >
>> >> >> >> >
>> >> >> >> >
>> >> >> >> > On 2/19/07, Alexander Varakin <avarakin at optonline.net> wrote:
>> >> >> >> >
>> >> >> >> >> We built a Rule Builder which creates drl with all possible
>> >> >> >> >> combinations. In any case, drl syntax is not exactly
>> >> business user
>> >> >> >> >> friendly, so having such builder is not a bad idea.
>> >> >> >> >> Simple Rule Builder can be implemented as an Excel 
>> spreadsheet,
>> >> >> which
>> >> >> >> >> can be easily parsed using POI library and then drl file
>> >> produced.
>> >> >> >> >>
>> >> >> >> >> Steven Williams wrote:
>> >> >> >> >> > Hi Bill,
>> >> >> >> >> >
>> >> >> >> >> > To implement your rules in 3.0.5 you would need to 
>> implement
>> >> >> a rule
>> >> >> >> >> > for  each combination of age and zipCode.
>> >> >> >> >> >
>> >> >> >> >> > $a : Person(age > 35 zipCode == 23546)
>> >> >> >> >> > then
>> >> >> >> >> > $a.setStatus("KT");
>> >> >> >> >> >
>> >> >> >> >> > $a : Person(age < 25, zipCode == 23546 )
>> >> >> >> >> > then
>> >> >> >> >> > $a.setStatus("KT");
>> >> >> >> >> >
>> >> >> >> >> > $a : Person(age > 35, zipCode == 68590)
>> >> >> >> >> > then
>> >> >> >> >> > $a.setStatus("KT");
>> >> >> >> >> >
>> >> >> >> >> > etc..
>> >> >> >> >> >
>> >> >> >> >> > Steve
>> >> >> >> >> >
>> >> >> >> >> > On 2/19/07, *Bill Zhang* <billzhang2006 at gmail.com
>> >> >> >> >> > <mailto:billzhang2006 at gmail.com>> wrote:
>> >> >> >> >> >
>> >> >> >> >> >     So Alex, if I only want to use the old syntax that 
>> is in
>> >> >> >> >> production,
>> >> >> >> >> >     there is no way to implement my seemingly simple logic
>> >> >> >> >> conditioning?
>> >> >> >> >> >
>> >> >> >> >> >     Thanks for your help.
>> >> >> >> >> >
>> >> >> >> >> >     On 2/18/07, Alexander Varakin < avarakin at optonline.net
>> >> >> >> >> >     <mailto:avarakin at optonline.net>> wrote:
>> >> >> >> >> >     > As far as I know this syntax is new and is 
>> available in
>> >> >> SVN
>> >> >> >> >> >     only, you
>> >> >> >> >> >     > will have to wait till 3.1 is released or take
>> >> source from
>> >> >> >> SVN
>> >> >> >> >> >     and build it.
>> >> >> >> >> >     >
>> >> >> >> >> >     > Bill Zhang wrote:
>> >> >> >> >> >     > > Hi Steven,
>> >> >> >> >> >     > >
>> >> >> >> >> >     > > Thank you very much for your help. Really 
>> appreciate.
>> >> >> >> >> >     > >
>> >> >> >> >> >     > > I still got the same error, Unexpected token 
>> '|'. I
>> >> >> did not
>> >> >> >> >> >     see "|" in
>> >> >> >> >> >     > > the document, only saw "||", which is supposed 
>> to be
>> >> >> >> used with
>> >> >> >> >> >     > > columns.
>> >> >> >> >> >     > >
>> >> >> >> >> >     > > Ye
>> >> >> >> >> >     > >
>> >> >> >> >> >     > > On 2/18/07, Steven Williams <
>> >> >> >> stevenw at objectconsulting.com.au
>> >> >> >> >> >     <mailto:stevenw at objectconsulting.com.au>> wrote:
>> >> >> >> >> >     > >> Hi Bill,
>> >> >> >> >> >     > >>
>> >> >> >> >> >     > >> I think it should be:
>> >> >> >> >> >     > >>
>> >> >> >> >> >     > >> $a : Person(age > 35 | < 25, zipCode == 23546 
>> | ==
>> >> >> 68590)
>> >> >> >> >> >     > >>
>> >> >> >> >> >     > >> Edson, Mark or Michael can probably confirm or
>> >> >> correct the
>> >> >> >> >> >     above syntax.
>> >> >> >> >> >     > >>
>> >> >> >> >> >     > >> Make sure you are running of the latest trunk.
>> >> >> >> >> >     > >>
>> >> >> >> >> >     > >> cheers
>> >> >> >> >> >     > >> Steve
>> >> >> >> >> >     > >>
>> >> >> >> >> >     > >>
>> >> >> >> >> >     > >> On 2/18/07, Bill Zhang <billzhang2006 at gmail.com
>> >> >> >> >> >     <mailto:billzhang2006 at gmail.com>> wrote:
>> >> >> >> >> >     > >> >
>> >> >> >> >> >     > >> > I tried:
>> >> >> >> >> >     > >> >
>> >> >> >> >> >     > >> > $a : Person(age > 35 || age < 25, zipCode == 
>> 23546
>> >> >> || ==
>> >> >> >> >> 68590)
>> >> >> >> >> >     > >> >
>> >> >> >> >> >     > >> > Errors:
>> >> >> >> >> >     > >> > org.drools.rule.InvalidRulePackage : 
>> unknown:39:30
>> >> >> >> >> >     > >> Unexpected token '||'
>> >> >> >> >> >     > >> > unknown:39:40 mismatched token:
>> >> >> >> >> >     > >> [@246,1040:1041='<=',<47>,39:40];
>> >> >> >> >> >     > >> > expecting type '('
>> >> >> >> >> >     > >> > unknown:39:92 mismatched token:
>> >> >> >> >> >     > >> [@258,1092:1092='<',<46>,39:92];
>> >> >> >> >> >     > >> > expecting type '('
>> >> >> >> >> >     > >> >
>> >> >> >> >> >     > >> > I also tried
>> >> >> >> >> >     > >> >
>> >> >> >> >> >     > >> > $a : Person(age > 35 | age < 25, zipCode == 
>> 23546
>> >> >> | ==
>> >> >> >> >> 68590)
>> >> >> >> >> >     > >> >
>> >> >> >> >> >     > >> > Pretty much the same error.
>> >> >> >> >> >     > >> >
>> >> >> >> >> >     > >> > Based on the document, "||" is only valid for
>> >> >> columns...
>> >> >> >> >> >     > >> >
>> >> >> >> >> >     > >> >
>> >> >> >> >> >     > >> > On 2/17/07, Bill Zhang <billzhang2006 at gmail.com
>> >> >> >> >> >     <mailto:billzhang2006 at gmail.com>> wrote:
>> >> >> >> >> >     > >> > > Thank you Steve. But I got syntax error using
>> >> the
>> >> >> >> >> following.
>> >> >> >> >> >     > >> > >
>> >> >> >> >> >     > >> > > On 2/17/07, Steven Williams
>> >> >> >> >> >     <stevenw at objectconsulting.com.au
>> >> >> >> >> >     <mailto:stevenw at objectconsulting.com.au>> wrote:
>> >> >> >> >> >     > >> > > > In trunk I think you can use connective
>> >> >> constraints:
>> >> >> >> >> >     > >> > > >
>> >> >> >> >> >     > >> > > > $a : Person(age > 35 | < 25, zipCode == 
>> 23546
>> >> >> | ==
>> >> >> >> >> 68590)
>> >> >> >> >> >     > >> > > > then
>> >> >> >> >> >     > >> > > > $a.setStatus("KT");
>> >> >> >> >> >     > >> > > >
>> >> >> >> >> >     > >> > > >
>> >> >> >> >> >     > >> > > >
>> >> >> >> >> >     > >> > > >
>> >> >> >> >> >     > >> > > > On 2/18/07, Bill Zhang <
>> >> billzhang2006 at gmail.com
>> >> >> >> >> >     <mailto:billzhang2006 at gmail.com>> wrote:
>> >> >> >> >> >     > >> > > > >
>> >> >> >> >> >     > >> > > > > Hello,
>> >> >> >> >> >     > >> > > > >
>> >> >> >> >> >     > >> > > > > I am a new Drools user trying to 
>> convert the
>> >> >> >> >> >     following simple
>> >> >> >> >> >     > >> logic
>> >> >> >> >> >     > >> into
>> >> >> >> >> >     > >> > > > DRL:
>> >> >> >> >> >     > >> > > > >
>> >> >> >> >> >     > >> > > > > IF (Person.Age > 35 OR Person.Age < 
>> 25) AND
>> >> >> >> >> >     (Person.ZipCode =
>> >> >> >> >> >     > >> 23546
>> >> >> >> >> >     > >> or
>> >> >> >> >> >     > >> > > > > Person.ZipCode = 68590)
>> >> >> >> >> >     > >> > > > > THEN
>> >> >> >> >> >     > >> > > > > Person.Status = "KT";
>> >> >> >> >> >     > >> > > > >
>> >> >> >> >> >     > >> > > > > I found that it is not easy to convert 
>> the
>> >> >> above
>> >> >> >> >> >     logic into
>> >> >> >> >> >     > >> ONE DRL
>> >> >> >> >> >     > >> rule.
>> >> >> >> >> >     > >> > > > >
>> >> >> >> >> >     > >> > > > > I tried something like this
>> >> >> >> >> >     > >> > > > >
>> >> >> >> >> >     > >> > > > > when
>> >> >> >> >> >     > >> > > > > $a: Person(age>35) or Person (age<25)
>> >> >> >> >> >     > >> > > > > $b: Person(Zipcode==23456) or Person
>> >> >> (ZipCode ==
>> >> >> >> >> 68590)
>> >> >> >> >> >     > >> > > > > $c: $a and $b
>> >> >> >> >> >     > >> > > > > Then
>> >> >> >> >> >     > >> > > > > $c.setStatus("KT")
>> >> >> >> >> >     > >> > > > >
>> >> >> >> >> >     > >> > > > > But looks like I can not use
>> >> >> >> >> >     > >> > > > > $c: $a and $b
>> >> >> >> >> >     > >> > > > > becaue in Drools, you can only bind
>> >> variable to
>> >> >> >> >> >     column, not
>> >> >> >> >> >     > >> to other
>> >> >> >> >> >     > >> > > > varaibles.
>> >> >> >> >> >     > >> > > > >
>> >> >> >> >> >     > >> > > > > Please advise how to do this. I would
>> >> >> imagine this
>> >> >> >> >> >     should be
>> >> >> >> >> >     > >> quite
>> >> >> >> >> >     > >> > > > > simple, maybe I missed something quite
>> >> obvious.
>> >> >> >> >> >     > >> > > > >
>> >> >> >> >> >     > >> > > > > I know that I can write custom Java 
>> method
>> >> >> to do
>> >> >> >> >> >     this, but if
>> >> >> >> >> >     > >> I do
>> >> >> >> >> >     > >> > > > > that, I suppose I lose the power of 
>> RETEOO
>> >> >> pattern
>> >> >> >> >> >     matching
>> >> >> >> >> >     > >> (pattern
>> >> >> >> >> >     > >> > > > resuing,
>> >> >> >> >> >     > >> > > > > etc.). So I prefer not to do that.
>> >> >> >> >> >     > >> > > > >
>> >> >> >> >> >     > >> > > > > I also understand I can break the above
>> >> logic
>> >> >> >> into 4
>> >> >> >> >> >     rules
>> >> >> >> >> >     > >> and that
>> >> >> >> >> >     > >> > > > > would be quite easy, but our business 
>> user
>> >> >> is not
>> >> >> >> >> used to
>> >> >> >> >> >     > >> think in
>> >> >> >> >> >     > >> > > > > that way. Also, we have more complex
>> >> logic than
>> >> >> >> the
>> >> >> >> >> >     above. So
>> >> >> >> >> >     > >> what I
>> >> >> >> >> >     > >> > > > > want is to see if there is a way to 
>> convert
>> >> >> this
>> >> >> >> >> >     > >> > > > > kind of logic in ONE DRL rule.
>> >> >> >> >> >     > >> > > > >
>> >> >> >> >> >     > >> > > > > Thanks in advance.
>> >> >> >> >> >     > >> > > > >
>> >> >> >> >> >     > >> > > > > Bill
>> >> >> >> >> >     > >> > > > >
>> >> _______________________________________________
>> >> >> >> >> >     > >> > > > > rules-users mailing list
>> >> >> >> >> >     > >> > > > > rules-users at lists.jboss.org
>> >> >> >> >> >     <mailto:rules-users at lists.jboss.org>
>> >> >> >> >> >     > >> > > > >
>> >> >> >> >> >     > >> 
>> https://lists.jboss.org/mailman/listinfo/rules-users
>> >> >> >> >> >     > >> > > > >
>> >> >> >> >> >     > >> > > >
>> >> >> >> >> >     > >> > > >
>> >> >> >> >> >     > >> > > >
>> >> >> >> >> >     > >> > > > --
>> >> >> >> >> >     > >> > > > Steven Williams
>> >> >> >> >> >     > >> > > >
>> >> >> >> >> >     > >> > > > Supervising Consultant
>> >> >> >> >> >     > >> > > >
>> >> >> >> >> >     > >> > > > Object Consulting
>> >> >> >> >> >     > >> > > > Office: 8615 4500 Mob: 0439 898 668 Fax: 
>> 8615
>> >> >> 4501
>> >> >> >> >> >     > >> > > > stevenw at objectconsulting.com.au
>> >> >> >> >> >     <mailto:stevenw at objectconsulting.com.au>
>> >> >> >> >> >     > >> > > > www.objectconsulting.com.au
>> >> >> >> >> >     <http://www.objectconsulting.com.au>
>> >> >> >> >> >     > >> > > >
>> >> >> >> >> >     > >> > > > consulting | development | training | 
>> support
>> >> >> >> >> >     > >> > > > our experience makes the difference
>> >> >> >> >> >     > >> > > >
>> >> _______________________________________________
>> >> >> >> >> >     > >> > > > rules-users mailing list
>> >> >> >> >> >     > >> > > > rules-users at lists.jboss.org
>> >> >> >> >> >     <mailto:rules-users at lists.jboss.org>
>> >> >> >> >> >     > >> > > >
>> >> >> https://lists.jboss.org/mailman/listinfo/rules-users
>> >> >> >> >> >     > >> > > >
>> >> >> >> >> >     > >> > > >
>> >> >> >> >> >     > >> > >
>> >> >> >> >> >     > >> > _______________________________________________
>> >> >> >> >> >     > >> > rules-users mailing list
>> >> >> >> >> >     > >> > rules-users at lists.jboss.org
>> >> >> >> >> >     <mailto:rules-users at lists.jboss.org>
>> >> >> >> >> >     > >> >
>> >> https://lists.jboss.org/mailman/listinfo/rules-users
>> >> >> >> >> >     > >> >
>> >> >> >> >> >     > >>
>> >> >> >> >> >     > >>
>> >> >> >> >> >     > >>
>> >> >> >> >> >     > >> --
>> >> >> >> >> >     > >> Steven Williams
>> >> >> >> >> >     > >>
>> >> >> >> >> >     > >> Supervising Consultant
>> >> >> >> >> >     > >>
>> >> >> >> >> >     > >> Object Consulting
>> >> >> >> >> >     > >> Office: 8615 4500 Mob: 0439 898 668 Fax: 8615 
>> 4501
>> >> >> >> >> >     > >> stevenw at objectconsulting.com.au
>> >> >> >> >> >     <mailto:stevenw at objectconsulting.com.au>
>> >> >> >> >> >     > >> www.objectconsulting.com.au
>> >> >> >> >> <http://www.objectconsulting.com.au>
>> >> >> >> >> >     > >>
>> >> >> >> >> >     > >> consulting | development | training | support
>> >> >> >> >> >     > >> our experience makes the difference
>> >> >> >> >> >     > >> _______________________________________________
>> >> >> >> >> >     > >> rules-users mailing list
>> >> >> >> >> >     > >> rules-users at lists.jboss.org
>> >> >> >> >> <mailto:rules-users at lists.jboss.org>
>> >> >> >> >> >     > >> 
>> https://lists.jboss.org/mailman/listinfo/rules-users
>> >> >> >> >> >     > >>
>> >> >> >> >> >     > >>
>> >> >> >> >> >     > > _______________________________________________
>> >> >> >> >> >     > > rules-users mailing list
>> >> >> >> >> >     > > rules-users at lists.jboss.org
>> >> >> >> >> <mailto:rules-users at lists.jboss.org>
>> >> >> >> >> >     > > 
>> https://lists.jboss.org/mailman/listinfo/rules-users
>> >> >> >> >> >     <https://lists.jboss.org/mailman/listinfo/rules-users>
>> >> >> >> >> >     > >
>> >> >> >> >> >     >
>> >> >> >> >> >     > _______________________________________________
>> >> >> >> >> >     > rules-users mailing list
>> >> >> >> >> >     > rules-users at lists.jboss.org
>> >> >> >> <mailto:rules-users at lists.jboss.org>
>> >> >> >> >> >     > https://lists.jboss.org/mailman/listinfo/rules-users
>> >> >> >> >> >     >
>> >> >> >> >> >     _______________________________________________
>> >> >> >> >> >     rules-users mailing list
>> >> >> >> >> >     rules-users at lists.jboss.org
>> >> >> >> <mailto:rules-users at lists.jboss.org>
>> >> >> >> >> >     https://lists.jboss.org/mailman/listinfo/rules-users
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> >
>> >> >> >> >> > --
>> >> >> >> >> > Steven Williams
>> >> >> >> >> >
>> >> >> >> >> > Supervising Consultant
>> >> >> >> >> >
>> >> >> >> >> > Object Consulting
>> >> >> >> >> > Office: 8615 4500 Mob: 0439 898 668 Fax: 8615 4501
>> >> >> >> >> > stevenw at objectconsulting.com.au
>> >> >> >> >> <mailto:stevenw at objectconsulting.com.au>
>> >> >> >> >> > www.objectconsulting.com.au
>> >> <http://www.objectconsulting.com.au>
>> >> >> >> >> >
>> >> >> >> >> > consulting | development | training | support
>> >> >> >> >> > our experience makes the difference
>> >> >> >> >> >
>> >> >> >> >>
>> >> >> >>
>> >> >>
>> >> 
>> ------------------------------------------------------------------------
>> >> >> >> >> >
>> >> >> >> >> > _______________________________________________
>> >> >> >> >> > 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
>> >> >> >> >>
>> >> >> >> > _______________________________________________
>> >> >> >> > 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 3124-6000
>> >> >> >>  Mobile: +55 11 9218-4151
>> >> >> >>  JBoss, a division of Red Hat @ www.jboss.com
>> >> >> >>
>> >> >> >>
>> >> >> >> _______________________________________________
>> >> >> >> 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 3124-6000
>> >> >>  Mobile: +55 11 9218-4151
>> >> >>  JBoss, a division of Red Hat @ www.jboss.com
>> >> >>
>> >> >>
>> >> >> _______________________________________________
>> >> >> 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 3124-6000
>> >>  Mobile: +55 11 9218-4151
>> >>  JBoss, a division of Red Hat @ www.jboss.com
>> >>
>> >>
>> >> _______________________________________________
>> >> 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 3124-6000
>>  Mobile: +55 11 9218-4151
>>  JBoss, a division of Red Hat @ www.jboss.com
>>
>>
>> _______________________________________________
>> 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 3124-6000
 Mobile: +55 11 9218-4151
 JBoss, a division of Red Hat @ www.jboss.com





More information about the rules-users mailing list