1. 微服务开发
  2. 触发器

华炎魔方 2.4+ 版本支持使用微服务方式开发触发器。 也可以使用 .trigger.js 定义触发器。

定义触发器。

在微服务中定义一个action, 并加上 trigger 参数,相当于定义此action为触发器。

actions: {
    spaceUsersBeforeUpdate: {
        trigger: { 
            listenTo: 'space_users', 
            when: ['beforeInsert', 'beforeUpdate']
        },
        async handler(ctx) {
            this.broker.logger.debug('spaceUsersBeforeUpdate', ctx)
        }   
    }
}

trigger 参数

    trigger: { 
        listenTo: 'space_users', 
        when: ['beforeInsert', 'beforeUpdate']
    },

监听对象

使用 listenTo 参数指定触发器适用的对象。

事件前触发

事件前触发的触发器,可以用于校验用户录入的数据是否正确,如果有问题,可以抛错,错误信息会反馈到前端操作页面;还可以结合权限控制当前操作等。

事件前触发的触发器函数都是以before前缀命名。

  • beforeInsert
  • beforeUpdate
  • beforeDelete
  • beforeFind

事件后触发

事件后触发的触发器,可以用于执行关联的事件,比如任务创建完成后发送通知给指定人员。

事件前触发的触发器函数都是以after前缀命名。

  • afterFind
  • afterInsert
  • afterUpdate
  • afterDelete

触发器执行

触发器执行函数中,可以使用 ctx.params 获得以下变量。

变量用法
isInsert如果此触发器是由于插入操作(从 steedos 用户界面、服务或 API 触发)而触发的,则返回 true。
isUpdate如果此触发器是由于更新操作(从 steedos 用户界面、服务或 API 触发)而触发的,则返回 true。
isDelete如果此触发器是由于删除操作(从 steedos 用户界面、服务或 API 触发)而触发的,则返回 true。
isFind如果此触发器是由于查询操作(从 steedos 用户界面、服务或 API 触发)而触发的,则返回 true。
isBefore如果在操作任何记录之前触发此触发器,则返回 true。
isAfter如果在操作所有记录后触发此触发器,则返回 true。
id记录的唯一标识[string].
doc需要新增/修改的记录内容[json].
previousDoc修改/删除前的记录[json], afterUpdate, afterDelete时存在此属性.
size触发器调用中的记录总数(包括旧记录和新记录)。
userId当前用户唯一标识[string]
spaceId当前工作区[string]
objectName当前对象名称[string]
query查询数据相关参数[json], beforeFind时存在此属性
data查询结果, afterFind时存在此属性