[rules-users] Help on using Drools with embedded objects

David Sinclair dsinclair at chariotsolutions.com
Wed Mar 4 10:01:02 EST 2009


use word boundaries, i.e. \b to denote "words"

\bassistant\b

On Wed, Mar 4, 2009 at 5:56 AM, D1vy@@Ind1@ <divya.rajendranath at gmail.com>wrote:

>
> Thanks every one, I found a solution to this. I created an utility class
> used
> it in setGlobal of the drools  session. Thus, I could call even non static
> methods from the utility class.
>
> Could any one help me with regular expressions in Drools.
>
> I want to check the existance of any one of the keywords 'assistant',
> 'temp', 'intern' in a position field of an object. To be more clear I
> wanted
> to get the correct match if these keywords exist as a subword of its own
> and
> not as a part of a word. For eg.,  intern exists in internship and Systems
> :
> Intern, here I should get a successful match only for the second one. How
> can  I achieve that ?
>
> My sampl drl file looks like:
>
> rule "Form the "
>        salience 20
>        no-loop true
>        when
>                $s:Form(details.position matches
> "^.*[_-:/](assistant|intern|temp)$");
>        then
>
>
> $s.setRecipients((ArrayList)utilities.toArrayList((String)myRecipientsMap.get("Recipients")));
>        update($s);
>        end
>
> If would be very helpful if anyone could help me solve this.
>
> thanks
> -D
>
>
>
>
>
> D1vy@@Ind1@ wrote:
> >
> > I have still not found a solution to the problem.
> >
> > The problem is that I have a non static function in my service class and
> i
> > have to call thhat from my drools rule file.
> >
> > The function basically accepts a mail id and if a mailing list returns an
> > arraylist of the individual mail ids in the mailing list.
> >
> > my drl file looks like this:
> >
> > ========================================================
> > package com.test.ams.rule
> >
> > dialect "java"
> >
> > import java.util.ArrayList;
> > import org.json.JSONArray;
> > import java.net.HttpURLConnection;
> > import java.net.URL;
> > import java.io.InputStream;
> > import java.io.InputStreamReader;
> > import java.io.BufferedReader;
> >
> > import com.test.domobjects.StaffingForm;
> > import com.test.domobjects.StaffingFormOfferDetails;
> > import com.test.domobjects.OfferResponseType;
> > import function
> > com.test.serviceImpl.StaffingFormMailingServiceImpl.expandTheMailingList;
> >
> > global java.util.HashMap myOSFRecipientsMap;
> >
> > rule "Part A"
> >       salience 20
> >       no-loop true
> >       when
> >               $s:StaffingForm(staffingFormOfferDetails.offerValue== true
> &&
> >
> staffingFormOfferDetails.offerResponseType.offerResponseTypeName ==
> > "Accepted")
> >               then
> >
> >
> $s.setPartARecipients((ArrayList<String>)expandTheMailingList((String)myOSFRecipientsMap.get("PART_A_EXEC_COMMITTEE")));
> >
> >
> $s.setPartARecipients((String)myOSFRecipientsMap.get("PART_A_CONFIDENTIAL"));
> >
> $s.setPartARecipients((String)myOSFRecipientsMap.get("PART_A_PAYROLL"));
> >               update($s);
> >       end
> > ========================================================
> >
> >
> > This gives me an exception -- java.lang.RuntimeException: Unable to
> > compile "the.drl".
> >
> > Please let me know what is the problem here.
> >
> >
> > Thanks
> > -D
> >
> >
> >
> > D1vy@@Ind1@ wrote:
> >>
> >> A couple of more questions,
> >>
> >> I am calling my rules engine from a service and into the session i am
> >> inserting the business object.
> >>
> >> In my service class, I have a few helper functions, which I need to call
> >> from my drl file.
> >>
> >> How can I do that ?
> >>
> >> Thanks
> >> -D
> >>
> >>
> >>
> >> Corneil du Plessis wrote:
> >>>
> >>> You should initialise your globals and then pass them into the session.
> >>> Your rule file will have:
> >>>
> >>> global java.lang.String recipients
> >>> global java.lang.String to
> >>> global java.lang.String cc
> >>>
> >>>
> >>> On Mon, 2009-02-23 at 06:23 -0800, D1vy@@Ind1@ wrote:
> >>>
> >>>> Thanks for your help , Sudhir,
> >>>>
> >>>> I used
> >>>>
> >>>> rule
> >>>> when $a:A(b.z.s=="test");
> >>>> then
> >>>> end
> >>>>
> >>>> And that solved my problem.
> >>>>
> >>>> But I would like to know one more information about global variables.
> >>>>
> >>>> package...
> >>>> dialect java
> >>>> import ..,
> >>>>
> >>>> global java.lang.String recipients="divya at gmail.com"
> >>>> global java.lang.String to="xyz at yahoo.com"
> >>>> global java.lang.String cc="abc at gmail.com"
> >>>>
> >>>> rule
> >>>> when when $a:A(b.z.s=="divya");
> >>>> then
> >>>> $a.setRecipients(recipients);
> >>>> $a.setTo(to);
> >>>> $a.setCC(cc);
> >>>> update($a)
> >>>> end
> >>>>
> >>>> Is this feasible with Drools. I get
> >>>>
> >>>> unable to comile myfile.drl file
> >>>> [9,40]: unknown:9:40 mismatched token: [@49,201:201='=',<71>,9:40];
> >>>> E
> >>>>
> >>>> exception. Could you please help me with this too.
> >>>>
> >>>>
> >>>> Thanks
> >>>> -D
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> Sudhir M-2 wrote:
> >>>> >
> >>>> > Hi D,
> >>>> > I don't know which version of drools are you using. If u are using
> >>>> drools
> >>>> > 4
> >>>> > or higher you can use 'from'  to write rules on nested objects. All
> u
> >>>> need
> >>>> > to do is insert the root pbject in the working memory
> >>>> >
> >>>> > Regards,
> >>>> > sudhir.
> >>>> >
> >>>> > On Mon, Feb 23, 2009 at 2:56 PM, Divya Rajendranath <
> >>>> > divya.rajendranath at gmail.com> wrote:
> >>>> >
> >>>> >> Hi,
> >>>> >>
> >>>> >> I am planning to use Drools - JBoss Rules Engine. My requirement is
> >>>> to
> >>>> >> disburse mails from my application to different groups based on
> >>>> various
> >>>> >> criteria. I want to use Drools here.
> >>>> >>
> >>>> >> My object structure is as follows:
> >>>> >>
> >>>> >> class A{
> >>>> >>
> >>>> >> String B = "";
> >>>> >>
> >>>> >> B b;
> >>>> >>
> >>>> >> C c;
> >>>> >> }
> >>>> >>
> >>>> >> Hence Obj A has embedded objects within it, and obj B and C further
> >>>> has
> >>>> >> embedded objects.
> >>>> >>
> >>>> >> class B {
> >>>> >>
> >>>> >> String X;
> >>>> >>
> >>>> >> Z z;
> >>>> >>
> >>>> >> }
> >>>> >>
> >>>> >> class Z{
> >>>> >>
> >>>> >> String t;
> >>>> >>
> >>>> >> String s;
> >>>> >>
> >>>> >> }
> >>>> >>
> >>>> >> The decision on sending the mails based on the fields in embedded
> >>>> objects
> >>>> >> of A. I pass instance of A to Drools
> >>>> >>
> >>>> >> Format of drl file:
> >>>> >>
> >>>> >> package...;
> >>>> >>
> >>>> >> import ..;
> >>>> >>
> >>>> >> rule "Test"
> >>>> >>
> >>>> >> when $a:A(B(Z(s == "testvalue")))
> >>>> >>
> >>>> >> then
> >>>> >>
> >>>> >> $a.setSomething();
> >>>> >>
> >>>> >> update($a);
> >>>> >>
> >>>> >> end
> >>>> >>
> >>>> >> I wanted to know if this (accessing fields in embedded/child
> object)
> >>>> is
> >>>> >> feasible with Drools.
> >>>> >>
> >>>> >> I get an error saying "UNable to compile myfile.drl when i try to
> fo
> >>>> >> this.
> >>>> >>
> >>>> >> Could some one look into this issue and let me know the reason for
> >>>> this ?
> >>>> >>
> >>>> >>
> >>>> >>
> >>>> >> Thanks
> >>>> >>
> >>>> >> -D
> >>>> >>
> >>>> >> _______________________________________________
> >>>> >> rules-users mailing list
> >>>> >> rules-users at lists.jboss.org
> >>>> >> https://lists.jboss.org/mailman/listinfo/rules-users
> >>>> >>
> >>>> >>
> >>>> >
> >>>> > _______________________________________________
> >>>> > rules-users mailing list
> >>>> > rules-users at lists.jboss.org
> >>>> > https://lists.jboss.org/mailman/listinfo/rules-users
> >>>> >
> >>>> >
> >>>>
> >>>
> >>> _______________________________________________
> >>> rules-users mailing list
> >>> rules-users at lists.jboss.org
> >>> https://lists.jboss.org/mailman/listinfo/rules-users
> >>>
> >>>
> >>
> >>
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/Help-on-using-Drools-with-embedded-objects-tp22158087p22327495.html
> Sent from the drools - user mailing list archive at Nabble.com.
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090304/271446cd/attachment.html 


More information about the rules-users mailing list