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.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实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值