1. 創建processDefinition.xml流程定義文件,如下:
[code]
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="webPay">
<swimlane name="PooledActors">
<assignment class="com.sky.plugin.jbpm.ActorHandel"></assignment>
</swimlane>
<start-state name="網上支付審批流程">
<transition name="開始" to="財務人員錄入"></transition>
</start-state>
<task-node name="財務人員錄入">
<task name="財務人員錄入申報數據" swimlane="PooledActors"></task>
<transition name="主管會計複覈" to="主管會計複覈"></transition>
</task-node>
<task-node name="主管會計複覈" signal="last-wait" create-tasks="false">
<task name="主管會計複覈" swimlane="PooledActors"></task>
<event type="node-enter">
<action name="createInstance"
class="com.sky.plugin.jbpm.CreateTaskInstance">
</action>
</event>
<transition name="複覈通過" to="領導審批"></transition>
<transition name="複覈不通過" to="異常結束"></transition>
</task-node>
<task-node name="領導審批">
<task name="領導審批" swimlane="PooledActors"></task>
<transition name="同意" to="結束"></transition>
<transition name="不同意" to="異常結束"></transition>
</task-node>
<end-state name="結束"></end-state>
<end-state name="異常結束"></end-state>
</process-definition>
[/code]
task-node"主管會計複覈"則是我們需要進行會籤的節點。在這個節點我們設置了幾個重要的屬性:
[list] 1) signal="last-wait",這個屬性決定了該節點將在完成該節點內的所有Task的TaskInstance以後纔會進入下一個節點。)[/list]
[list] 2) create-tasks="false",這個屬性決定了在進入該節點的時候,不會自動爲該節點的任何Task創建任何的TaskInstance。因爲我們需要根據會籤的人員來自己創建TaskInstance。[/list]
[list] 3) action,action的設定是爲了,在Action中根據實際的情況來創建TaskInstance[/list]
2. 編寫Action代碼
[code]
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 CreateTaskInstance implements ActionHandler {
private static final long serialVersionUID = 1L;
public void execute(ExecutionContext executionContext) throws Exception {
Token token = executionContext.getToken();
TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();
TaskNode taskNode = (TaskNode) executionContext.getNode();
Task task= taskNode.getTask("主管會計複覈");
tmi.createTaskInstance(task, token)
.setPooledActors(new String[]{"1000"});
tmi.createTaskInstance(task, token)
.setPooledActors(new String[]{"1001"});
}
}
[/code]
當然,在實際情況中.setPooledActors(new String[]{"100"})中設置的actor應該是動態指定的,這裏爲了簡單方便就直接寫入的固定值。
3.部署運行,OK!
注意:如果在給TaskInstance指定Actor的時候是使用.setActor()方法的話,那麼在獲取用戶任務列表的時候用.findTaskInstances();如果是用.setPooledActors(),則需要使用.findPolledTaskInstance()方法。[list][/list]