一个简单的会签实例

转载 2007年10月15日 17:23:00

作者:tomkoo

以下例子中 采用了jbpm console 的几个实例用户

项目提交人 : ernie .

主管审批 : bert

会签 : ernie , bert , grover

老板审批 : grover

 

正常流程: 项目金额 >= 500W RMB

提交项目 --> 主管审批 --> 会签 --> 老板审批 --> 审批通过(结束)

正常流程: 项目金额 < 500W RMB

提交项目 --> 主管审批 --> 会签 --> 审批通过(结束)

其中主管审批, 会签, 老板审批 , 不通过, 全部退回给项目提交人修改.

会签中: 所有人全通过, 则通过. 任何一人不通过, 停止其他会签任务.退回给提交人.

流程定义如下:

 

代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <process-definition xmlns="urn:jbpm.org:jpdl-3.1"  
  4.     name="tc_prj_approval">  
  5.   
  6.     <swimlane name="initiator" />  
  7.   
  8.     <!-- 项目提交人 -->  
  9.     <swimlane name="requester">  
  10.         <assignment expression="user(ernie)" />  
  11.     </swimlane>  
  12.   
  13.     <!-- 主管 -->  
  14.     <swimlane name="chief">  
  15.         <assignment expression="user(bert)" />  
  16.     </swimlane>  
  17.   
  18.     <!-- 老板 -->  
  19.     <swimlane name="boss">  
  20.         <assignment expression="user(grover)" />  
  21.     </swimlane>  
  22.   
  23.     <!-- 会签人 -->  
  24.     <swimlane name="cosinger">  
  25.         <assignment class="net.chenj.jbpm.sample.CosingerAssiHandler">  
  26.         </assignment>  
  27.     </swimlane>  
  28.     <start-state name="start">  
  29.         <task name="tc_prj_newprj" swimlane="initiator"></task>  
  30.         <transition name="to_submit" to="tc_prj_submit"></transition>  
  31.     </start-state>  
  32.     <task-node name="tc_prj_submit">  
  33.         <task name="tc_prj_submit"></task>  
  34.         <transition name="to_chiefapprove" to="tc_prj_chiefapprove"></transition>  
  35.     </task-node>  
  36.     <task-node name="tc_prj_chiefapprove">  
  37.         <task name="tc_prj_chiefapprove"></task>  
  38.         <transition name="approve" to="tc_prj_countersign"></transition>  
  39.         <transition name="disapprove" to="tc_prj_submit"></transition>  
  40.     </task-node>  
  41.     <task-node name="tc_prj_countersign" signal="last-wait"  
  42.         create-tasks="false">  
  43.         <task name="tc_prj_countersign">  
  44.             <event type="task-end">  
  45.                 <action  
  46.                     class="net.chenj.jbpm.sample.TaskEndCountersign">  
  47.                 </action>  
  48.             </event>  
  49.   
  50.         </task>  
  51.   
  52.         <event type="node-enter">  
  53.             <action name="createInstance"  
  54.                 class="net.chenj.jbpm.sample.CreateTaskInstanceCountersign">  
  55.             </action>  
  56.         </event>  
  57.   
  58.         <transition name="approve" to="amount_decision"></transition>  
  59.         <transition name="disapprove" to="tc_prj_submit"></transition>  
  60.     </task-node>  
  61.     <decision name="amount_decision">  
  62.         <transition name="to_bossapprove" to="tc_prj_bossapprove"></transition>  
  63.         <transition name="to_end" to="end1"></transition>  
  64.     </decision>  
  65.     <task-node name="tc_prj_bossapprove">  
  66.         <task name="tc_prj_bossapprove"></task>  
  67.         <transition name="approve" to="end1"></transition>  
  68.         <transition name="disapprove" to="tc_prj_submit">  
  69.             <condition>#{amount >= 500}</condition>  
  70.         </transition>  
  71.     </task-node>  
  72.     <end-state name="end1"></end-state>  
  73. </process-definition>  
  74.   

 

会签swimlane class

 

代码
  1. package net.chenj.jbpm.sample;   
  2.   
  3. import org.jbpm.graph.exe.*;   
  4. import org.jbpm.taskmgmt.def.*;   
  5. import org.jbpm.taskmgmt.exe.Assignable;   
  6.   
  7. public class CosingerAssiHandler implements AssignmentHandler {   
  8.   
  9.     private static final long serialVersionUID = 1L;   
  10.   
  11.     public void assign(Assignable assignable, ExecutionContext executionContext) {   
  12.         // 从数据库或者ldap 读取会签人设置   
  13.         String[] a = { "ernie""bert""grover" };   
  14.         assignable.setPooledActors(a);   
  15.     }   
  16.   
  17. }   
  18.   

创建会签任务实现类

 

 

代码
  1. package net.chenj.jbpm.sample;   
  2.   
  3. import org.jbpm.graph.def.ActionHandler;   
  4. import org.jbpm.graph.exe.ExecutionContext;   
  5. import org.jbpm.graph.exe.Token;   
  6. import org.jbpm.graph.node.TaskNode;   
  7. import org.jbpm.taskmgmt.def.Task;   
  8. import org.jbpm.taskmgmt.exe.TaskMgmtInstance;   
  9.   
  10. public class CreateTaskInstanceCountersign implements ActionHandler {   
  11.   
  12.     private static final long serialVersionUID = 1L;   
  13.   
  14.     public void execute(ExecutionContext executionContext) throws Exception {   
  15.   
  16.         Token token = executionContext.getToken();   
  17.         TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();   
  18.         TaskNode taskNode = (TaskNode) executionContext.getNode();   
  19.         Task task = taskNode.getTask("tc_prj_countersign");   
  20.         // 从数据库或者ldap 读取会签人设置创建任务实例   
  21.         tmi.createTaskInstance(task, token).setActorId("ernie");   
  22.         tmi.createTaskInstance(task, token).setActorId("bert");   
  23.         tmi.createTaskInstance(task, token).setActorId("grover");   
  24.   
  25.     }   
  26.   
  27. }   

 

结束不通过时结束其他会签任务实现

代码
  1. package net.chenj.jbpm.sample;   
  2.   
  3. import java.util.Collection;   
  4. import java.util.Iterator;   
  5. import org.jbpm.graph.def.ActionHandler;   
  6. import org.jbpm.graph.exe.ExecutionContext;   
  7. import org.jbpm.taskmgmt.exe.TaskInstance;   
  8. import org.jbpm.taskmgmt.exe.TaskMgmtInstance;   
  9.   
  10. public class TaskEndCountersign implements ActionHandler {   
  11.   
  12.     private static final long serialVersionUID = 1L;   
  13.   
  14.     public void execute(ExecutionContext executionContext) throws Exception {   
  15.   
  16.        
  17.         boolean isDisapprove = Boolean.valueOf((String) executionContext   
  18.                 .getVariable("isDisapprove"));   
  19.         // 如果有一个任务实例拒绝通过则结束除当前任务实例外其他任务实例   
  20.         if (isDisapprove) {   
  21.             TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();   
  22.             TaskInstance ti = executionContext.getTaskInstance();   
  23.             final String actorId = ti.getActorId();   
  24.             Collection c = tmi.getSignallingTasks(executionContext);   
  25.             for (Iterator it = c.iterator(); it.hasNext();) {   
  26.                 TaskInstance task = (TaskInstance) it.next();   
  27.                 if (!(actorId.equals(task.getActorId())) && (!task.hasEnded())) {   
  28.                     task.end("disapprove");   
  29.                 }   
  30.             }   
  31.         }   
  32.   
  33.     }   
  34.   
  35. }   

 

 

 

Activiti学习之 多实例实现会签功能

一个任务需要多个角色进行审批或者表决,根据这些审批结果来决定流程的走向。实现以上任务,activiti已经提供了支持,可以使用BPMN规范的多实例活动来实现。 1.Activiti多实例: 多实...
  • chq00788
  • chq00788
  • 2014年11月26日 11:27
  • 14836

activiti--多实例任务实现会签

Activiti中提供了多实例任务(for-each)将多实例应到到UserTask中可以实现会签功能。 ? 1 2 3 4 5 ...
  • kakolukiya
  • kakolukiya
  • 2015年07月09日 12:37
  • 643

Activiti - 设置会签

正好有两个人问道:支持会签吗? 也有人也问道:什么是会签? 如果从process engine的角度上讲呢? 可以说一个task节点下有多个task instance。 而不是一个从task...
  • junlong750
  • junlong750
  • 2016年03月16日 14:44
  • 4884

activiti工作流会签功能的实现

需求:统计会签部门的审核情况然后决定下一步流程的走向;逻辑实现: 1、设置一个变量signCount 如果同意,signCount+1 // 如果是会签流程 List<...
  • liuwu0720
  • liuwu0720
  • 2015年11月06日 11:15
  • 3004

Activiti多人会签例子

Activiti中提供了多实例任务(for-each)将多实例应到到UserTask中可以实现会签功能。 Multi-instance (for each)  Description  A mult...
  • hanghangaidoudou
  • hanghangaidoudou
  • 2017年05月16日 10:18
  • 1137

Activiti 工作流会签开发设计思路

在流程业务管理中,任务是通常都是由一个人去处理的,而多个人同时处理一个任 务,这种任务我们称之为会签任务。这种业务需求也很常见,如一个请款单,领导审批环节中,就需要多个部门领导签字。在流程业务中,我们...
  • bluejoe2000
  • bluejoe2000
  • 2014年10月30日 22:05
  • 9916

Activiti 工作流会签开发设计思路

技术顾问:周海龙   QQ:1438712946   联系电话:13070215345 Activiti 工作流会签开发设计思路 在流程业务管理中,任务是通常都是由一个人去处理的,而多个人...
  • sd4015700
  • sd4015700
  • 2015年10月29日 11:42
  • 1225

编写简单的WebService示例

1.参考文献: 1.利用Java编写简单的WebService实例  http://nopainnogain.iteye.com/blog/791525 2.Axis2与Eclipse整合...
  • CHBSRZF
  • CHBSRZF
  • 2015年09月08日 18:02
  • 1017

工作流管理系统开发之十八 工作流会签的相关实现

在工作流系统中,单步会签,多部门会签,会签百分比,加签,减签等等这些是必备的功能。尤其在办公管理的审批流程中,经常会用到这些。 例如单步会签,在流程的某个环节需要多个人同时办理,不分先后次序的签署意...
  • LikeLaura
  • LikeLaura
  • 2016年10月14日 19:20
  • 389

通达OA2015中会签意见如何在流程的表单中并排显示

在通达OA的工作流中,常常涉及到流程的并发会签,尤其是公文的批办和处理的流程会较多次的用到,并使用表单设计中的“宏”将会签意见、签字、时间显示到流程的表单中,可是往往显示的方式都是竖排的,会签人数多的...
  • hai7425
  • hai7425
  • 2016年06月28日 09:43
  • 2618
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个简单的会签实例
举报原因:
原因补充:

(最多只允许输入30个字)