[rules-users] Convert logic to DRL rules

Edson Tirelli tirelli at post.com
Mon Feb 19 11:01:22 EST 2007


 
    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





More information about the rules-users mailing list