Calculate Trigger — Bulk Processing Pattern

DEX455 - 测试 Shipping Invoice 应用:完整示例与最佳实践总结

📄 第 470 页 🎬 视频课程

课程章节介绍

同学们,大家好,今天我们来讲一个非常经典的Apex触发器模式,你可以把它叫做“计算触发器”,幻灯片上展示的就是这个批量处理的基本样板。 这个触发器最巧妙的地方在于,它充分利用了触发器上下文里的 `Trigger.new` 和 `Trigger.old`。对插入和更新操作,它直接去 `Trigger.new` 里拿全新的记录;而对于删除操作,它就去 `Trigger.old` 里拿那些即将被删掉的数据。同时呢,它还引入了一个“减法标志”,通俗点说就是一个方向指示,用来判断到底是要加总金额,还是要减总金额,这样就能灵活应对增、删、改不同的事件了。 紧接着,它就进入最关键的批量思维环节。它没有一条条地去处理记录,而是先把所有相关的运输发票ID,不管是新的还是旧的,全部收集到一个集合里。然后,它用一句 SOQL,配合 `IN` 条件,一次性把所有要调整的发票记录查出来。这有什么好处呢?它彻底绕开了一个大坑,就是在循环里面执行 SOQL 查询。如果一条记录就查一次,数据一多,立刻就会撞上 Salesforce 的调控器限制,程序就崩了。而这里,一次查询搞定所有,非常安全。 把发票记录查出来之后,这个触发器还特别严谨。它先用断言声明来验证一下数据,确保我们拿到的记录和期望的状态一致,这就像给自己上了一道保险。接着,它就在内存里批量计算,把发票的总额重新算一遍。它算得很细,包括了细项金额、重量、折扣、税费,最后汇总出一个明确的总计。 整个模式从始至终都遵守所有的调控器限制,不管一次进来多少条记录,它都能高效、稳定地处理。这就是我们常说的“批量触发器模式”,你在实际开发中一定要学会并多用它。 好,关于这个Slide的内容,我们就先聊到这儿。下节课见!

关键词

Apex Salesforce Developer Guide