介绍
触发器是在特定数据操作事件发生之前或之后执行的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("请填写项目开始日期及项目结束日期");
}