JeecgFlow补偿事件

事件定义

当一个流程操作完成后,其结果可能不合符预期,这时可以使用补偿机制对已经完成的操作流程进行补偿处理。

补偿事件主要用于触发补偿机制。

如需在线体验文章的案例演示,请访问JeecgFlow

边界事件

补偿边界事件可为所依附的流程活动附加补偿处理器,补偿处理器通过单项关联补偿边界事件。 补偿边界事件在流程活动

完成后根据实际情况出发,当补偿边界事件被触发时,执行它所连接的补偿处理器。
补偿边界事件必须通过直接引用设置唯一的补偿处理器

补偿边界事件与其他边界事件的行为策略不同,其他边界事件(如信号事件)在流程流转到所依附的活动时被激活,在流程活动结束时结束,

并且对应的事件订阅也会被取消,而补偿边界事件在所依附的活动结束后才被激活,并且创建相应的事件边界订阅,在补偿边界触发或对应流程

实例结束时,事件定于才会被删除。

复制代码
补偿边界事件一般在两种情况下被触发:
1.由补偿中间抛出事件触发补偿边界事件。
2.事务子流程被取消,导致依附在事务子流程上的补偿边界事件被触发

补偿边界事件所产生的订阅数据(ACT\_RU\_EVENT\_SUBSCR)不会被删除(直到补偿边界事件触发或流程实例结束)。
因为即使流程活动完成了,所依附的补偿边界事件仍有可能被触发。

*   当补偿被触发时,所有已完成的活动所依附的补偿边界事件对应的补偿处理器将被吊用,如果补偿边界事件所依附的活动尚未产生历史任务,则不会被触发
*   如果补偿边界的活动完成N次,则补偿边界触发后,这些补偿边界的执行次数与活动完成次数想等。
*   如果补偿事件依附在多实例活动上,则会为每个实例创建补偿事件订阅,补偿边界事件被触发的次数与所所依附活动的循环多实例的成功完成次数想等。
*   如果流程实例结束,订阅的补偿事件都会结束
*   边界补偿事件不支持依附在内嵌的子流程中

中间抛出事件

补偿中间抛出事件用于触发补偿,当流程流转到补偿中间抛出事件时触发该流程已完成活动的边界补偿事件,

完成补偿操作后沿着中间抛出事件的外出顺序流继续流转。

::: warning

补偿中间抛出事件主要用于触发补偿,可用于指定活动或包含补偿事件的作用域触发补偿,通过执行与活动相关联的补偿

处理器来执行补偿。并遵循以下规则:

  • 针对某项活动进行补偿,则相关补偿处理器的执行次数与活动的完成次数想等。
  • 如果针对当前作用域进行补偿,则对当前作用域内的所有活动进行补偿,包括并行分支上的活动功。
  • 补偿是分级触发,如果补偿的活动是子流程,则为子流程中包含的所有活动触发补偿。如果自流程包含嵌套的活动,则补偿事件会递归的向下抛出,但
    补偿事件不会传播到比该流程高的层级,如果补偿在子流程触发,不会传播到子流程作用域外的活动上。
  • 触发补偿时,补偿的执行次序与流程的执行顺序相反,这意味着最后完成活动最新执行。以此类推。
  • 补偿中间抛出事件可以用于补偿已经完成的事务子流程
  • 当多实例活动抛出补偿时,只有当所有实例都结束了,相关的补偿处理器才会执行。这意味着多实例活动在被补偿前必须先结束。
  • 补偿不会传播给调用活动创建的子流程实例
    :::

演示案例

在用户任务节点,选择余额不足,得到上面补偿中间抛出事件的执行结果。点击Activiti演示站

在用户任务节点,选择资金充足,流程不会流转到补偿中间抛出事件。点击Activiti演示站

如果补偿被一个子流程的作用域触发,并且子流程包含带有补偿处理器的活动,则只有当子流程结束后,并且有补偿事件抛出时,

才会执行子流程中的补偿。如果子流程某些活动附加补偿处理器,但包含这些活动的子流程尚未结束,则补偿不会被执行。

上述案例"取消正式报名"服务任务的执行失效的情况:

  1. 银行卡支付失败,抛出补偿中间事件,但子流程尚未结束。

  2. 子流程"报名审核"用户任务在"取消报名"事件抛出之前完成,子流程已结束。

    "取消预报名"在以上两种情况均会被执行。

相关推荐
鱼日先生2 天前
Dify 中级实验(13):多 Agent 协作——如何编排多个智能体分工干活?
工作流·dify·ai agent·大模型应用·ai 训练
鱼日先生3 天前
Dify 中级实验(14):对话变量与状态管理——如何让工作流记住多轮对话的状态?
工作流·dify·ai agent·大模型应用·ai 训练
鱼日先生5 天前
Dify 中级实验(04):迭代进阶——如何批量处理数据并守住性能边界?
agent·工作流·dify
鱼日先生5 天前
Dify 中级实验(05):并行执行——如何让多路任务同时跑?
agent·工作流·dify
小七-七牛开发者6 天前
Agent 小知识|长任务不重来:Agent 状态保存的工程设计
ai·大模型·agent·claude·token·工作流·skill·claudecode·ai coding
小七-七牛开发者7 天前
“打透” Harness:用 GitHub Copilot 跑通从原型、规划到实现与评审的 AI Coding 工作流
ai·大模型·agent·token·工作流·claudecode·ai coding
千桐科技8 天前
qKnow 开源版 v2.4.0 发布:新增 MCP 远程工具管理,打通 Agent 与外部服务
开源·llm·agent·工作流·mcp·qknow·智能体构建平台
thesky12345612 天前
智能体面试准备(九):工作流编排——DAG 与状态机两种范式的取舍与手写实现
面试·agent·状态机·工作流·智能体
大龄码农有梦想14 天前
传统的 BPMN 工作流审批和 AI 工作流有什么区别?
人工智能·流程引擎·工作流·ai agent·ai工作流·审批流·智能体平台
EIP低代码平台16 天前
EIP低代码平台 - 应用管理 - 表单设计
低代码·c#·权限·工作流·netcore