作者:tomkoo
以下例子中 采用了jbpm console 的几个实例用户
项目提交人 : ernie .
主管审批 : bert
会签 : ernie , bert , grover
老板审批 : grover
正常流程: 项目金额 >= 500W RMB
提交项目 --> 主管审批 --> 会签 --> 老板审批 --> 审批通过(结束)
正常流程: 项目金额 < 500W RMB
提交项目 --> 主管审批 --> 会签 --> 审批通过(结束)
其中主管审批, 会签, 老板审批 , 不通过, 全部退回给项目提交人修改.
会签中: 所有人全通过, 则通过. 任何一人不通过, 停止其他会签任务.退回给提交人.
流程定义如下:
name="tc_prj_approval">
create-tasks="false">
class="net.chenj.jbpm.sample.TaskEndCountersign">
class="net.chenj.jbpm.sample.CreateTaskInstanceCountersign">
#{amount>= 500}
会签swimlane class
packagenet.chenj.jbpm.sample;
importorg.jbpm.graph.exe.*;
importorg.jbpm.taskmgmt.def.*;
importorg.jbpm.taskmgmt.exe.Assignable;
publicclassCosingerAssiHandlerimplementsAssignmentHandler {
privatestaticfinallongserialVersionUID = 1L;
publicvoidassign(Assignable assignable, ExecutionContext executionContext) {
// 从数据库或者ldap 读取会签人设置
String[] a = {"ernie","bert","grover"};
assignable.setPooledActors(a);
}
}
创建会签任务实现类
packagenet.chenj.jbpm.sample;
importorg.jbpm.graph.def.ActionHandler;
importorg.jbpm.graph.exe.ExecutionContext;
importorg.jbpm.graph.exe.Token;
importorg.jbpm.graph.node.TaskNode;
importorg.jbpm.taskmgmt.def.Task;
importorg.jbpm.taskmgmt.exe.TaskMgmtInstance;
publicclassCreateTaskInstanceCountersignimplementsActionHandler {
privatestaticfinallongserialVersionUID = 1L;
publicvoidexecute(ExecutionContext executionContext)throwsException {
Token token = executionContext.getToken();
TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();
TaskNode taskNode = (TaskNode) executionContext.getNode();
Task task = taskNode.getTask("tc_prj_countersign");
// 从数据库或者ldap 读取会签人设置创建任务实例
tmi.createTaskInstance(task, token).setActorId("ernie");
tmi.createTaskInstance(task, token).setActorId("bert");
tmi.createTaskInstance(task, token).setActorId("grover");
}
}
结束不通过时结束其他会签任务实现
packagenet.chenj.jbpm.sample;
importjava.util.Collection;
importjava.util.Iterator;
importorg.jbpm.graph.def.ActionHandler;
importorg.jbpm.graph.exe.ExecutionContext;
importorg.jbpm.taskmgmt.exe.TaskInstance;
importorg.jbpm.taskmgmt.exe.TaskMgmtInstance;
publicclassTaskEndCountersignimplementsActionHandler {
privatestaticfinallongserialVersionUID = 1L;
publicvoidexecute(ExecutionContext executionContext)throwsException {
booleanisDisapprove = Boolean.valueOf((String) executionContext
.getVariable("isDisapprove"));
// 如果有一个任务实例拒绝通过则结束除当前任务实例外其他任务实例
if(isDisapprove) {
TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();
TaskInstance ti = executionContext.getTaskInstance();
finalString actorId = ti.getActorId();
Collection c = tmi.getSignallingTasks(executionContext);
for(Iterator it = c.iterator(); it.hasNext();) {
TaskInstance task = (TaskInstance) it.next();
if(!(actorId.equals(task.getActorId())) && (!task.hasEnded())) {
task.end("disapprove");
}
}
}
}
}
posted on 2007-10-15 17:34 jbpm 阅读(6030) 评论(0) 编辑 收藏 所属分类: jbpm实例