近期在学习 JBPM 工作流,上一篇博文描述了实现一个简单请假工作流的过程
之后花了好几天的时间来实现一个基于泳道的任务发布工作流:
简要流程如下:
某级部门(暂定为A级部门)manager 启动一个新任务发布工作流
通过泳道将该任务发布给A级部门的子部门(B)和孙子部门(C)
B和C部门的所有成员都能够看到该任务,并可以点击链接查看该任务的详细信息
一旦有成员apply 该任务,则其他人都不能再次apply该任务
如果该成员只是C级部门的成员,不具有manager 的角色,则该次申请还需要提交给C级部门的经理进行审核。
如果该成员是C级部门的经理,则不需要审核,直接进入tryfinish 待办任务
当获取了任务的assignee 认为自己完成了该项任务时,则可以提交tryfinish 任务,然后该请求进入工作流发布人的待办任务列表中
如果工作流发布者批准该次任务完成,则该次工作流结束。否则重新进入tryfinish 环节。
具体jbpm。xml 代码如下所示
<?xml version="1.0" encoding="UTF-8"?>
<process name="assignment" xmlns="http://jbpm.org/4.4/jpdl">
<swimlane candidate-groups="#{assignGroup}" name="assignmentswin">
</swimlane>
<start g="336,33,64,58" name="start1">
<transition to="assign"/>
</start>
<task assignee="#{assignOwner}" form="/SSH/LeaveJSP/assign_add.jsp" g="322,107,80,40" name="assign">
<transition to="tryAssign"/>
</task>
<task form="/SSH/LeaveJSP/assign_trytake.jsp" g="323,180,92,52" name="tryAssign" swimlane="assignmentswin">
<transition to="exclusive1"/>
</task>
<decision expr="#{role=='manager'? 'totryFinish':'tomanagerAprove'}" g="351,278,48,48" name="exclusive1">
<transition g="-92,-18" na