Vlad,
I think that for Bill's case, the object structure is flatten already
(what is good for rules). Creating nested objects will actually make it
more difficult to write the rules...
Just my 0.02c
[]s
Edson
Olenin, Vladimir (MOH) wrote:
I guess if you modify the business objects a bit (in quite weird way -
I
think it would be rather a shortcut than a solution) you can implement this
kind of logic: you need to swap property (zipcode, age, etc) and 'property
ownner' (Person) objects, so that you'll have:
Person (id)
ZipCode (id, code)
Age (id, age)
Etc
In this case you should be able to write:
Rule X
When
$p: Person($id: id)
(
ZipCode(id == $id, code == "23456")
or ZipCode(id == $id, code == "68590")
)
And
(
Age(id == $id, age < 25)
Or Age(id == $id, age > 34)
)
Then
// do smth using $p
End
Or smth along those lines... Would that work?.....
Vlad
-----Original Message-----
From: rules-users-bounces(a)lists.jboss.org
[mailto:rules-users-bounces@lists.jboss.org] On Behalf Of Bill Zhang
Sent: 19 February 2007 09:14
To: Rules Users List
Subject: Re: [rules-users] Convert logic to DRL rules
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
_______________________________________________
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 @