更新时间:2024-07-11 GMT+08:00
分享

使用校验器和触发器

什么是校验器和触发器

  • 对象校验器:在向对象中录入记录数据时,为了保证对象数据的有效性,可以定义一些校验规则,对字段值以及各字段之间的逻辑关系进行校验。例如,name字段不能为空,MinPrice字段不能大于maxPrice字段等。
  • 对象触发器:与数据库中的触发器类似,可以为对象定义触发器。在增/删/改对象的记录数据时,自动触发自定义的TypeScript脚本执行。脚本的执行结果将会影响主操作(即增删改记录)的结果,系统保证主操作与触发器在一个事务中执行,要么都成功,要么都失败。

为什么要用校验器和触发器

使用校验器主要是为了方便对字段做一些简单的规则限制,触发器主要是方便控制一个事务执行的动作。

为对象字段增加校验器(Validator)

  1. 在对象配置页面,单击“验证规则”页签,再单击“新建”。

    图1 新建验证规则

  2. 输入校验规则,单击“保存”。

    图2 编辑校验规则
    表1 校验规则参数说明

    参数

    参数说明

    基本信息

    • 标签:新建校验规则的标签名,用于展现在配置界面。
    • 名称:新建校验规则的名称,单击后自动生成,与标签的值保持一致。
    • 描述:新建校验规则的描述信息。

    错误条件公式

    配置校验公式时,配置的是错误条件。例如,班级编号>200,公式如下:

    CNAME__number__CST<=200

    规则由公式、字段、运算符组成:

    • 单击“字段”,可选择逻辑表达式中涉及的字段。
    • 单击“操作符”,可选择表达式中的运算符。
    • 单击“公式”后的,选择所需的公式,单击“插入”,即可在表达式中嵌入公式。

    错误消息

    错误提示信息,可手动输入。

    例如,班级编号小于等于200时,提示如下错误。

    The class number must be greater than 200

  3. 在校验规则列表中,单击新建校验规则后的启用开关,启用该条规则。

    您也可以单击规则名称,在规则详情页单击“启用”,启用该条规则。
    图3 启用校验规则

  4. 验证规则是否正常。

    在“布局”页签,单击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”的创建过程。

表2 CNAME__log__CST”对象的字段

对象

字段来源

字段名称

字段数据类型

CNAME__log__CST

自定义字段,手动创建

CNAME__operator__CST

文本,数据长度36。

自定义字段,手动创建

CNAME__className__CST

文本

自定义字段,手动创建

CNAME__classNumber__CST

数字,表示班级编号。

  1. 在对象“CNAME__Class__CST”配置页面,单击“内嵌触发器”页签,再单击“新建”。

    图5 新建内嵌触发器

  2. 输入触发器的基本信息,单击“保存”。

    图6 输入信息
    表3 内嵌触发器参数说明

    参数

    参数说明

    标签

    内嵌触发器在用户界面展示的名称。

    名称

    内嵌触发器的名称,单击后默认自动生成,与“标签”值保持一致。

    事件触发时机

    内嵌触发器在什么时候生效,可直接在下拉框中选择。即在系统执行如下某动作时,自动执行触发器的脚本:

    • 插入前:记录插入操作前触发。
    • 修改前:记录更新操作前触发。
    • 删除前:记录删除操作前触发。
    • 插入后:记录插入操作后触发。
    • 修改后:记录更新操作后触发。
    • 删除后:记录删除操作后触发。

    描述

    内嵌触发器的描述。

  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,
    });

    关于脚本的更多说明,请参考脚本开发

  4. 编辑后单击上方的,进行保存。
  5. 保存成功后,单击,启用脚本。

    启用后在内嵌触发器列表,可查看到当前触发器状态为“ON”,表示当触发条件满足时,AstroZero会自动执行该触发器脚本。
    图7 启用触发器

  6. 验证触发器。

    1. 在对象“CNAME__Class__CST”配置页面,单击“布局”页签,在“Class Records”后单击

      对象名 Records”显示对象数据的记录列表。预览该页面可增、删、改、查对象数据。

    2. 在布局的预览页面,单击“添加”,新增并保存,增加数据,为下一步删除数据做准备。
      图8 如何新增数据
    3. 单击数据所在列的“删除”,删除数据。
      图9 删除数据
    4. 在对象“CNAME__log__CST”配置页面,单击“布局”页签,在“log Records”后单击
      图10 预览Records页面
      查看到对象“CNAME__log__CST”数据列表中,已记录一条刚删除的“CNAME__Class__CST”数据,触发器生效。
      图11 触发器脚本新增的一条数据

相关文档