[rules-users] Convert logic to DRL rules

Bill Zhang billzhang2006 at gmail.com
Mon Feb 19 10:39:42 EST 2007


Thank you Edson.

Doe sthe new syntax support something like this:

$a : Person(
      (age > 35 | < 25,  zipCode == 23546 | == 68590,  LastOrderPrice
> 300 | TotalOrderNumber > 2 ) | (some other logic)
)

then

$a.setStaus("KT")

If I can put all complex logic in the condition part, that would be great.

Our business logic is quite complex and the business partners do not
want to break them down because they have a lot of these rules.

Thanks,

Ye


On 2/19/07, Edson Tirelli <tirelli at post.com> wrote:
>   Bill,
>
>   The way of doing that is using connective constraints as explained by
> Steven previously:
>
> $a : Person(age > 35 | < 25, zipCode == 23546 | == 68590)
>
>   This is a new feature that only works in 3.1M1 and later versions.
>
>   []s
>   Edson
>
>
> Bill Zhang wrote:
>
> > Hi Steven,
> >
> > Yes I thought of that but our business user says this is unacceptable
> > unless I can write a parser to automatically generate all these
> > combinations.
> >
> > The example I use is quite simple. Our business user have quite
> > complex logic expressions (imagin my example plus a lot of parenthesis
> > to build up multiple level logic) already built using Pascal like
> > language and it is not easy to do.
> >
> > Thanks,
> >
> > Ye
> >
> > On 2/19/07, Steven Williams <stevenw at objectconsulting.com.au> 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> 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> 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>
> >> 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> 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> wrote:
> >> > > >> > > Thank you Steve. But I got syntax error using the following.
> >> > > >> > >
> >> > > >> > > On 2/17/07, Steven Williams <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> 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
> >> > > >> > > > >
> >> > > >> 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
> >> > > >> > > > 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
> >> > > >> >
> >> > > >>
> >> > > >>
> >> > > >>
> >> > > >> --
> >> > > >> Steven Williams
> >> > > >>
> >> > > >> Supervising Consultant
> >> > > >>
> >> > > >> Object Consulting
> >> > > >> Office: 8615 4500 Mob: 0439 898 668 Fax: 8615 4501
> >> > > >> stevenw at objectconsulting.com.au
> >> > > >> 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
> >> > >
> >> > _______________________________________________
> >> > rules-users mailing list
> >> > 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
> >> 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
> >
>
>
> --
>  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