8、补偿事件
实际上,我们只有对事务应用的补偿图标(参见图8.1),即使bpmn允许其他用途。我们在进程中执行某些任务,这些任务在稍后的某些情况下必须被取消。
图8.1:应用补偿事件。
典型的例子是:
1.订火车票或飞机票
2.预定租车
3.刷卡
4.委托服务提供者
在图8.2中,我们看到了这样一个过程:在周五下午1点,我们同意我们的伴侣去看电影或者和朋友一起过夜。在这两种情况下,我们必须做一些有约束力的事情,要么预订戏票,要么与我们的朋友作出安排。到了晚上,也许我们根本就不想出去了。然后,我们不得不取消与剧院或我们的朋友的活动,在我们可以倒在电视机前的平静。
图8.2:周末可能的流程
我们可以用补偿事件更紧凑地表示模型的后一部分,如图8.3所示。如果我们不想出去,我们就不得不取消所有的安排;我们不需要检查哪些可以取消。
图8.3:与图8.2所示相同的流程应用于补偿事件。
赔偿处理有特殊规则:
1.抛出补偿引用自己的进程,因此事件在池中是有效的。这显示了此事件类型与抛出消息事件的不同之处。
2.其他附加事件只有在它们所附加的活动保持活动状态时才能生效。相反,附加的补偿只有在流程触发补偿且补偿所附加的活动成功完成时才生效。
3.附加的补偿事件通过关联连接到补偿任务,而不是通过序列流连接到补偿任务,否则这将是常见用法。因此,bpmn强调补偿超出了常规的流程顺序;执行一个是异常。
4.强制性补偿任务是一种特殊的任务类型,我们将在2.7节中与其他任务类型一起对其进行解释。
我们的bpmn规则:这个示例可能太简单了,无法说明这个构造可以为您节省多少工作。但是,如果您考虑到经常需要补偿的复杂业务流程,您将看到您的模型可以简化多少。你也会很快发现需要补偿的情况。我们只是偶尔使用补偿事件来描述复杂的流程。BPMN
本文会持续更新,欢迎关注,技术支持:盘古BPM