got it...
i guess ive been using drools 2.x for too long...since beta 2.0 beta 17...
any other way to do the or's?
Joel G. Rivera-Gonzalez
PRT
"The first 90% of a project takes 90% of the time, the last 10% takes the other 90%
of the time" - Murphy's Law
----- Original Message ----
From: Edson Tirelli <tirelli(a)post.com>
To: Rules Users List <rules-users(a)lists.jboss.org>
Sent: Tuesday, January 9, 2007 8:12:05 PM
Subject: Re: [rules-users] About String..."==" same as ".equals"?
Joel,
No. Your mistake is on the mapping of objects x patterns. Let me show
you an example:
If you write a rule like this:
rule "expensive muzzarela"
when
Cheese( type == "muzzarela", price > 50 )
then
// so something
end
You are saying the engine: "- match each SINGLE instance of Cheese
that is BOTH type == "muzzarela" AND whose price is greater than 50".
If you write a rule like this:
rule "one muzzarela and one expensive cheese"
when
Cheese( type == "muzzarela" )
Cheese( price > 50 )
then
// do something
end
You are saying the engine: "- match each PAIR of Cheese instances,
where the FIRST instance is of type == "muzzarela" and the SECOND
instance is of any cheese that has price greater than 50".
Do you see the difference?
So, if you do:
workingMemory.assert( new Cheese("muzzarela", 70) );
workingMemory.fireAllRules();
Only the first rule will fire, because the second rule requires 2
objects, one matching each constraint.
If you do:
workingMemory.assert( new Cheese("muzzarela", 10) );
workingMemory.assert( new Cheese("brie", 70) );
workingMemory.fireAllRules();
Only the second rule will fire, because the first rule requires that
a single object match BOTH constraints.
So, the above has nothing to do with variable bindings, but to make
clear, you can bind variables to each of the patterns you write, but you
can't use the same variable name for different patterns as each pattern
will match a different object.
Also, please note that top level AND operator is optional as it is
already implicitly handled. So, the bellow rule is IDENTICAL to the one
I wrote above:
rule "one muzzarela and one expensive cheese"
when
Cheese( type == "muzzarela" ) AND
Cheese( price > 50 )
then
// do something
end
I hope it clarified things a little bit. Let me know if you still
have questions.
[]s
Edson
Joel G. Rivera-González wrote:
i see...
when 3.2 will be available?
:-)
ok...
so i'm writing the rules the wrong way?
i need to put the and's on the same line separated by ','?
i if wanted to the it the way i wrote the rules i would have to put a
different name to each of the objects right? (mto1:MegaTransferObject
mto2:MegaTransferObject, ect)
this is a little complicated and i dindt saw it on the
documentation...where i can read about it?
i will rewrite the rules to match the right way...
thanks...
Joel G. Rivera-Gonzalez
PRT
"The first 90% of a project takes 90% of the time, the last 10% takes
the other 90% of the time" - Murphy's Law
----- Original Message ----
From: Edson Tirelli <tirelli(a)post.com>
To: Rules Users List <rules-users(a)lists.jboss.org>
Sent: Tuesday, January 9, 2007 6:44:22 PM
Subject: Re: [rules-users] About String..."==" same as ".equals"?
Joel,
If it is the same object that you are trying to match against all of
those constraints, just list all your constraints separated by ','
(comma):
rule "dtv_discount_request"
when
mto : MegaTransferObject( orders_FkOrderTypeId ==
Constants.NEW_COMPLETED_ORDER_TYPE,
ct:other_ChannelType -> ( !
ct.equalsIgnoreCase(Constants.CHANNEL_TYPE_RESELLER)),
orders_FkChannelId !=
Constants.ISP_CHANNEL_ID_PRW,
orders_FkChannelId !=
Constants.ISP_CHANNEL_ID_TLD,
orders_FkChannelId !=
Constants.ISP_CHANNEL_ID_AOL,
other_HasDtvDiscountRequest == false,
pl:phoneList_GovernmentAccount -> ( (pl
== null) || ( pl.equals(Constants.FLAG_NO)) ),
cp:customerProfile_DtvDiscount -> ( (cp
== null) || ( cp.equals(Constants.FLAG_NO)) ),
oa:other_AccountType -> ( ( oa == null)
|| ( oa.equals( Constants.PHONE_TYPE_RESIDENTIAL)) ) )
then
menu.add(new String[]{Constants.SERVICE_ASSURANCE_TREE_MENU_DSL,
Constants.SERVICE_ASSURANCE_MENU_DTV_DISCOUNT_REQUEST});
end
Just remember:
* you must have one and only one pattern for each single object you want
to match in each rule, i.e., the mapping between patterns and object
instances is always one-to-one.
* constraints are separated by ',' (comma), and ',' has an implicit
meaning of AND between constraints
* version 3.0.x does not support OR between constraints, so the way
around it is to use predicates like I demonstrated above. Version 3.2
already has support for connective OR constraints.
I hope it helps.
[]s
Edson
Joel G. Rivera-González wrote:
> i see...that would works...but now if you add stuff and make a rule
> that look like this, the binding will not work...
>
> rule "dtv_discount_request"
> when
> MegaTransferObject(orders_FkOrderTypeId ==
> Constants.NEW_COMPLETED_ORDER_TYPE) and
> not MegaTransferObject(ct:other_ChannelType ->
> (ct.equalsIgnoreCase(Constants.CHANNEL_TYPE_RESELLER))) and
> (not MegaTransferObject(orders_FkChannelId ==
> Constants.ISP_CHANNEL_ID_PRW) and
> not MegaTransferObject(orders_FkChannelId ==
> Constants.ISP_CHANNEL_ID_TLD) and
> not MegaTransferObject(orders_FkChannelId ==
> Constants.ISP_CHANNEL_ID_AOL)) and
> (MegaTransferObject(phoneList_GovernmentAccount == null) or
> MegaTransferObject(phoneList_GovernmentAccount ==
Constants.FLAG_NO)) and
> (MegaTransferObject(customerProfile_DtvDiscount == null) or
> MegaTransferObject(customerProfile_DtvDiscount ==
Constants.FLAG_NO)) and
> (MegaTransferObject(other_AccountType == null) or
> MegaTransferObject(other_AccountType ==
> Constants.PHONE_TYPE_RESIDENTIAL)) and
> MegaTransferObject(other_HasDtvDiscountRequest == false)
> then
> menu.add(new
> String[]{Constants.SERVICE_ASSURANCE_TREE_MENU_DSL,
> Constants.SERVICE_ASSURANCE_MENU_DTV_DISCOUNT_REQUEST});
> end
>
> i was trying to bre creative and add megaTO: before all the
> MegaTransferObject and it gave me the compilation error you
> mention...but only after the third megaTO:
>
>
> Joel G. Rivera-Gonzalez
> PRT
>
> "The first 90% of a project takes 90% of the time, the last 10% takes
> the other 90% of the time" - Murphy's Law
>
>
> ----- Original Message ----
> From: Edson Tirelli <tirelli(a)post.com>
> To: Rules Users List <rules-users(a)lists.jboss.org>
> Sent: Tuesday, January 9, 2007 4:39:57 PM
> Subject: Re: [rules-users] About String..."==" same as
".equals"?
>
> Joel,
>
> I just noticed in your last rule you do the binding to the same
> variable:
>
> > megaTO:MegaTransferObject(other_AccountType == "RMS")
> > megaTO:MegaTransferObject(other_HasDtvDiscountRequest ==
false)
>
> I thought that feature was already disabled... :( it should give you
> an error of duplicate variable declaration! is it not raising an error
> when compiling the rule??
>
> The correct way of doing it if it is the same object is getting both
> constraints in the same pattern:
>
> megaTO: MegaTransferObject( other_AccountType == "RMS",
> other_HasDtvDiscountRequest == false)
>
> So, rules 1 and 2 are correct in not firing, since you would need 2
> different objects to match the 2 patterns in them.
> The mapping between patterns and objects is "one-to-one".
>
> []s
> Edson
>
>
>
> Joel G. Rivera-González wrote:
>
> > 1. i downloaded the latest release from the download page...
> > 2. just one MTO...the returning arrayList should have arround 10
values.
> >
> > will do an example and (class and ruleFile) and send it to your
email...
> >
> > thanks
> >
> > Joel G. Rivera-Gonzalez
> > PRT
> >
> > "The first 90% of a project takes 90% of the time, the last 10% takes
> > the other 90% of the time" - Murphy's Law
> >
> >
> > ----- Original Message ----
> > From: Edson Tirelli <tirelli(a)post.com>
> > To: Rules Users List <rules-users(a)lists.jboss.org>
> > Sent: Tuesday, January 9, 2007 3:29:26 PM
> > Subject: Re: [rules-users] About String..."==" same as
".equals"?
> >
> >
> > Joel,
> >
> > Your rules seems to be correct.
> > Questions:
> >
> > 1. What JBRules version are you using?
> >
> > 2. How many MTO instances are you asserting in the working memory,
that
> > would match each Pattern in your rule?
> >
> > It may be an issue with "or". Can you provide a self contained
test
> > for me to investigate?
> >
> > Thank you
> > Edson
> >
> > Joel G. Rivera-González wrote:
> >
> > > i have to be doing something wrong...but it make no sense...
> > > a MegaTransferObject is asserted.
> > >
> > > case1: No rules fired.
> > > rule "dtv_discount_request"
> > > when
> > > MegaTransferObject(other_AccountType == null) or
> > > MegaTransferObject(other_AccountType ==
> > > Constants.PHONE_TYPE_RESIDENTIAL)
> > > MegaTransferObject(other_HasDtvDiscountRequest == false)
> > > then
> > > menu.add(new
> > > String[]{Constants.SERVICE_ASSURANCE_TREE_MENU_DSL,
> > > Constants.SERVICE_ASSURANCE_MENU_DTV_DISCOUNT_REQUEST});
> > > end
> > >
> > > case 2: no rule fired.
> > >
> > > rule "dtv_discount_request"
> > > when
> > > MegaTransferObject(other_AccountType == null) or
> > > MegaTransferObject(other_AccountType == "RMS")
> > > MegaTransferObject(other_HasDtvDiscountRequest == false)
> > > then
> > > menu.add(new
> > > String[]{Constants.SERVICE_ASSURANCE_TREE_MENU_DSL,
> > > Constants.SERVICE_ASSURANCE_MENU_DTV_DISCOUNT_REQUEST});
> > > end
> > >
> > > case 3: rule fired
> > >
> > > rule "dtv_discount_request"
> > > when
> > > megaTO:MegaTransferObject(other_AccountType == "RMS")
> > > megaTO:MegaTransferObject(other_HasDtvDiscountRequest ==
> false)
> > > then
> > > menu.add(new
> > > String[]{Constants.SERVICE_ASSURANCE_TREE_MENU_DSL,
> > > Constants.SERVICE_ASSURANCE_MENU_DTV_DISCOUNT_REQUEST});
> > > end
> > >
> > > i really dont get it...
> > > i must not be getting something...
> > > help...
> > >
> > >
> > > Joel G. Rivera-Gonzalez
> > > PRT
> > >
> > > "The first 90% of a project takes 90% of the time, the last 10%
takes
> > > the other 90% of the time" - Murphy's Law
> > >
> > >
> > > ----- Original Message ----
> > > From: Edson Tirelli <tirelli(a)post.com>
> > > To: Rules Users List <rules-users(a)lists.jboss.org>
> > > Sent: Tuesday, January 9, 2007 7:26:35 AM
> > > Subject: Re: [rules-users] About String..."==" same as
".equals"?
> > >
> > >
> > > Joel,
> > >
> > > This is the correct syntax and it works (at least we didn't get a
> > > report for it not working yet):
> > >
> > > Object(variable == Constants.value)
> > >
> > > Can you please elaborate about the problem you are having in
order
> > > for us to help solving it? If it is a bug we need to fix.
> > >
> > > Thank you,
> > > Edson
> > >
> > > Joel G. Rivera-González wrote:
> > >
> > > > most (if not all) of my rules will have conditions like this:
> > > > Object(variable == Constants.value)
> > > > this is not working...
> > > > BUT if i change the Constants.value to corresponding value
from the
> > > > constants class it will work...
> > > > is there any other way other than this Object(a:variable->
> > > > (a.equals(Constants.value)) to do it?
> > > >
> > > >
> > > >
> > > >
> > > > Joel G. Rivera-Gonzalez
> > > > PRT
> > > >
> > > > "The first 90% of a project takes 90% of the time, the last 10%
> takes
> > > > the other 90% of the time" - Murphy's Law
> > > >
> > >
> >
>
>------------------------------------------------------------------------
> > > >
> > > >_______________________________________________
> > > >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 <
http://www.jboss.com>
> <
http://www.jboss.com> <
http://www.jboss.com>
> > <
http://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
<
http://www.jboss.com> <
http://www.jboss.com>
> <
http://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 <
http://www.jboss.com>
<
http://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 <
http://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 @
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org