[rules-users] Rule flow skip ruleSet node.

Kris Verlaenen kris.verlaenen at cs.kuleuven.be
Sun Nov 1 18:01:06 EST 2009


By using no-loop, you are preventing the activation to increment the age
of the person to be added to the agenda.  So once the process reaches
this ruleflow-group again in the next iteration of the loop, there will
be no activation for incrementing the user age anymore.

To fix this, you could:
 - use an action node to increment the user age
 - call update(person) after the ruleflow-group node, this will allow
the changes to the person only be taken into effect after the
ruleflow-group was deactivated, allowing reactivation of the rule for
the next loop

Kris

Quoting liuzhikun <liuzhikun at viewhigh.com.cn>:

> I want increase user age by rule.But ruleSet node trigge only one
> time.
> When execute output:
>     new Usesr
> ageA: 0
> inc
> ageB: 1
> 
> ageA: 1
> ageB: 1
> ageA: 1
> ageB: 1 
> ....
> .....
> rule:***************************
>     package t2.state
> 
> import t2.state.User;
> import java.util.Map;
> import java.util.HashMap;
> 
> function Map createMap(String key,Object obj){
>  Map m=new HashMap();
>  m.put(key,obj);
>  return m;
> }
> 
> rule "boot"
>  dialect "mvel"
>  when
>   u : User(age==0)
>  then
>   System.out.println(" new Usesr");
>  
> kcontext.getKnowledgeRuntime().startProcess("p1rf",createMap("user",u));
> end
> 
> rule "inc user age"
>  dialect "mvel"
>  ruleflow-group "inc age"
>  no-loop true
>  when
>   u : User();
>  then
>   System.out.println("inc");
>   modify(u){age+=1};
> end
> 
> 
> rule flow:************************************
>     <?xml version="1.0" encoding="UTF-8"?> 
> <process xmlns="http://drools.org/drools-5.0/process"
>          xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
>          xs:schemaLocation="http://drools.org/drools-5.0/process
> drools-processes-5.0.xsd"
>          type="RuleFlow" name="p1 rule flow" id="p1rf"
> package-name="t2.state" >
>  <header>
>   <imports>
>    <import name="t2.state.User"/>
>   </imports>
>   <variables>
>     <variable name="user" >
>       <type
> name="org.drools.process.core.datatype.impl.type.ObjectDataType"
> className="User" />
>     </variable>
>   </variables>
>  </header>
>  
>  <nodes>
>   <start id="1" name="Start"/>
>   <join id="2" name="Restart" type="2"/>
>   <actionNode id="3" name="changeAge">
>    <action type="expression" dialect="mvel">System.out.println("ageA:
> "+user.age);</action>
>   </actionNode>
>   <ruleSet id="4" name="user rule" ruleFlowGroup="inc age"/>
>   <actionNode id="5" name="changeAge">
>    <action type="expression" dialect="mvel">System.out.println("ageB:
> "+user.age);System.in.read();</action>
>   </actionNode>
>   <split id="6" name="decide" type="2">
>    <constraints>
>     <constraint toNodeId="2" toType="DROOLS_DEFAULT" name="go to
> rest" type="rule" priority="1" dialect="mvel">User(age &lt;
> 6)</constraint>
>     <constraint toNodeId="100" toType="DROOLS_DEFAULT" name="go to
> end" type="rule" priority="2" dialect="mvel">eval(true)</constraint>
>    </constraints>
>   </split>
>   <end id="100" name="End"/>
>  </nodes>
>  
>  <connections>
>   <connection from="1" to="2"/>
>   <connection from="2" to="3"/>
>   <connection from="3" to="4"/>
>   <connection from="4" to="5"/>
>   <connection from="5" to="6"/>
>   <connection from="6" to="2"/>
>   <connection from="6" to="100"/>
>  </connections>
>  
> </process>
> 
> 
> 
> 
> liuzhikun
> 2009-10-30
> 




Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm



More information about the rules-users mailing list