课程章节介绍
同学们,咱们来看今天这一页 Slide,它讲的是两个和 Territory 2 相关的 Apex 触发器示例。我会用最直白的语言,帮你理解它们干了什么,以及为什么这么做是符合“批量安全模式”的。
我们先看第一个触发器——它是建在 Territory2 这个对象上的。什么时候触发呢?当有新的区域记录被,创建,,或者已有的区域被,删除,时,这个触发器就会跑起来。它的任务,是去维护 Territory2Model(也就是区域模型)上的一个自定义字段,叫 TerritoryCount,用来记录这个模型下面总共有多少个区域。
那它是怎么算的呢?巧妙的地方来了:它没去一条一条数,而是用一个 Map,或者叫“计分板”。每当创建一个区域,就给对应模型的计数器 ,+1,;每当删除一个,就 ,-1,。等触发器里所有的变更都过完一遍,手里就拿着一份“每个模型净增或净减了多少”的记录。最后,只发,一次,批量更新,把所有受影响模型的 TerritoryCount 字段一次性改好。这样,不管你是建了1个区域还是200个区域,都只做一次 DML 操作,效率非常高,这就是批量安全的核心思路。
第二个触发器是建在 UserTerritory2Association 上的,也就是用户和区域的关联表。它只在,插入,后触发,意思是有新的用户被分配到某个区域时,它就动起来。它的目的是通知销售运营团队。它会收集这次插入里所有的新关联记录,把“哪个用户”被添加到了“哪个区域”,以及这个区域属于“哪个模型”,用 String.format 方法拼成一段易读的邮件正文,然后通过 Messaging.sendMail 把这一封邮件发出去。注意,它也是攒齐了信息只发一封邮件,而不是每新增一个关联就发一封邮件去轰炸运营团队的收件箱,同样是批量处理的思想。
这两个触发器,背后都在遵循我们 Apex 开发里必须遵守的,批量安全模式,。简单说就是把所有记录攒在一起处理,不在循环里写 SOQL 查询,也不在循环里做 DML 语句,这样不管一次性来多少条数据,代码都能稳稳地跑,不会撞上 Governor Limits。这个习惯,大家以后写触发器的时候一定要烙在脑子里。
好,这一页就讲到这里,有什么不清楚的随时可以问我。
关键词
Apex
Salesforce
Developer Guide