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"表示只要有一个人参与者
审批了之后,该任务结束了