[rules-users] Re: nested accessors with Sets
Edson Tirelli
tirelli at post.com
Thu Aug 2 09:35:44 EDT 2007
Arjun,
I guess your questions are about 2 different subjects.
1. The non-existence of an object is handled by the NOT CE. So, if you want
to say: there is no Bus asserted into working memory, you simply say:
not Bus()
If you want to say: there is no red bus asserted into working memory, you
simply say:
not Bus( color == "red" )
In the above case, even if there is a blue bus asserted, but not a red one,
the CE will evaluate to true.
If you want to say: there is a MyComposedObject whose active attribute is
false or none MyComposedObject at all, you could say something like:
when
MyComposedObject(active == false) or
not MyComposedObject()
Then
//Action
End
http://labs.jboss.com/file-access/default/members/drools/freezone/docs/4.0.0.13773GA/html/ch06s05.html#d0e3622
2. The use of contains and memberOf constraints. They both work on
collections and arrays. The "in" operator only works on explicit lists of
values:
Composer( this contains "abc" ) // valid
Composer( this contains $anotherObject ) // valid
Component( this memberOf $composer.components ) // valid
Cheese( type in ( "stilton", $muzzarela, Cheese.PROVOLONE ) ) // valid
The negation of all of these operators works the same.
http://labs.jboss.com/file-access/default/members/drools/freezone/docs/4.0.0.13773GA/html/ch06s05.html#d0e2992
Please, read the docs and suggest improvements for everything that is
not clear there.
Thanks,
Edson
2007/8/2, Arjun Dhar <dhar_ar at yahoo.com>:
>
> <mark.mcnally <at> comcast.net> writes:
>
> >
> > My rule now appears to be working after switching from the "excludes"
> operator to the newer "not contains".
> >
> > This works:
> > $ca:CandidateAssociation(nurseDetails.stateLicensures not contains
> patientDetails.state )
> >
> > This does not:
> > $ca:CandidateAssociation(nurseDetails.stateLicensures excludes
> patientDetails.state )
> >
> > Mark
>
>
> I was just about to post a question and I think this may be the answer to
> my
> problem as well. So let me confirm.
>
> Question) I hvae a rule
>
> When
> obj: MyComposedObject(active == false)
> Then
> //Action
> End
>
> .. the problem is, if the above object was never asserted; I still want it
> to
> execute. Luckily MyComposedObject is composend inside another object, so
> can i
> use the technique above as>
>
> When
> obj: Composer( this not contains MyComposedObject)
> End
>
> or even obj: Composer( this not in MyComposedObject)
>
>
> ... My Composer simply composes the object and does not contain it in a
> list.
>
> Q1) So would either or both "not contains" or "not in" work?
> Q2) Or is "not contains" only for List or Collection type? what about
> HashMaps
> then?
> Q3) Stretching my actual use case to its limits; if I want to write
> conditions
> over objects that were never asserted into the working memory (need to OR
> them
> with existing) ones, how do I do that? I understand technically it does
> not
> make sense to want conditions over objects one never asserted; ... but
> please
> think a moment. A person asserts Objects and due to some external factor
> some
> objects do not get asserted. Since he is aware of it, can he trap that
> conidtion in the rule itself?
> Example: Assertions --> (Object Type) A1, A2, A4
>
> RULES: I never got Object type A3 so Do Notify Admin <-- How to write such
> a
> rule?
>
> I hope I'm able to express my use case.
>
>
> _______________________________________________
> 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 3529-6000
Mobile: +55 11 9287-5646
JBoss, a division of Red Hat @ www.jboss.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20070802/cbe9836b/attachment.html
More information about the rules-users
mailing list