[rules-users] How do I reference newly asserted facts?

Scott Reed sreed at spamcop.net
Mon Dec 10 23:50:45 EST 2007


Inserting a fact into Drools' working memory makes it available to the drools engine. I don't think 
working memory is designed to store your data for your use after the rule engine completes. I think 
you should employ a parallel mechanism to record your new data so you can access it outside of the 
rule system. Perhaps you can declare a global object that will provide a method for storing new 
objects created during rule execution.
   Scott

kissro at lidp.com's message received 12/10/2007 4:10 PM:
> I understand that part but FNCM_COMMENT is a separate object/fact.
> Here's what I'm trying to do:
> 
> I have two objects(facts)
>   FNAC_CLIENT_CONTROL
>   FNCM_COMMENT
> 
> I insert(FNAC_CLIENT_CONTROL)
>   fireAllRules()
> 
> My rule says when FNAC_CLIENT_CONTROL.FNAC_BIRTH_PLACE == "IL"
> then insert a new fact that was not previously inserted - FNCM_COMMENT.
> I now have 2 facts in WorkingMemory if I understand everything correctly.
> 
> When I return to my java program, after the fireAllRules() statement,
> I'm hoping to have available to me both the FNAC_CLIENT_CONTROL fact and
> the FNCM_COMMENT fact.  Is that true?  Will I have both available?
> If so, how do I access the FNCM_COMMENT fact if it's not in the LHS and
> I don't have a variable assigned to it?
> 
> 
>> On Mon, Dec 10, 2007 at 11:01:41PM +0530, Darko IVANCAN wrote:
>>   
>>> Hi,
>>>
>>> In the BRMS you can assign a variable to your fact in the LHS.
>>> This would then result in:
>>> when
>>>     a : FNAC_CLIENT_CONTROL( FNAC_BIRTH_PLACE == "IL" )
>>> then
>>>    a.set....
>>>
>>> good luck,
>>> Darko Ivancan
>>>
>>> On 10/12/2007 20:38, kissro at lidp.com wrote:
>>>     
>>>> Hello,
>>>>
>>>> I am creating all my rules using the BRMS guided rule editor gui.
>>>> In the rule editor, I have a rule that looks like this:
>>>>
>>>> WHEN
>>>>       FNAC_CLIENT_CONTROL
>>>>   FNAC_BIRTH_PLACE is equal to "IL"
>>>>
>>>> THEN
>>>>   Assert FNCM_COMMENT FNCM_VARIABLE_DATA "This client lives in Illinois"
>>>>
>>>> When I click the 'View Source' button I see this:
>>>>
>>>> rule "Rule500"
>>>>    dialect "mvel"
>>>>    when
>>>>          FNAC_CLIENT_CONTROL( FNAC_BIRTH_PLACE == "IL" )
>>>>    then
>>>>          FNCM_COMMENT fact0 = new FNCM_COMMENT();
>>>>          fact0.setFNCM_VARIABLE_DATA( "This client lives in Illinois");
>>>>          insert( fact0 );
>>>> end
>>>>
>>>> After I return from "fireAllRules", how do I reference the newly
>>>> asserted fact in my Java code?  Do I reference "fact0" or can I use the
>>>> object's "real" name - FNCM_COMMENT.FNCM_VARIABLE_DATA?
>>>>
>>>> "fact0" is just a generated name created by BRMS when it generates the
>>>> rule based on what I type in the gui, right?  I'm assuming if I insert
>>>> more facts, they would be called fact1, fact2, etc.  If I want to
>>>> reference these facts, do I have to keep track of how many I've inserted
>>>> then reference the appropriate fact number?  I'm not sure how to
>>>> reference these generated fact names after returning from the rule
>>>> engine.  Could someone help me?
>>>>
>>>> Thanks,
>>>> Rod  
>>>> _______________________________________________
>>>> 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
> 
> 




More information about the rules-users mailing list