使用校验器和触发器
什么是校验器和触发器
为什么要用校验器和触发器
使用校验器主要是为了方便对字段做一些简单的规则限制,触发器主要是方便控制一个事务执行的动作。
为对象字段增加校验器(Validator)
- 在对象配置页面,单击“验证规则”页签,再单击“新建”。
图1 新建验证规则
- 输入校验规则,单击“保存”。
图2 编辑校验规则
表1 校验规则参数说明 参数
参数说明
基本信息
- 标签:新建校验规则的标签名,用于展现在配置界面。
- 名称:新建校验规则的名称,单击后自动生成,与标签的值保持一致。
- 描述:新建校验规则的描述信息。
错误条件公式
配置校验公式时,配置的是错误条件。例如,班级编号>200,公式如下:
CNAME__number__CST<=200
规则由公式、字段、运算符组成:
- 单击“字段”,可选择逻辑表达式中涉及的字段。
- 单击“操作符”,可选择表达式中的运算符。
- 单击“公式”后的,选择所需的公式,单击“插入”,即可在表达式中嵌入公式。
错误消息
错误提示信息,可手动输入。
例如,班级编号小于等于200时,提示如下错误。
The class number must be greater than 200
- 在校验规则列表中,单击新建校验规则后的启用开关,启用该条规则。
您也可以单击规则名称,在规则详情页单击“启用”,启用该条规则。图3 启用校验规则
- 验证规则是否正常。
在“布局”页签,单击Records所在操作列的查看图标,预览该页面。在预览页单击“添加”,插入一条191的“number”数据。如何使用布局,请参见如何使用布局增删改查对象数据。图4 报错校验器的错误
为对象配置内嵌触发器
AstroZero支持用户给对象增加内嵌触发器,实现在增/删/改对象的记录数据时,自动执行内嵌触发器脚本(该脚本由用户自定义,其实就是一段普通的TypeScript脚本,没有输入输出参数)。例如,在对象记录插入前、记录插入后、记录更新前、记录更新后、记录删除前或者记录删除后,自动执行内嵌触发器脚本。
下面以之前创建的对象“CNAME__Class__CST”为例,创建一个记录删除后的触发器,实现在删除一条“CNAME__Class__CST”对象的记录后,把相应的“name”、“CNAME__number__CST”数据记录到日志对象“CNAME__log__CST”中。在此需要提前创建如下的日志对象“CNAME__log__CST”,如何创建请参考上一节中对象“CNAME__Class__CST”的创建过程。
对象 |
字段来源 |
字段名称 |
字段数据类型 |
---|---|---|---|
CNAME__log__CST |
自定义字段,手动创建 |
CNAME__operator__CST |
文本,数据长度36。 |
自定义字段,手动创建 |
CNAME__className__CST |
文本 |
|
自定义字段,手动创建 |
CNAME__classNumber__CST |
数字,表示班级编号。 |
- 在对象“CNAME__Class__CST”配置页面,单击“内嵌触发器”页签,再单击“新建”。
图5 新建内嵌触发器
- 输入触发器的基本信息,单击“保存”。
图6 输入信息
表3 内嵌触发器参数说明 参数
参数说明
标签
内嵌触发器在用户界面展示的名称。
名称
内嵌触发器的名称,单击后默认自动生成,与“标签”值保持一致。
事件触发时机
内嵌触发器在什么时候生效,可直接在下拉框中选择。即在系统执行如下某动作时,自动执行触发器的脚本:
- 插入前:记录插入操作前触发。
- 修改前:记录更新操作前触发。
- 删除前:记录删除操作前触发。
- 插入后:记录插入操作后触发。
- 修改后:记录更新操作后触发。
- 删除后:记录删除操作后触发。
描述
内嵌触发器的描述。
- 编写触发器的脚本,其中对象名称、字段名称和之前创建的保持一致。
对象的内嵌触发器脚本,其实就是一段普通的TypeScript脚本,没有输入输出参数。在脚本中可以通过“对象名.字段名”,来访问当前记录的具体字段值。针对“事件触发时机”为“修改前”或者“修改后”的触发器(即触发器脚本执行条件是对象记录更新前、记录更新后),脚本代码中通过“对象名.字段名”获取到的都是当前记录的具体字段值,目前不支持获取更新前的记录值。
//test_delete_trigger import * as db from 'db'; import * as context from 'context'; let name = CNAME__Class__CST.name; let CNAME__number__CST = CNAME__Class__CST.CNAME__number__CST; let logObj = db.dynamicObject('CNAME__log__CST'); logObj.insert({ "CNAME__operator__CST": context.getUserId(), "CNAME__className__CST": name, "CNAME__classNumber__CST": CNAME__number__CST, });
关于脚本的更多说明,请参考脚本开发。
- 编辑后单击上方的,进行保存。
- 保存成功后,单击,启用脚本。
启用后在内嵌触发器列表,可查看到当前触发器状态为“ON”,表示当触发条件满足时,AstroZero会自动执行该触发器脚本。图7 启用触发器
- 验证触发器。
- 在对象“CNAME__Class__CST”配置页面,单击“布局”页签,在“Class Records”后单击。
“对象名 Records”显示对象数据的记录列表。预览该页面可增、删、改、查对象数据。
- 在布局的预览页面,单击“添加”,新增并保存,增加数据,为下一步删除数据做准备。
图8 如何新增数据
- 单击数据所在列的“删除”,删除数据。
图9 删除数据
- 在对象“CNAME__log__CST”配置页面,单击“布局”页签,在“log Records”后单击。
图10 预览Records页面
查看到对象“CNAME__log__CST”数据列表中,已记录一条刚删除的“CNAME__Class__CST”数据,触发器生效。图11 触发器脚本新增的一条数据
- 在对象“CNAME__Class__CST”配置页面,单击“布局”页签,在“Class Records”后单击。