Edson, Unfortunately, I don't know all containers at design time. But your second advise works very well.
Thanks, Torsten. -----Original Message----- From: Edson Tirelli [mailto:[EMAIL PROTECTED] Sent: Dienstag, 14. November 2006 17:18 To: [email protected] Subject: Re: [drools-user] Access WorkingMemory from within rules or functions Torsten, That was the general idea. So if you have 2 containers, declare it 2 times: rule "Item handling" When $item : Item(uniqueId) $container1: Container( values contains $item ) $container2: Container( values contains $item ) Then if(mustBeDeleted($item)) { retract($item); $container1.remove( $item ); $container2.remove( $item ); } else { doSomethingElse(); modify($item); } End You may or may not call modify($containerX) also, depending on your rules and what you are trying to achieve. []s Edson Geise, Thorsten (ext) wrote: >This approach works very well for the first container. But, because the >item-fact is retracted from the working memory, the rule will never >fired for the second container. > >Torsten. > >-----Original Message----- >From: Edson Tirelli [mailto:[EMAIL PROTECTED] >Sent: Dienstag, 14. November 2006 17:01 >To: [email protected] >Subject: Re: [drools-user] Access WorkingMemory from within rules or >functions > > Torsten, > > If the container is asserted in the working memory, just add it to >the rule: > >rule "Item handling" >When > $item : Item(uniqueId) > $container: Container( values contains $item ) Then > if(mustBeDeleted($item)) { > retract($item); > $container.remove( $item ); > } else { > doSomethingElse(); > modify($item); > } >End > > > Otherwise, you can set the container as a global: > >global my.package.Container container; > >rule "Item handling" >When > $item : Item(uniqueId) >Then > if(mustBeDeleted($item)) { > retract($item); > container.remove( $item ); > } else { > doSomethingElse(); > modify($item); > } >End > > You can access workingMemory through a special variable named >"drools", but for your case, I think best approach is one of the above. > > []s > Edson > > >Geise, Thorsten (ext) wrote: > > > >>Is it possible to access the working memory from within a rule or >>function? >> >>Example: I have two container objects that refer to another object >>(item). Both container have this item in a list. >>A rules decides to delete the item and therefore retracts it from the >>working memory. But I need to delete the item from the two containers >>as well. How to do? >> >>rule "Item handling" >>When >> $item : Item(uniqueId) >>Then >> if(mustBeDeleted($item)) { >> retract($item); >> } else { >> doSomethingElse(); >> modify($item); >> } >>End >> >>Thanks, >>Torsten. >> >>--------------------------------------------------------------------- >>To unsubscribe from this list please visit: >> >> http://xircles.codehaus.org/manage_email >> >> >> >> >> >> > > >-- > --- > 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 > > IT executives: Red Hat still #1 for value > http://www.redhat.com/promo/vendor/ > > >--------------------------------------------------------------------- >To unsubscribe from this list please visit: > > http://xircles.codehaus.org/manage_email > > >--------------------------------------------------------------------- >To unsubscribe from this list please visit: > > http://xircles.codehaus.org/manage_email > > > > -- --- 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 IT executives: Red Hat still #1 for value http://www.redhat.com/promo/vendor/ --------------------------------------------------------------------- To unsubscribe from this list please visit: http://xircles.codehaus.org/manage_email --------------------------------------------------------------------- To unsubscribe from this list please visit: http://xircles.codehaus.org/manage_email
