通过编写触发器,可以在记录增删改前和增删改查之后自动触发一段服务端代码,实现个性化的数据校验和处理。
触发器文件名称以.trigger.js结尾,格式如下:
module.exports = {
listenTo: '对象API名称',
beforeInsert: [async] Function,
beforeUpdate: [async] Function,
beforeDelete: [async] Function,
beforeFind: [async] Function,
afterInsert: [async] Function,
afterUpdate: [async] Function,
afterDelete: [async] Function,
}
对象名称,选填。如果没有定义此属性,则取文件名中第一个 . 之前的文字作为listenTo的值,支持通过通配符指向多个对象。
事件前触发的触发器,可以用于校验用户录入的数据是否正确,如果有问题,可以抛错,错误信息会反馈到前端操作页面;还可以结合权限控制当前操作等。
事件前触发的触发器函数都是以before前缀命名。
事件后触发的触发器,可以用于执行关联的事件,比如任务创建完成后发送通知给指定人员。
事件前触发的触发器函数都是以after前缀命名。
所有脚本函数均为无参函数,所属数据可从this
中获取,this
结构如下
id
: 记录的唯一标识[string],userId
: 当前用户唯一标识[string],spaceId
: 当前工作区[string],doc
: 需要新增/修改的记录内容[json],previousDoc
: 修改/删除前的记录[json], //仅afterUpdate, afterDelete时存在此属性object_name
: 当前对象名称[string],datasource_name
: 数据源名称[string],getObject
: function(object_name: string)query
: 查询数据相关参数[json], //仅beforeFind时存在此属性请参考教程 触发器&权限 了解如何在触发器中实现权限判断。
beforeInsert: async function () {
var doc = this.doc
if (doc.code) {
let count = await this.getObject('picklists').count({ filters: [['space', '=', doc.space], ['code', '=', doc.code]] })
if (count > 0) {
throw new Error("唯一编码不能重复");
}
}
},
请参考示例项目 with-object-trigger 了解更多。