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"表示只要有一個人參與者
審批了之後,該任務結束了