[rules-users] Convert logic to DRL rules

Bill Zhang billzhang2006 at gmail.com
Thu Feb 22 00:00:41 EST 2007


Hi Edson,

That was fast :-)

After a couple of positive and negative tests, I think it worked.

Thanks for your help,

Bill

On 2/21/07, Edson Tirelli <tirelli at post.com> wrote:
>   Bill,
>
>   I fixed this bug this morning and it will be included in 3.1M2. Also,
> if you want to try, just checkout source code and build it. It will work
> now.
>
> http://jira.jboss.com/jira/browse/JBRULES-554
>
>   []s
>   Edson
>
> Edson Tirelli wrote:
>
> >    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
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



More information about the rules-users mailing list