Salesforce入门教程(中文)-008 批量trigger、SOQL、DML简介

本文介绍了Salesforce中批量处理Apex Trigger的重要性,强调了使用批量设计模式可以提高性能和降低资源消耗。文章通过实例详细讲解了如何在触发器中批量处理记录,包括在Record Sets上运行、执行批量SOQL和DML的最佳实践,以避免平台限制并优化代码性能。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一秒变桌子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值