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

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

    }
    

 

 



你可能感兴趣的:(游戏,xml,jbpm,F#,J#)