jpbm如何获得流程所处的环节。

JBPM流程子Token处理
本文介绍JBPM中如何处理fork节点产生的子Token,并提供了一个简单的示例代码,展示了如何获取并判断子Token的状态。

今天中午,一个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();
            }

    }
    

 

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值