Skip to main content

触发器

介绍

触发器是在特定数据操作事件发生之前或之后执行的Java代码,例如在将对象记录插入数据库之前,或在删除记录之后。

进入触发器开发页面

  • 登录系统,点击右上角人头像,选择开发者平台按钮,此按钮目前只开放给管理员简档用户。
  • 选择左侧:扩展——》触发器

说明及语法介绍

  • 名称:汉字说明,触发器完成的功能
  • 触发对象:在什么对象上执行触发器操作
  • 触发时间:
    • beforeInsert:当新建、复制记录行满足触发器条件,执行触发器操作
    • beforeUpdate:编辑记录行满足触发器条件,执行触发器操作
    • beforeUpsert:新建和编辑、复制记录行满足触发器条件,执行触发器操作
    • beforeDelete:删除记录行满足触发器条件,执行触发器操作
    • afterInsert:新建、复制记录行满足触发器条件,执行触发器操作
    • afterUpdate:修改记录行满足触发器条件,执行触发器操作
    • afterUpsert:新建或编辑、复制记录行满足触发器条件,执行触发器操作
    • afterDelete:删除记录行满足触发器条件,执行触发器操作
💡
注:before是本记录生成之前触发,after是本记录生成之后可以取到记录id进行其他相关列表的带值操作
  • 基本语法:
语法 返回值 含义
record_new.get("字段API") String 获取记录中字段的最新值
record_new.put("字段API","字段值") 为记录的某字段赋值
record_old.get("字段API") String 获取记录中字段的前一个值
record_old==null 可在触发时间=beforUpsert或afterUpsert时,识别为新建操作
trigger.addErrorMessage("提示内容") 在记录中保存前用于提示

如何创建触发器?

  • 创建触发器有如下二种方式创建:
    • 方法一:通过点击系统右上角 “ 齿轮设置图标 ” 进入系统管理后台,在扩展—》触发器—》点击 新建
    • 方法二:进入要创建触发器对象的后台设置,将滚动条下拉到最底部,可在触发器部分,点击 新建

案例

  • 案例1:
    • 查询赋值需求:将项目对象中的当前项目经理的邮箱信息带入本对象中
    • 触发事件:beforeUpsert
    • 代码逻辑:
String managerId=record_new.get("project_manager")==null?"":record_new.get("project_manager")+"";//获取字段新值
String managerId_old=record_old==null||record_old.get("project_manager")==null?"":record_old.get("project_manager")+"";//获取字段的前一个值
//项目经理字段新值和老值不相同时判定为该字段值发生改变,需重新查询用户表获取邮箱带到本记录中
if(!managerId.equals(managerId_old)){
  List<CCObject> userlist=cquery("User","id='"+managerId+"'");
  if(userlist.size()>0){
    String email=userlist.get(0).get("email")==null?"":userlist.get(0).get("email")+"";
    record_new.put("email",email);
  }
}
  • 案例2:
    • 复杂校验需求:项目经理不为空的时候,项目开始日期、项目结束日期必填
    • 触发时间:beforeUpsert
    • 代码逻辑:
String managerId=record_new.get("project_manager")==null?"":record_new.get("project_manager")+"";//获取字段新值
String start_date=record_new.get("start_date")==null?"":record_new.get("start_date")+""; //项目开始日期
String end_date=record_new.get("end_date")==null?"":record_new.get("end_date")+"";//项目结束日期
if(!"".equals(managerId)&&("".equals(start_date)||"".equals(end_date))){
   trigger.addErrorMessage("请填写项目开始日期及项目结束日期");
}