Trigger Context Variables

DEX455 - 运行 Apex:匿名块、触发器与执行顺序完全指南

📄 第 230 页 🎬 视频课程

课程章节介绍

同学们,今天咱们来看看 Salesforce 里触发器自带的那些“隐式变量”。这些变量都是系统在 `System.Trigger` 这个类里帮咱们定义好的,写触发器时可以直接拿来用,不用自己声明。 先说说几个布尔类型的“上下文变量”,它们就像开关一样,能告诉你当前这个触发器正处在什么状态。比如 `isExecuting`,只要触发器代码正在跑,它永远都是 `true`。其他的呢:`isInsert` 表示现在是插入记录,`isUpdate` 是更新,`isDelete` 是删除。`isBefore` 和 `isAfter` 能区分是在保存前还是保存后触发。还有一个 `isUndelete`,代表是从回收站恢复记录。有了这些,你就能在代码里精确地判断当前到底是什么操作、哪个时机,再做出相应的处理。 接下来看记录集合。最常用的就是 `Trigger.new`,里面装着当前这一批要处理的新记录。注意哦,你只能在“保存前”的触发器里修改 `Trigger.new` 里的字段值,一旦到了“保存后”,它就变成只读的了。而 `Trigger.old`,不管在什么时候,都是只读的,它存的是这批记录修改前、或者被删除前的旧数据。如果处理的是列表形式的记录,还有 `Trigger.newMap` 和 `Trigger.oldMap`,它们是把记录映射成了 ID 到记录的格式,方便你通过记录 ID 快速找到记录。同样,`oldMap` 也只读。 还有一个 `Trigger.operationType`,它会返回一个枚举值,比如 `TriggerOperation.INSERT`、`TriggerOperation.UPDATE` 等等。这个特别适合在 `switch` 语句里使用,可以让你的代码更清晰地把不同操作类型的逻辑分开。 再说一个 `Trigger.size`,它返回的是当前触发器正在处理的记录批次里一共有多少条记录,这个在做限制检查的时候很实用。 最后提一个实用小技巧:`Trigger.new` 可以直接用作 SOQL 查询里 `IN` 子句的绑定变量。因为 `Trigger.new` 是 `List` 类型,所以你可以写出像 `[SELECT Id, Name FROM Account WHERE Id IN :Trigger.new]` 这样的查询,不用自己先建一个 ID 列表,很方便。 好啦,这一页的内容就这些,都理解了的话,以后写触发器就能更得心应手了。

关键词

Apex Salesforce Developer Guide