博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activiti之 Exclusive Gateway
阅读量:7023 次
发布时间:2019-06-28

本文共 7864 字,大约阅读时间需要 26 分钟。

一、Exclusive Gateway

  Exclusive Gateway(也称为XOR网关或更多技术基于数据的排他网关)经常用做决定流程的流转方向。当流程到达该网关的时候,所有的流出序列流到按照已定义好的顺序依次执行。当序列流条件的求值结果为true(或没有条件集的时候,在概念上有定义一个“true”定义序列流),就会选择该序列继续的处理。Exclusive Gateway的图标就是菱形里面有一个X符合,如下所示:

  

  XML的代码为:

${input == 1}
${input == 2}
${input == 3}

 二、示例

  本例子以请假流程为例,流程设计图如下图所示:

  

  当员工提出的请假时间大于2天的时候由总经理审批,当请假时间不大于2天的时候由经理审批。

  1、leave.bpmn内容如下: 

1 
2
3
4
请假流程图
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2}]]>
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109

  2、测试类LeaveTest代码如下:

1 package com.shh.test;  2   3 import java.util.HashMap;  4 import java.util.List;  5 import java.util.Map;  6   7 import org.activiti.engine.HistoryService;  8 import org.activiti.engine.ProcessEngine;  9 import org.activiti.engine.ProcessEngineConfiguration; 10 import org.activiti.engine.RepositoryService; 11 import org.activiti.engine.RuntimeService; 12 import org.activiti.engine.TaskService; 13 import org.activiti.engine.history.HistoricProcessInstanceQuery; 14 import org.activiti.engine.task.Task; 15 import org.junit.Before; 16 import org.junit.Test; 17 /** 18  * 请假流程 19  */ 20 public class LeaveTest { 21     ProcessEngine processEngine = null; 22     RepositoryService repositoryService = null; 23     RuntimeService runtimeService = null; 24     TaskService taskService = null;  25  26     /** 27      * 加载配置文件 28      */ 29     @Before 30     public void init() { 31         processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml") 32                 .buildProcessEngine(); 33         repositoryService = processEngine.getRepositoryService(); 34         runtimeService = processEngine.getRuntimeService(); 35         taskService = processEngine.getTaskService(); 36     } 37  38     /** 39      * 部署流程定义 40      */ 41     @Test 42     public void deploy(){ 43         repositoryService.createDeployment().addClasspathResource("diagrams/leave.bpmn").deploy(); 44         System.out.println("***************部署流程定义完成***************"); 45     } 46      47     /** 48      * 启动一个请假流程 49      */ 50     @Test 51     public void start() { 52         Map
variables = new HashMap
(); 53 variables.put("employeeId", "Kermit"); //请假人 54 String processId = runtimeService.startProcessInstanceByKey("leave", variables).getId(); 55 System.out.println("***************启动一个请假流程完成***************" + processId); 56 } 57 58 /** 59 * 提交请假申请 60 */ 61 @Test 62 public void apply(){ 63 System.out.println("***************提交请假申请开始***************"); 64 List
tasks = taskService.createTaskQuery().taskAssignee("Kermit").list(); 65 System.out.println(tasks.size()); 66 for (Task task : tasks) { 67 System.out.println("Kermit的任务taskname:" + task.getName() + ",id:" + task.getId()); 68 taskService.setVariable(task.getId(), "day", 4);//设置请假天数 69 taskService.complete(task.getId());//完成任务 70 System.out.println("请假4 天"); 71 } 72 System.out.println("***************提交请假申请完成***************"); 73 } 74 75 @Test 76 public void step2manager() { 77 System.out.println("***************经理组审批流程开始***************"); 78 List
tasks = taskService.createTaskQuery().taskCandidateGroup("manager").list();// 经理组的任务 79 System.out.println("经理组的任务:" + tasks.size()); 80 for (Task task : tasks) { 81 System.out.println("经理组的任务taskname:" + task.getName() + ",id:" + task.getId()); 82 taskService.claim(task.getId(), "李四");//申领任务 83 taskService.setVariable(task.getId(), "flag", false);//true批准,false不批准 84 Object applyUser = taskService.getVariable(task.getId(), "employeeId"); 85 Object day = taskService.getVariable(task.getId(), "day"); 86 System.out.println(String.format("%s请假%s天", applyUser, day)); 87 taskService.complete(task.getId());//完成任务 88 } 89 System.out.println("***************经理组审批流程结束***************"); 90 } 91 92 @Test 93 public void step2Boss() { 94 System.out.println("***************总经理组审批流程开始***************"); 95 List
tasks = taskService.createTaskQuery().taskCandidateGroup("boss").list();// 总经理组的任务 96 System.out.println("总经理组的任务:" + tasks.size()); 97 for (Task task : tasks) { 98 System.out.println("manager的任务taskname:" + task.getName() + ",id:" + task.getId()); 99 taskService.claim(task.getId(), "王五");//申领任务 100 taskService.setVariable(task.getId(), "flag", true);//true批准,false不批准101 Object applyUser = taskService.getVariable(task.getId(), "employeeId");102 Object day = taskService.getVariable(task.getId(), "day");103 System.out.println(String.format("%s请假%s天", applyUser, day));104 taskService.complete(task.getId());//完成任务 105 }106 System.out.println("***************总经理组审批流程结束***************");107 }108 }

  依次运行deploy()、start()、apply()方法之后,因为申请的请假天数为4天,所以流程已经到了总经理角色,此时运行step2Boss()方法,一个完整的请假流程就已经完成。运行结果如下图所示:

  

  也可对代码进行修改,总经理不批准

 taskService.setVariable(task.getId(), "flag", false);
 流程就回到员工那里,员工继续申请,设置天数为2
taskService.setVariable(task.getId(), "day", 4);//设置请假天数

  此时流程到达经理角色,经理批准,流程也就结束

 taskService.setVariable(task.getId(), "flag", true);

转载地址:http://skpxl.baihongyu.com/

你可能感兴趣的文章
用SignalR 2.0开发客服系统[系列3:实现点对点通讯]
查看>>
glance rabbit
查看>>
JVM——Java虚拟机架构
查看>>
如何解决bib的一些问题
查看>>
适应手机端的jQuery图片滑块动画
查看>>
笔记本电池死而复生
查看>>
LINQ 图解
查看>>
日期和时间字符串格式化
查看>>
Python基础之range()
查看>>
springboot访问jsp页面
查看>>
UVALive5402 UVA579 Clock Hands【水题】
查看>>
CCF201512-4 送货(100分)
查看>>
oracle client安装(window版本)
查看>>
组件里传值到父级
查看>>
windows系统调用 遍历进程的虚拟地址
查看>>
centos7(linux)挂载ntfs格式的移动硬盘(转载)
查看>>
Python编程笔记(第一篇)Python基础语法
查看>>
全面总结Java泛型
查看>>
matlab repmat()
查看>>
可以让你少奋斗10年的工作经验
查看>>