java 事件cancel 您所在的位置:网站首页 python的数值类型包括哪些 java 事件cancel

java 事件cancel

2024-02-01 12:05| 来源: 网络整理| 查看: 265

Activiti结束事件(End Event)

作者:Jesai -2017.08.03T01:03

曾经,黑夜多么漫长,八月雨扰眠,缘何?

声明:版权所有,如需引用请注明出处,如发现抄袭,必追究法律责任

1       前言:

Activiti工作流始于开始任务,止于结束任务。结束事件标志着(子)流程的(分支的)结束。结束事件总是抛出(型)事件。这意味着当流程执行到达结束事件时,会抛出一个结果。结果的类型由事件内部的黑色图标描绘。在XML表示中,类型由子元素声明给出。流程终结又可以分为4种情况:空结束任务、错误结束任务、取消结束任务、终结任务,其中空结束任务是最常见的结束任务。

2       结束任务的类型:

1)空结束任务(none end event)

2)错误结束事件(error end event)

3)取消结束任务(terminate end event)

4)终结任务(Cancel end event)

3       空结束任务(none end event)

空结束任务是最常见的一种结束任务,也是最简单的一种结束任务,只要把结束任务置于流程的最后节点,流程实例运行到该节点的时候,流程引擎就会结束该流程实例。并没有太多复杂的技术。所以不作太多的介绍。空事件的XML表示格式,为普通结束事件声明,没有任何子元素(其它种类的结束事件都有子元素,用于声明其类型)。

3.1   流程实例图标:

6b075ff62d74ff1353fdeb83a8ffdb54.png

图3-1 空结束事件图标

3.2   代码:

1

4       错误结束事件(error end event)

错误结束事件会在流程到达错误结束事件的时候抛出错误,并结束当前的流程分支。错误可以使用使用匹配的错误边界中间事件 intermediate boundary error event 捕获。如果找不到匹配的错误边界事件,将会抛出异常。

4.1   流程实例图标:

错误结束事件就是自流程或者流程实例的错误结束事件抛出一个bpmn错误。然后被工作流的错误边界事件获取。

2375edae3fd72304a16715bd5623df04.png

图4-1 错误结束事件图标

错误结束事件,表示为结束事件,加上errorEventDefinition子元素:

1

2

3

errorRef属性可以引用在流程外定义的error元素:

1

2 ...3

4 ...

error的errorCode用于查找匹配的错误捕获边界事件。如果errorRef不匹配任何已定义的error,则该errorRef会用做errorCode的快捷方式。这个快捷方式是Activiti特有的。下面的代码片段在功能上是相同的。

1

2 ...3

4 ...5

6

7

8 ...

与下面的功能相同

1

2

3

请注意errorRef必须遵从BPMN 2.0概要(schema),且必须是合法的QName。

4.2流程图设计

流程图设计一个子流程,然后子流程里面有一个错误结束事件。外面的错误捕获边界任务就会捕获异常。捕获了异常后,由于是错误边界先去捕获异常,所以捕获错误事件分支会先执行,然后结束。正常结束事件节点所在的分支不会执行。

666b43d3af21656102216b3e4743801d.png

图4-2 错误结束事件流程设计

4.3执行结果

2d22b94dd6ccf1b8d8d11cc8ae710718.png

图4-3 错误结束事件流程运行结果

4.4   流程代码

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

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

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

4.5   java监听类代码

4.5.1     子流程监听器:

1 /**

2

3 *4

5 */

6

7 packagelight.mvc.workflow.serviceTask;8

9

10

11 importorg.activiti.engine.delegate.DelegateExecution;12

13 importorg.activiti.engine.delegate.JavaDelegate;14

15

16

17 /**

18

19 *20

21 * 项目名称:lightmvc22

23 * 类名称:ServiceTask24

25 * 类描述:26

27 * 创建人:邓家海28

29 * 创建时间:2017年6月4日 下午6:18:1130

31 * 修改人:deng32

33 * 修改时间:2017年6月4日 下午6:18:1134

35 * 修改备注:36

37 *@version

38

39 *40

41 */

42

43

44

45 public class SubErrorTestRunningTask implementsJavaDelegate{46

47 //重写委托的提交方法

48

49 @Override50

51 public void execute(DelegateExecution execution) throwsException {52

53 //receiveTaskprocess

54

55 System.out.println("SubErrorTestRunningTask is running!");56

57 }58

59 }

4.5.2     捕获事件监听器

1 /**

2

3 *4

5 */

6

7 packagelight.mvc.workflow.serviceTask;8

9

10

11 importorg.activiti.engine.delegate.DelegateExecution;12

13 importorg.activiti.engine.delegate.JavaDelegate;14

15

16

17 /**

18

19 *20

21 * 项目名称:lightmvc22

23 * 类名称:ServiceTask24

25 * 类描述:26

27 * 创建人:邓家海28

29 * 创建时间:2017年6月4日 下午6:18:1130

31 * 修改人:deng32

33 * 修改时间:2017年6月4日 下午6:18:1134

35 * 修改备注:36

37 *@version

38

39 *40

41 */

42

43

44

45 public class CacheErrorTestRunningTask implementsJavaDelegate{46

47 //重写委托的提交方法

48

49 @Override50

51 public void execute(DelegateExecution execution) throwsException {52

53 //receiveTaskprocess

54

55 System.out.println("CacheErrorTestRunningTask is running!");56

57 }58

59

60

61 }

4.5.3     正常结束事件监听器

1 /**

2

3 *4

5 */

6

7 packagelight.mvc.workflow.serviceTask;8

9

10

11 importorg.activiti.engine.delegate.DelegateExecution;12

13 importorg.activiti.engine.delegate.JavaDelegate;14

15

16

17 /**

18

19 *20

21 * 项目名称:lightmvc22

23 * 类名称:ServiceTask24

25 * 类描述:26

27 * 创建人:邓家海28

29 * 创建时间:2017年6月4日 下午6:18:1130

31 * 修改人:deng32

33 * 修改时间:2017年6月4日 下午6:18:1134

35 * 修改备注:36

37 *@version

38

39 *40

41 */

42

43 public class NormalErrorTestRunningTask implementsJavaDelegate{44

45 //重写委托的提交方法

46

47 @Override48

49 public void execute(DelegateExecution execution) throwsException {50

51 //receiveTaskprocess

52

53 System.out.println("NormalErrorTestRunningTask is running!");54

55 }56

57 }58

59

4.5.4     扩展1

下面我们改动一下流程,更清晰的看看这个工作的原理是怎么样的。

这一次我们是把错误事件的指向正常结束事件后面去了,可以看到,后面是正常执行的。

40b1ab446843a51161173599cf75d24f.png

图4-3 错误结束事件流程设计

98ce778dfe89299f403dbc9b6bb4e67f.png

图4-4 错误结束事件运行结果

4.5.5     扩展2

再来改一下流程,可以看出,错误捕获边界是达到了终止主流程的效果的。主流程被中断了。不过错误捕获边界是否有终止事件,主流程都不会被继续往下执行。

17578874dc6d7e4d2a203ddf8788650a.png

图4-5 错误结束事件流程图

437735fffd6f111253b53e8e22d5c750.png

图4-6 错误结束事件运行结果

5       取消结束任务(terminate end event)

当到达终止结束事件时,当前的流程实例或子流程会被终止。概念上说,当执行到达终止结束事件时,会判断第一个范围 scope(流程或子流程)并终止它。请注意在BPMN 2.0中,子流程可以是嵌入式子流程,调用活动,事件子流程,或事务子流程。有一条通用规则:当存在多实例的调用过程或嵌入式子流程时,只会终止一个实例,其他的实例与流程实例不会受影响。可以添加一个可选属性terminateAll。当其为true时,无论该终止结束事件在流程定义中的位置,也无论它是否在子流程(甚至是嵌套子流程)中,都会终止(根)流程实例。

5.1   流程实例图标:

7eec8e4ef4106801b18b9f19dd393824.png

图5-1 取消结束事件图标

终止结束事件,表示为结束事件,加上terminateEventDefinition子元素。

请注意terminateAll属性是可选的(默认为false)。

1 2

3

5.2   流程图设计

注意,这个流程的终止事件并没有设置成终止全部,可以看到,全部任务节点都被执行了。

a0a19fb46b4552eda17767521e5bd305.png

图5-2 取消结束事件流程图设计

5.3   运行结果

4c08972d35d870cdce7881b396bb3c33.png

图5-3 取消结束事件流程执行结果

5.4   XML代码:

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

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

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

5.5   扩展

这一次,我们把该流程的终止任务设置成终止全部,可以看到,子流程执行完了之后,主流程被终止了。由此可见,终止的只是主流程,子流程并没有终止。

7e50911cafcc47b570e49aebd72ec51f.png

图5-4 取消结束事件图标

5.6   运行结果

125d473b4e76bef5bef11db6225e5367.png

图5-5 取消结束事件执行结果

5.7   XML代码:

5.8   java监听器代码:

1 /**

2

3 *4

5 */

6

7 packagelight.mvc.workflow.serviceTask;8

9 importorg.activiti.engine.delegate.DelegateExecution;10

11 importorg.activiti.engine.delegate.JavaDelegate;12

13 /**

14

15 *16

17 * 项目名称:lightmvc18

19 * 类名称:ServiceTask20

21 * 类描述:22

23 * 创建人:邓家海24

25 * 创建时间:2017年6月4日 下午6:18:1126

27 * 修改人:deng28

29 * 修改时间:2017年6月4日 下午6:18:1130

31 * 修改备注:32

33 *@version

34

35 *36

37 */

38

39 public class FirstTestRunningTask implementsJavaDelegate{40

41 //重写委托的提交方法

42

43 @Override44

45 public void execute(DelegateExecution execution) throwsException {46

47 //receiveTaskprocess

48

49 System.out.println("FirstTestRunningTask is running!");50

51 }52

53 }

1 /**

2

3 *4

5 */

6

7 packagelight.mvc.workflow.serviceTask;8

9

10

11 importorg.activiti.engine.delegate.DelegateExecution;12

13 importorg.activiti.engine.delegate.JavaDelegate;14

15 /**

16

17 *18

19 * 项目名称:lightmvc20

21 * 类名称:ServiceTask22

23 * 类描述:24

25 * 创建人:邓家海26

27 * 创建时间:2017年6月4日 下午6:18:1128

29 * 修改人:deng30

31 * 修改时间:2017年6月4日 下午6:18:1132

33 * 修改备注:34

35 *@version

36

37 *38

39 */

40

41 public class SecondTestRunningTask implementsJavaDelegate{42

43 //重写委托的提交方法

44

45 @Override46

47 public void execute(DelegateExecution execution) throwsException {48

49 //receiveTaskprocess

50

51 System.out.println("SecondTestRunningTask is running!");52

53 }54

55 }

1 /**

2

3 *4

5 */

6

7 packagelight.mvc.workflow.serviceTask;8

9 importorg.activiti.engine.delegate.DelegateExecution;10

11 importorg.activiti.engine.delegate.JavaDelegate;12

13 /**

14

15 *16

17 * 项目名称:lightmvc18

19 * 类名称:ServiceTask20

21 * 类描述:22

23 * 创建人:邓家海24

25 * 创建时间:2017年6月4日 下午6:18:1126

27 * 修改人:deng28

29 * 修改时间:2017年6月4日 下午6:18:1130

31 * 修改备注:32

33 *@version

34

35 *36

37 */

38

39 public class ThreeTestRunningTask implementsJavaDelegate{40

41 //重写委托的提交方法

42

43 @Override44

45 public void execute(DelegateExecution execution) throwsException {46

47 //receiveTaskprocess

48

49 System.out.println("ThreeTestRunningTask is running!");50

51 }52

53 }

1 /**

2

3 *4

5 */

6

7 packagelight.mvc.workflow.serviceTask;8

9 importorg.activiti.engine.delegate.BpmnError;10

11 importorg.activiti.engine.delegate.DelegateExecution;12

13 importorg.activiti.engine.delegate.JavaDelegate;14

15 /**

16

17 *18

19 * 项目名称:lightmvc20

21 * 类名称:ServiceTask22

23 * 类描述:24

25 * 创建人:邓家海26

27 * 创建时间:2017年6月4日 下午6:18:1128

29 * 修改人:deng30

31 * 修改时间:2017年7月16日 下午7:28:1132

33 * 修改备注:34

35 *@version

36

37 *38

39 */

40

41 public class TestRunningTask implementsJavaDelegate{42

43 //重写委托的提交方法

44

45 @Override46

47 public void execute(DelegateExecution execution) throwsException{48

49 System.out.println("TestRunningTask is running!");50

51 }52

53 }

6       终结任务(Cancel end event)

取消结束事件,只能与bpmn事务子流程(bpmn transaction subprocess)一起使用。当到达取消结束事件时,会抛出取消事件,且必须由取消边界事件(cancel boundary event)捕获。之后这个取消边界事件将取消事务,并触发补偿(compensation)。

6.1   流程实例图标:

53f5a735ef22b7873f5320a8ece8b7ef.png

图6-1 终结事件图标

6.2   流程图设计

注意,子流程必须是事务子流程,否则会抛异常。在这里可以看到,主流程是被终止的

73a3b2a3a9cbc63e45ab92338e419f89.png

图6-3 终结事件流程设计

6.3   执行结果

723c4259772a490794424d7f324fda3e.png

图6-4 终结事件执行结果

6.4   XML代码:

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

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

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

6.5   Java监听类代码:

1 /**

2

3 *4

5 */

6

7 packagelight.mvc.workflow.serviceTask;8

9

10

11 importorg.activiti.engine.delegate.DelegateExecution;12

13 importorg.activiti.engine.delegate.JavaDelegate;14

15

16

17 /**

18

19 *20

21 * 项目名称:lightmvc22

23 * 类名称:ServiceTask24

25 * 类描述:26

27 * 创建人:邓家海28

29 * 创建时间:2017年6月4日 下午6:18:1130

31 * 修改人:deng32

33 * 修改时间:2017年6月4日 下午6:18:1134

35 * 修改备注:36

37 *@version

38

39 *40

41 */

42

43 public class FirstTestRunningTask implementsJavaDelegate{44

45 //重写委托的提交方法

46

47 @Override48

49 public void execute(DelegateExecution execution) throwsException {50

51 //receiveTaskprocess

52

53 System.out.println("FirstTestRunningTask is running!");54

55 }56

57 }

1 /**

2

3 *4

5 */

6

7 packagelight.mvc.workflow.serviceTask;8

9

10

11 importorg.activiti.engine.delegate.DelegateExecution;12

13 importorg.activiti.engine.delegate.JavaDelegate;14

15

16

17 /**

18

19 *20

21 * 项目名称:lightmvc22

23 * 类名称:ServiceTask24

25 * 类描述:26

27 * 创建人:邓家海28

29 * 创建时间:2017年6月4日 下午6:18:1130

31 * 修改人:deng32

33 * 修改时间:2017年6月4日 下午6:18:1134

35 * 修改备注:36

37 *@version

38

39 *40

41 */

42

43 public class SecondTestRunningTask implementsJavaDelegate{44

45 //重写委托的提交方法

46

47 @Override48

49 public void execute(DelegateExecution execution) throwsException {50

51 //receiveTaskprocess

52

53 System.out.println("SecondTestRunningTask is running!");54

55 }56

57 }

1 /**

2

3 *4

5 */

6

7 packagelight.mvc.workflow.serviceTask;8

9

10

11 importorg.activiti.engine.delegate.DelegateExecution;12

13 importorg.activiti.engine.delegate.JavaDelegate;14

15

16

17 /**

18

19 *20

21 * 项目名称:lightmvc22

23 * 类名称:ServiceTask24

25 * 类描述:26

27 * 创建人:邓家海28

29 * 创建时间:2017年6月4日 下午6:18:1130

31 * 修改人:deng32

33 * 修改时间:2017年6月4日 下午6:18:1134

35 * 修改备注:36

37 *@version

38

39 *40

41 */

42

43 public class ThreeTestRunningTask implementsJavaDelegate{44

45 //重写委托的提交方法

46

47 @Override48

49 public void execute(DelegateExecution execution) throwsException {50

51 //receiveTaskprocess

52

53 System.out.println("ThreeTestRunningTask is running!");54

55 }56

57 }

1 /**

2

3 *4

5 */

6

7 packagelight.mvc.workflow.serviceTask;8

9

10

11 importorg.activiti.engine.delegate.DelegateExecution;12

13 importorg.activiti.engine.delegate.JavaDelegate;14

15

16

17 /**

18

19 *20

21 * 项目名称:lightmvc22

23 * 类名称:ServiceTask24

25 * 类描述:26

27 * 创建人:邓家海28

29 * 创建时间:2017年6月4日 下午6:18:1130

31 * 修改人:deng32

33 * 修改时间:2017年6月4日 下午6:18:1134

35 * 修改备注:36

37 *@version

38

39 *40

41 */

42

43

44

45 public class FourTestRunningTask implementsJavaDelegate{46

47 //重写委托的提交方法

48

49 @Override50

51 public void execute(DelegateExecution execution) throwsException {52

53 //receiveTaskprocess

54

55 System.out.println("FourTestRunningTask is running!");56

57 }58

59 }

1 /**

2

3 *4

5 */

6

7 packagelight.mvc.workflow.serviceTask;8

9

10

11 importorg.activiti.engine.delegate.DelegateExecution;12

13 importorg.activiti.engine.delegate.JavaDelegate;14

15 /**

16

17 *18

19 * 项目名称:lightmvc20

21 * 类名称:ServiceTask22

23 * 类描述:24

25 * 创建人:邓家海26

27 * 创建时间:2017年6月4日 下午6:18:1128

29 * 修改人:deng30

31 * 修改时间:2017年6月4日 下午6:18:1132

33 * 修改备注:34

35 *@version

36

37 *38

39 */

40

41 public class NormalEndTestRunningTask implementsJavaDelegate{42

43 //重写委托的提交方法

44

45 @Override46

47 public void execute(DelegateExecution execution) throwsException {48

49 //receiveTaskprocess

50

51 System.out.println("NormalEndTestRunningTask is running!");52

53 }54

55

56

57 }

1 /**

2

3 *4

5 */

6

7 packagelight.mvc.workflow.serviceTask;8

9

10

11 importorg.activiti.engine.delegate.DelegateExecution;12

13 importorg.activiti.engine.delegate.JavaDelegate;14

15

16

17 /**

18

19 *20

21 * 项目名称:lightmvc22

23 * 类名称:ServiceTask24

25 * 类描述:26

27 * 创建人:邓家海28

29 * 创建时间:2017年6月4日 下午6:18:1130

31 * 修改人:deng32

33 * 修改时间:2017年6月4日 下午6:18:1134

35 * 修改备注:36

37 *@version

38

39 *40

41 */

42

43 public class CacheEndTestRunningTask implementsJavaDelegate{44

45 //重写委托的提交方法

46

47 @Override48

49 public void execute(DelegateExecution execution) throwsException {50

51 //receiveTaskprocess

52

53 System.out.println("CacheEndTestRunningTask is running!");54

55 }56

57 }

1 /**

2

3 *4

5 */

6

7 packagelight.mvc.workflow.serviceTask;8

9

10

11 importorg.activiti.engine.delegate.DelegateExecution;12

13 importorg.activiti.engine.delegate.JavaDelegate;14

15 /**

16

17 *18

19 * 项目名称:lightmvc20

21 * 类名称:ServiceTask22

23 * 类描述:24

25 * 创建人:邓家海26

27 * 创建时间:2017年6月4日 下午6:18:1128

29 * 修改人:deng30

31 * 修改时间:2017年6月4日 下午6:18:1132

33 * 修改备注:34

35 *@version

36

37 *38

39 */

40

41 public class CancelEndEventTestRunningTask implementsJavaDelegate{42

43 //重写委托的提交方法

44

45 @Override46

47 public void execute(DelegateExecution execution) throwsException {48

49 //receiveTaskprocess

50

51 System.out.println("CancelEndEventTestRunningTask is running!");52

53 }54

55

56

57 }

1 /**

2

3 *4

5 */

6

7 packagelight.mvc.workflow.serviceTask;8

9

10

11 importorg.activiti.engine.delegate.DelegateExecution;12

13 importorg.activiti.engine.delegate.JavaDelegate;14

15

16

17 /**

18

19 *20

21 * 项目名称:lightmvc22

23 * 类名称:ServiceTask24

25 * 类描述:26

27 * 创建人:邓家海28

29 * 创建时间:2017年6月4日 下午6:18:1130

31 * 修改人:deng32

33 * 修改时间:2017年6月4日 下午6:18:1134

35 * 修改备注:36

37 *@version

38

39 *40

41 */

42

43 public class SubNormalEndTestRunningTask implementsJavaDelegate{44

45 //重写委托的提交方法

46

47 @Override48

49 public void execute(DelegateExecution execution) throwsException {50

51 //receiveTaskprocess

52

53 System.out.println("SubNormalEndTestRunningTask is running!");54

55 }56

57 }

6.6   延伸

下面我们改动一下流程:发现它还是一样的,终止了主流程。

f795f6ee3ec3cba991b9f64cfd06af09.png

图6-4 终结事件流程图设计

ed0e67a9248958d89cb0aff363f4905b.png

图6-4 终结事件执行结果

Activiti交流QQ群:634320089



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有