bpmn2补偿

时间:2014-12-28 12:39:40

标签: workflow bpmn

我对bpmn2中投掷/捕捉/处理补偿事件的机制有疑问。 根据{{​​3}}中的Travel Booking Example,我们有compensation intermediate throwing eventscompensation boundary eventscompensation handler。我在这个图中连接了投掷和捕获补偿事件(我对事件的了解):

Travel Booking Process

这是对的吗?补偿(预订)是否可以从已结束的子流程(预订)之外抛出,并在其中激活compensation event sub-process(处理补偿)? (绿色箭头)

1 个答案:

答案 0 :(得分:0)

我的假设不正确。基于activiti documentation

补偿边界事件与其他边界事件具有不同的激活策略。其他边界事件(例如信号边界事件)在启动它们所附加的活动时被激活。当活动离开时,它们被停用并且相应的事件订阅被取消。补偿边界事件是不同的。 补偿边界事件在附加的活动成功完成时激活。此时,创建对补偿事件的相应订阅。在触发补偿事件或相应的流程实例结束时,将删除订阅。从此,它将遵循:

当触发补偿时,与补偿边界事件关联的补偿处理程序的调用次数与成功完成附加的活动的次数相同。 如果将补偿边界事件附加到具有多个实例特征的活动,则会为每个实例创建补偿事件订阅。 如果补偿边界事件附加到循环内包含的活动,则每次执行活动时都会创建补偿事件订阅。 如果流程实例结束,则取消对补偿事件的订阅。

子流程中的薪酬事件处理程序是相同的。

因此,给定图中红色和橙色箭头的目标应该是补偿任务:cancel flightcancel hotel