欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

说说 jBPM 流程定义语言(6)—— end (结束活动)

程序员文章站 2022-07-04 20:27:37
...

end 活动用于终结流程。

一般情况下,当流程实例运行到 end 活动后就会结束。但是在到达 end 活动的流程实例中仍然活跃的流程活动(fork - join 并发流转)可以继续执行。

这是一个最简单的包含 end 活动的流程定义:
说说 jBPM 流程定义语言(6)—— end (结束活动)

jPDL:

<?xml version="1.0" encoding="UTF-8"?>

<process name="EndProcessInstance" xmlns="http://jbpm.org/4.4/jpdl" key="EndProcessInstance">
   <start name="start1" g="414,129,48,48">
      <transition to="end1"/>
   </start>
   <end name="end1" g="548,130,48,48"/>
</process>

测试代码:

//发起实例
ProcessInstance processInstance = executionService.startProcessInstanceByKey
        ("EndProcessInstance");

//断言流程结束
assertTrue(processInstance.isEnded());

在 jBPM4 中,流程定义允许多个 end 活动,如果需要在执行到特定的 end 活动时,完全结束流程实例,即其他仍然活跃的并发活动也需要结束,那么,可以设置end活动的属性 “ends=”execution”” 来实现这种需求。默认的 ends 属性值为 processinstance。

也可以定义多个 end 活动,这样可以通过事件机制来触发不同的结束方式:

说说 jBPM 流程定义语言(6)—— end (结束活动)

jPDL:

<?xml version="1.0" encoding="UTF-8"?>

<process key="EndMultiple" name="EndMultiple" xmlns="http://jbpm.org/4.4/jpdl">
   <start g="201,210,48,48" name="start1">
      <transition to="获取返回码"/>
   </start>
   <state g="292,208,124,52" name="获取返回码">
      <transition g="351,166:72,-26" name="200" to="ok"/>
      <transition g="-7,-26" name="400" to="bad request"/>
      <transition g="356,306:76,-28" name="500" to="internal server error"/>
   </state>
   <end g="522,139,48,48" name="ok"/>
   <end g="523,208,48,48" name="bad request"/>
   <end g="522,283,48,48" name="internal server error"/>
</process>

测试代码:

//发起实例
ProcessInstance processInstance = executionService.startProcessInstanceByKey
        ("EndMultiple");
String executionId = processInstance.getId();
processInstance = executionService.signalExecutionById(executionId, "400");//指定转移名称

//断言流程结束
assertTrue(processInstance.isEnded());

在实际应用中,我们经常需要知道流程实例是以何种 “状态” 结束的。为了表明流程实例的结束状态,可以利用 end 活动的 state 属性标识,或者直接利用 jBPM4 提供的特殊 end 活动:end-cancel 活动和 end-error 活动。

属性 类型 默认值 是否必需 描述
state String 可选 state 用来自定义流程实例的状态。可以通过processInstance.getState() 获取。

下面定义了一个拥有不同 end 状态的流程定义:

说说 jBPM 流程定义语言(6)—— end (结束活动)

jPDL:

<?xml version="1.0" encoding="UTF-8"?>

<process key="EndState" name="EndState" xmlns="http://jbpm.org/4.4/jpdl">
   <start g="201,210,48,48" name="start1">
      <transition to="获取返回码"/>
   </start>
   <state g="292,208,124,52" name="获取返回码">
      <transition g="354,159:-22,-21" name="200" to="ok"/>
      <transition g="-1,-24" name="400" to="cancel1"/>
      <transition g="356,314:14,-19" name="500" to="error1"/>
   </state>
   <end g="548,137,48,48" name="ok" state="completed"/>
   <end-cancel g="545,213,48,48" name="cancel1"/>
   <end-error g="542,291,48,48" name="error1"/>
</process>

测试代码:

//发起实例
ProcessInstance processInstance = executionService.startProcessInstanceByKey
        ("EndState");
String executionId = processInstance.getId();
processInstance = executionService.signalExecutionById(executionId, "200");//指定转移名称

//断言流程的实例状态与预期相符
assertEquals("completed", processInstance.getState());
assertTrue(processInstance.isEnded());
相关标签: jBPM 工作流