课程章节介绍
咱们现在来看看这个触发器的每一行都做了什么。
首先,第一行是触发器的声明。你看,`trigger ApplyDiscount on Book__c (before insert)`。我们给这个触发器起了个名字,叫`ApplyDiscount`;然后告诉系统,这个触发器绑定在`Book__c`这个自定义对象上;括号里的`before insert`是说,当有新书记录,要插入数据库之前,,这个触发器就运行起来。所以它是在数据落盘的前一刻触发的。
那它触发之后,要做的事写在下面。这里有一句`MyHelloWorld.applyDiscount(Trigger.New);`。这是什么意思呢?其实就是调用了一个叫`applyDiscount`的方法,咱们可以想象它是个提前写好的折扣处理工具。而我们传进去的`Trigger.New`,是每个触发器都自带的上下文变量,它就像个篮子,里面装着所有即将插入的新书。也就是说,当有书要进来时,我们把这个“新书篮子”整个交给折扣方法去处理。
这里要特别注意一个概念:触发器是,批量运行,的。可能你一次插入一本书,也可能一次插入好几本,但触发器跑起来时,都是在这一个事务里,同时处理整体的那批记录。所以`Trigger.New`里可能不止一本书。
那在`applyDiscount`这个方法内部,通常就会使用,循环,,比如`for (Book__c oneBook : books)`,把篮子里每本书一一取出来,逐个去应用折扣。这样一来,不管这次进来一本书还是两百本书,都能被同样的逻辑正确地处理到。
总结一下,这段代码最核心的工作流程就是:每次有书要入库之前,拦截它们,把所有新书一股脑交给折扣方法,由那个方法逐个处理,处理完之后才正式存入数据库。
好了,这张slide的内容我们就说到这里。
关键词
Apex
Salesforce
Developer Guide