1.批量Apex Trigger设计模式
Apex触发器经过优化,可批量运行。
建议使用批量设计模式来处理触发器中的记录。
当使用批量设计模式时,触发器具有更好的性能,消耗更少的服务器资源,并且不太可能超出平台限制。
扩展代码的好处是,扩展代码可以高效地处理大量记录,并在Lightning平台上的调控器限制范围内运行。
这些调控器限制旨在确保失控代码不会垄断多租户平台上的资源。
以下各节演示了在触发器中扩展Apex代码的主要方法:
对触发器中的所有记录进行操作,对Sobject集合而不是一次对单个Sobject执行SOQL和DML。
SOQL和DML批量最佳实践适用于任何Apex代码,包括类中的SOQL和DML。
给出的示例基于触发器并使用Trigger.New上下文变量。
2.在Record Sets上运行:
让我们首先看看触发器中最基本的批量设计概念。
Bulkified触发器操作触发器上下文中的所有Sobject。
通常,如果触发触发器的操作源自用户界面,则触发器会对一条记录进行操作。
但是,如果操作的来源是批量DML或API,则触发器将对记录集而不是一条记录进行操作。
例如,当您通过API导入许多记录时,触发器会对完整的记录集进行操作。
因此,一个好的编程实践是始终假设触发器对记录集合进行操作,以便它在所有情况下都能工作。
以下触发器假定只有一条记录导致触发器触发。
当在同一事务中插入多个记录时,此触发器不适用于完整的记录集。
下一个示例中显示了一个扩展版本。
trigger MyTriggerNotBulk on Account(before insert) {
Account a = Trigger.New[0];
a.Description = 'New description';
}
此示例是修改版本。
它使用for循环迭代所有可用的sObject。
如果Trigger.New包含一个或多个sObject,则此循环有效。
trigger MyTriggerBulk on Account(before insert) {
for(Account a : Trigger.New) {
a.Description = 'New description';
}
}
3.执行批量SOQL:
SOQL查询功能强大。
您可以在一个查询中检索相关记录并检查多个条件的组合。
通过使用SOQL特性,您可以编写更少的代码并对数据库进行更少的查询。
减少数据库查询有助于避免达到查询限制,同步Apex为100个SOQL查询,异步Apex为200个SOQL查询。
下面的触发器显示了要避免的SOQL查询模式。
该示例在for循环中进行SOQL查询,以获取每个帐户的相关机会,该查询在Trigger.New中为每个帐户sObject运行一次。
如果您有一个大的帐户列表,那么for循环中的SOQL查询可能会导致太多的SOQL查询。
下一个示例显示了推荐的方法。
trigger SoqlTriggerNotBu