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(a)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(a)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(a)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(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
>>> >> >>
>>> >> > _______________________________________________
>>> >> > 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
>>>
>> _______________________________________________
>> 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