数据库事件

数据库事件类型将监听数据表的增删改事件,当发生对该表的数据操作且满足配置的条件时,触发对应工作流。例如新增订单后扣减商品的库存,新增一条评论后等待人工审核等场景。

基本使用

数据表的变动有几种情况:

  1. 新增数据后。
  2. 更新数据后。
  3. 新增或更新数据后。
  4. 删除数据后。

可以根据业务的不同需要选择监听的时机。

数据库事件监听后会在触发的工作流执行计划中注入产生事件的数据行作为触发上下文数据,以供后续流程中的节点作为变量调用。但当后续节点中希望使用该数据的关系字段时,需要先配置对关系数据的预加载,选中的关系数据将会在触发后一并注入到上下文中,且可被按层级进行选择使用。

相关提示

暂不支持批量数据操作触发

数据库事件事件暂不支持批量数据操作的监听,例如新增文章数据时同时新增的该文章的多个标签数据(对多关系数据),将仅能监听对文章新增的事件,而同时新增的多个标签将不会触发新增标签的事件源。多对多关系数据的关联和新增时,也不会监听中间表的事件源。

非应用内的数据操作不会触发

通过 HTTP API 调用应用接口对数据表的操作也可以触发相应事件,但如果不通过应用,而是直接通过数据库操作产生的数据变动,就无法监听相应事件。比如数据库中本身的监听不会与应用中的事件源监听产生关联。

另外,使用 SQL 操作节点对数据库进行操作相当于直接操作数据库,事件源也不会监听。

外部数据源

工作流从 0.20 开始支持外部数据源,如果使用了外部数据源插件,并且数据表事件配置的是外部数据源,只要对该数据源的数据操作是在应用内完成的(用户新增、更新和工作流数据操作等),都可以监听对应的数据库事件。但如果数据变动是通过其他系统或直接在外部数据库内变更的,则无法监听事件。

示例

以新增一个订单后计算总价并扣减库存的场景举例。

首先,我们创建商品表和订单表,数据模型如下:

字段名称字段类型
商品名称单行文本
价格数字
库存整数
字段名称字段类型
订单号自动编号
订单商品多对一(商品)
订单总价数字

并添加基础的商品数据:

商品名称价格库存
iPhone 14 Pro799910
iPhone 13 Pro59990

然后创建一个基于订单数据表事件的事件源:

![数据表事件_示例_新增订单触发]

其中的几个配置项:

  • 名称: 事件源名称。
  • 工作流: 需要触发执行的工作流。
  • 类型: 数据库事件。
  • 选项:
    • 数据表: 留空。
    • 数据表事件: 留空。
    • 事件名称: 表名+需要监听的钩子事件

之后根据流程的逻辑配置工作流其他节点,检查商品库存是否大于 0,大于 0 的扣减库存,否则订单无效删除订单:

节点的配置会在具体类型的介绍文档中详细说明。

启用该事件源,并通过界面新增订单来测试。