会签描述:多个人对同一环节进行审核,只要有一个不通过,则打回给提交人。
设计原理:在任务节点,根据会签人员个数生成任务实例,
流程图:
Processdefinition.xml
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="" name="countersign">
<start-state name="start-state">
<transition to="user"></transition>
</start-state>
<task-node name="countersign" create-tasks="false" signal="first-wait">
<task name="eachcounter"></task>
<event type="node-enter">
<action class="com.action.CountersignHandler"></action>
</event>
<transition to="join1" name="N">
<action class="com.action.CounterDecisionHandler"></action>
</transition>
<transition to="join1" name="Y"></transition>
</task-node>
<task-node name="user">
<task></task>
<transition to="countersign" name="submit"></transition>
</task-node>
<join name="join1">
<transition to="decision"></transition>
</join>
<decision name="decision" expression="#{decision}">
<transition to="end" name="Y"></transition>
<transition to="user" name="N"></transition>
</decision>
<end-state name="end"></end-state>
</process-definition>
类CountersignHandler:
package com.action;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.graph.exe.Token;
import org.jbpm.graph.node.TaskNode;
import org.jbpm.taskmgmt.def.Task;
import org.jbpm.taskmgmt.exe.TaskMgmtInstance;
public class CountersignHandler implements ActionHandler{
/**
*为每一位用户生成任务实例
*/
@Override
public void execute(ExecutionContext executionContext) throws Exception {
// TODO Auto-generated method stub
//phase 1: 生成用户,可以从数据库读,也可以从流程变量中读。
//String []actors={"a","b","c"};
Collection actors=new ArrayList();
actors.add("a");
actors.add("b");
actors.add("c");
//设定流程变量,
executionContext.getContextInstance().setVariable("decision", "Y");
//phase 2:根据用户的个数,创建子token。
Token token=executionContext.getToken();
List forkedTokens = new ArrayList();//子token
Iterator actorIter = actors.iterator();
while(actorIter.hasNext()){