Apex Trigger允许你在记录DML前以及后进行一些自定义的操作。比如做一些校验,发送邮件等等。trigger可以在以下的操作中进行before/after的逻辑操作:insert / update / delete / merge / upsert / undelete。通常我们针对一个表只使用一个trigger,去完成所有的相关的逻辑。Trigger中有before / after概念,两者使用场景如下:
一言以蔽之,trigger用于在数据执行DML的前后做一些系统通用的数据的自定义逻辑操作。
trigger的定义如下代码所示,其中 trigger_events包括以下:
trigger TriggerName on ObjectName (trigger_events) {
code_block
}
我们可以在trigger中针对这些trigger的事件进行自定义逻辑的编码。Trigger核心的内容是Trigger的上下文可以使用的变量。信息如下所示:
变量名称 | 使用场景 | 考虑点 |
---|---|---|
isExecuting | 如果当前apex code执行的上下文是trigger的场景,则 isExecuting为true,如果为其他场景,则为false(比如lwc调用apex) | |
isInsert | 当前的数据操作是正在执行insert操作 | |
isUpdate | 当前的数据操作是正在执行update操作 | |
isDelete | 当前的数据操作是正在执行delete操作 | |
isBefore | 当数据保存以前的阶段,则为true | |
isAfter | 当数据在保存以后的阶段,则为true | |
isUndelete | 当前数据操作是回收站回滚这条数据操作 | |
new | 返回当前的最新版本数据的列表 | Trigger.new仅能用于 before insert/update/undelete |
newMap | 返回当前的最新版本数据的Map,其中key是当前记录的ID,value是当前最新版本数据的引用 | 仅能用于before update / after insert / after update / after undelete |
old | 返回当前的前一个版本数据的列表 | 仅用于 update和delete场景 |
oldMap | 返回前一个版本数据的Map,其中key是当前记录的ID,value是前一个版本数据的引用 | 仅用于 update和delete场景 |
operationType | 返回枚举值,用来记录当前的trigger执行状态的类型。可选值有BEFORE_INSERT, BEFORE_UPDATE, BEFORE_DELETE,AFTER_INSERT, AFTER_UPDATE, AFTER_DELETE, and AFTER_UNDELETE. | |
size | trigger调用的总记录数 |