Another "simple" way will be to declare global variable like: global List EBandRating;
and in then clause you can do: EBandRating.add(r); You don't have to make queries, no-loops, lock-on-active or other tricky stuff. Pavel 2010/3/29 Esteban Aliverti <[email protected]>: > Hi, > What Wolfgang is trying to say about "inform" the Drools engine about the > update is that you need to use a modify statement in your RHS. Your rule > should look like this: > rule "for E band" > lock-on-active true > when > r : Rating( rate == 1) > then > modify(r){ > setBand("EBand"); > } > System.out.println( "in E band" ); > end > This is the way to inform Drools that your Fact is modified. But be careful, > because when you modify a Fact, all the rules are evaluated again because > the modification could activate another Rule. This will end in an infinite > loop (just like Wolfgang mentioned), the "for E band" rule will be executed > for ever. That's why you need to add the no-loop attribute (if the only rule > that modifies a Rating is "for E band") or lock-on-active (if more than one > rule could modify a Rating). > On Mon, Mar 29, 2010 at 7:20 AM, Wolfgang Laun <[email protected]> > wrote: >> >> You have to inform the Drools engine about the update done with >> r.setBand("..."), or else the query condition is still seeing the fact >> state at insert time. >> >> You may have to add the no-loop option to your rules. >> >> (Also, comments and actions disagree, e.g. "D Band" vs. "EBand") >> >> -W >> >> On 3/29/10, Nilima R <[email protected]> wrote: >> > Dear All, >> > >> > I have created simple rule file and created model in that rule file only >> > >> > package com.sample >> > >> > import java.lang.String; >> > >> > declare Rating >> > rate : int >> > band : String >> > name : String >> > end >> > >> > query "employee with band E" >> > ratg : Rating(band == "EBand") >> > end >> > >> > rule "for E band" >> > >> > when >> > r : Rating( rate == 1) >> > then >> > r.setBand("EBand"); >> > System.out.println( "in E band" ); >> > >> > end >> > >> > rule "for D band" >> > >> > when >> > r : Rating( rate == 2) >> > then >> > r.setBand("EBand"); >> > System.out.println( "in E band" ); >> > >> > end >> > >> > rule "for C band" >> > >> > when >> > r : Rating( rate == 3) >> > then >> > r.setBand("EBand"); >> > System.out.println( "in E band" ); >> > >> > end >> > >> > rule "for B band" >> > >> > when >> > r : Rating( rate == 4) >> > then >> > r.setBand("EBand"); >> > System.out.println( "in E band" ); >> > >> > end >> > >> > >> > At the end I want to know how many employees have got E band and so have >> > written query for it in the rule file .and obtained the query results as >> > below >> > >> > >> > FactType bandType = kbase.getFactType( "com.source", "Rating" ); >> > QueryResults results = ksession.getQueryResults( >> > "employee with band E"); >> > System.out.println( "we have " + results.size() >> > + >> > "employee with band E" ); >> > System.out.println( "employee with band E:" ); >> > >> > for (Iterator i = results.iterator(); >> > i.hasNext();) { >> > QueryResultsRow row = >> > (QueryResultsRow)i.next(); >> > Object ratg = row.get("rating"); >> > String name = (String) bandType.get( ratg, >> > "name" ); >> > System.out.println(name); >> > } >> > >> > >> > But am getting the result of query as 0 records. >> > >> > >> > i am inserting objects one by one ( this for testing just purpose ) to >> > learn how query works. >> > >> > >> > Can someone plz point out what is wrong.Its Urgent ................ >> > >> > >> > Thanks in advance. >> > Nilu >> > =====-----=====-----===== >> > Notice: The information contained in this e-mail >> > message and/or attachments to it may contain >> > confidential or privileged information. If you are >> > not the intended recipient, any dissemination, use, >> > review, distribution, printing or copying of the >> > information contained in this e-mail message >> > and/or attachments to it are strictly prohibited. If >> > you have received this communication in error, >> > please notify us by reply e-mail or telephone and >> > immediately and permanently delete the message >> > and any attachments. Thank you >> > >> > >> > >> _______________________________________________ >> rules-users mailing list >> [email protected] >> https://lists.jboss.org/mailman/listinfo/rules-users > > > > -- > XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX > > Esteban Aliverti > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users > > _______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
