今天中午,一个msn的朋友问起这个问题, 就在这里说明一下吧。
我们都玩过击鼓传花的游戏,花在众人的手里不停的传递,鼓停了,花在谁手里就代表了这个击鼓传花的流程进行到哪个环节了。对于jbpm,roottoken就是这个花,我们可以通过Token token = processInstance.getRootToken();token.getNode()得到某一个流程实例所处的环节。
但是有一个问题,对于某些流程会生成子token,比如fork节点,如果子token没有全部完成,那么roottoken就始终处于fork节点,如果我们需要得到fork下流程的执行情况只看roottoken就不行了,就需要处理这些子token,当然如果有嵌套的fork那就要去遍历了。下面给出没有嵌套的处理代码:
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="" name="yytest">
<start-state name="s">
<transition name="s" to="bf"/>
</start-state>
<state name="bf">
<transition to="f"/>
</state>
<fork name="f">
<transition name="ns1" to="s1"/>
<transition name="ns2" to="s2"/>
<transition name="ns3" to="s3"/>
</fork>
<state name="s1">
<transition to="j"/>
</state>
<state name="s2">
<transition to="j"/>
</state>
<state name="s3">
<transition to="j"/>
</state>
<join name="j">
<transition to="af"/>
</join>
<state name="af">
<transition to="e"/>
</state>
<end-state name="e"/>
</process-definition>

private static void run()...{
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try ...{
long processInstanceId =1;
processInstance = jbpmContext.loadProcessInstance(processInstanceId);
Token token = processInstance.getRootToken();
token.signal();
token.signal();
// token.getChild("ns1").signal();
token.getChild("ns3").signal();
Iterator i=token.getActiveChildren().values().iterator();
while(i.hasNext())...{
Token childToken=(Token)i.next();
if(childToken.isAbleToReactivateParent())...{
System.out.println("还需要处理的子token为"+childToken.getNode());
}
}
}finally ...{
jbpmContext.close();
}
}
JBPM流程子Token处理
本文介绍JBPM中如何处理fork节点产生的子Token,并提供了一个简单的示例代码,展示了如何获取并判断子Token的状态。
647

被折叠的 条评论
为什么被折叠?



