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

end 活动用于终结流程。

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

这是一个最简单的包含 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 活动,这样可以通过事件机制来触发不同的结束方式:

多个 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 活动。

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

下面定义了一个拥有不同 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());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值