触发器

对于记录的增删改操作,可设定自动执行的脚本。同一个事件可以定义多个trigger。

文件名称以.trigger.js结尾

触发器模板:

module.exports = {
listenTo: '对象名称',
beforeInsert: [async] Function,
beforeUpdate: [async] Function,
beforeDelete: [async] Function,
afterInsert: [async] Function,
afterUpdate: [async] Function,
afterDelete: [async] Function,
}

文件内容说明:

  • listenTo: 对象名称,选填。如果没有定义此属性,则取文件名中第一个 . 之前的文字作为listenTo的值
  • beforeInsert: 数据新增前执行, 选填
  • beforeUpdate: 数据修改前执行, 选填
  • beforeDelete: 数据删除前执行, 选填
  • beforeFind : 查询数据之前执行, 选填
  • afterInsert: 数据新增后执行, 选填
  • afterUpdate: 数据修改后执行, 选填
  • afterDelete: 数据删除后执行, 选填

参数说明:

所有脚本函数均为无参函数,所属数据可从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时存在此属性

脚本返回值:

  • 如果return的是false,则中断操作,如在before.insert里return false,则不执行insert操作。

触发器实例picklists.trigger.js

const Filters = require('@steedos/filters');
module.exports = {
listenTo: 'picklists',
beforeFind: function(){
let userId = this.userId;
let spaceId = this.spaceId;
if(userId && spaceId){
//获取原始的查询条件
let filters = this.query.filters;
//自定义生成用户权限查询条件
const permissionsFilters = [
[ "owner", "=", userId],
"or", [ "submitter", "=", userId],
"or", [ "applicant", "=", userId]
];
//修改查询条件; formatFiltersToODataQuery函数将数组形式的filters转换为字符串filters
this.query.filters = `(${filters}) and (${Filters.formatFiltersToODataQuery(permissionsFilters)})`
}
}
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("唯一编码不能重复");
}
}
},
beforeUpdate: async function () {
var doc = this.doc
var id = this.id
if (_.has(doc, 'code')) {
let dbDoc = await this.getObject('picklists').findOne(id, { fields: { space: 1 } });
if (dbDoc) {
let count = await this.getObject('picklists').count({ filters: [['_id', '<>', id], ['space', '=', dbDoc.space], ['code', '=', doc.code]] })
if (count > 0) {
throw new Error("唯一编码不能重复");
}
}
}
}
}
对于华炎魔方有疑问??
微信扫描二维码,我们的技术专家会为您解答。

我们的技术专家拥有十年以上的管理软件开发经验,无论您询问有关华炎魔方的功能、定价、实施或任何其他方面的问题,他们都将随时准备为您提供帮助。

华炎魔方

华炎魔方是新一代低代码平台,基于商业智能和模型驱动,可以按照业务部门的需求,轻松便捷地创建智能化、移动化、个性化的应用程序。

© 2020 华炎软件. 保留所有权利.