JBPM公文流轉之會籤

 

JBPM3.2實現會籤,有兩種方法:

實現方法一:利用pooled-actors,只創建一個任務實例,卻指定多個參與者(pooled-actors),
   參與者使用findPooledTaskInstances來查找任務實例,其中任意參與者審批通過
   並提交之後,其它人將看不到這個任務實例

如:
<task-node name="領導會籤">        
   <task name="領導會籤">   
    <assignment pooled-actors="wxj,jx"/>        
   </task>
   <transition name="結束流程" to="完成"></transition>
   </task-node>

實現方法二:用一個task-node,並將其signal屬性設置爲first(表示只要有一個用戶提交了,此任務就結束),
在此節點中創建多個任務,此時多個任務就有多個參與者,
只有一個參與者提交,就應該把其他參與者的任務提交(定義一個node-leave的處理類)

<task-node name="領導會籤" signal="first">     
<task name="wxj審批">     
   <assignment actor-id="wxj"/>     
</task>     
<task name="jx審批">     
   <assignment actor-id="jx"/>     
</task>    
<event type="node-leave">     
   <action class="com.XXX.FinishTaskHandler"/>     
</event>
<transition name="結束流程" to="完成"></transition>
</task-node>

FinishTaskHandler代碼:

public class FinishTaskHandler implements ActionHandler {

public void execute(ExecutionContext executionContext) throws Exception {
  
   //找到當前節點尚未結束的任務實例
   Collection tasks = executionContext.getTaskMgmtInstance().getUnfinishedTasks(executionContext.getToken());
   for (Iterator iterator = tasks.iterator(); iterator.hasNext();) {
    TaskInstance taskInstance = (TaskInstance) iterator.next();
    taskInstance.end();
   }
}

}

其中<event type="node-leave">     
   <action class="com.XXX.FinishTaskHandler"/>     
</event>

的功能,也可以用tasknode的屬性實現:即

end-tasks="yes",其與signal="first"表示只要有一個人參與者
審批了之後,該任務結束了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章