java代码实现流程中的会签_⼀个简单的会签实例作者: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.taskmgmt.def.*;
importorg.Assignable;
jfinal项目实例publicclassCosingerAssiHandlerimplementsAssignmentHandler {
privatestaticfinallongserialVersionUID = 1L;
publicvoidassign(Assignable assignable, ExecutionContext executionContext) {
// 从数据库或者ldap 读取会签⼈设置
String[] a = {"ernie","bert","grover"};
assignable.setPooledActors(a);
}
}
创建会签任务实现类
packagenet.chenj.jbpm.sample;
aph.def.ActionHandler;
ExecutionContext;
Token;
de.TaskNode;
importorg.jbpm.taskmgmt.def.Task;
importorg.TaskMgmtInstance; publicclassCreateTaskInstanceCountersignimplementsActionHandler { privatestaticfinallongserialVersionUID = 1L;
publicvoidexecute(ExecutionContext executionContext)throwsException { Token token = Token();
TaskMgmtInstance tmi = TaskMgmtInstance(); TaskNode taskNode = (TaskNode) Node();
Task task = Task("tc_prj_countersign");
// 从数据库或者ldap 读取会签⼈设置创建任务实例
}
}
结束不通过时结束其他会签任务实现
packagenet.chenj.jbpm.sample;
importjava.util.Collection;
importjava.util.Iterator;
aph.def.ActionHandler;
ExecutionContext;
importorg.TaskInstance;
importorg.TaskMgmtInstance; publicclassTaskEndCountersignimplementsActionHandler { privatestaticfinallongserialVersionUID = 1L;
publicvoidexecute(ExecutionContext executionContext)throwsException { booleanisDisapprove = Boolean.valueOf((String) executionContext
.getVariable("isDisapprove"));
// 如果有⼀个任务实例拒绝通过则结束除当前任务实例外其他任务实例
if(isDisapprove) {
TaskMgmtInstance tmi = TaskMgmtInstance();
TaskInstance ti = TaskInstance();
finalString actorId = ti.getActorId();
Collection c = SignallingTasks(executionContext);
for(Iterator it = c.iterator(); it.hasNext();) {
TaskInstance task = (TaskInstance) it.next();
if(!(actorId.ActorId())) && (!task.hasEnded())) {
}
}
}
}
}
posted on 2007-10-15 17:34 jbpm 阅读(6030) 评论(0)  编辑  收藏 所属分类: jbpm实例

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。