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

end 活动用于终结流程。

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

这是一个最简单的包含 end 活动的流程定义:


说说 jBPM 流程定义语言(6)—— end (结束活动)_第1张图片

jPDL:




   
      
   
   

测试代码:

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

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

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

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

说说 jBPM 流程定义语言(6)—— end (结束活动)_第2张图片
多个 end 活动

jPDL:




   
      
   
   
      
      
      
   
   
   
   

测试代码:

//发起实例
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 (结束活动)_第3张图片

jPDL:




   
      
   
   
      
      
      
   
   
   
   

测试代码:

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

//断言流程的实例状态与预期相符
assertEquals("completed", processInstance.getState());
assertTrue(processInstance.isEnded());

你可能感兴趣的:(说说 jBPM 流程定义语言(6)—— end (结束活动))