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(a)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(a)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(a)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(a)gmail.com
>> >> > <mailto:billzhang2006@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(a)optonline.net
>> >> > <mailto:avarakin@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(a)objectconsulting.com.au
>> >> > <mailto:stevenw@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(a)gmail.com
>> >> > <mailto:billzhang2006@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(a)gmail.com
>> >> > <mailto:billzhang2006@gmail.com>> wrote:
>> >> > > >> > > Thank you Steve. But I got syntax
error using the
>> >> following.
>> >> > > >> > >
>> >> > > >> > > On 2/17/07, Steven Williams
>> >> > <stevenw(a)objectconsulting.com.au
>> >> > <mailto:stevenw@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(a)gmail.com
>> >> > <mailto:billzhang2006@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(a)lists.jboss.org
>> >> > <mailto:rules-users@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(a)objectconsulting.com.au
>> >> > <mailto:stevenw@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(a)lists.jboss.org
>> >> > <mailto:rules-users@lists.jboss.org>
>> >> > > >> > > >
https://lists.jboss.org/mailman/listinfo/rules-users
>> >> > > >> > > >
>> >> > > >> > > >
>> >> > > >> > >
>> >> > > >> >
_______________________________________________
>> >> > > >> > rules-users mailing list
>> >> > > >> > rules-users(a)lists.jboss.org
>> >> > <mailto:rules-users@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(a)objectconsulting.com.au
>> >> > <mailto:stevenw@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(a)lists.jboss.org
>> >> <mailto:rules-users@lists.jboss.org>
>> >> > > >>
https://lists.jboss.org/mailman/listinfo/rules-users
>> >> > > >>
>> >> > > >>
>> >> > > > _______________________________________________
>> >> > > > rules-users mailing list
>> >> > > > rules-users(a)lists.jboss.org
>> >> <mailto:rules-users@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(a)lists.jboss.org
>> <mailto:rules-users@lists.jboss.org>
>> >> > >
https://lists.jboss.org/mailman/listinfo/rules-users
>> >> > >
>> >> > _______________________________________________
>> >> > rules-users mailing list
>> >> > rules-users(a)lists.jboss.org
>> <mailto:rules-users@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(a)objectconsulting.com.au
>> >> <mailto:stevenw@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(a)lists.jboss.org
>> >> >
https://lists.jboss.org/mailman/listinfo/rules-users
>> >> >
>> >>
>> >> _______________________________________________
>> >> rules-users mailing list
>> >> rules-users(a)lists.jboss.org
>> >>
https://lists.jboss.org/mailman/listinfo/rules-users
>> >>
>> > _______________________________________________
>> > rules-users mailing list
>> > rules-users(a)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(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>
> _______________________________________________
> rules-users mailing list
> rules-users(a)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(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users