课程章节介绍
同学们,今天我们一起看一下批量处理Apex。简单来说,批量Apex能把海量数据拆成一小块、一小块来分别处理,这样既不会超时,也不会突破平台的各种限制。
要想使用批量处理,你的类必须实现一个叫 Database.Batchable 的接口。这个接口定义了三个核心方法:start、execute 和 finish。
第一个方法是 start。它的任务是收集需要处理的数据。你可以返回两种东西:一种是 Database.QueryLocator,它其实就是一个查询定位器,能用一条 SOQL 语句直接圈定最多五千万条记录,而且不会受普通事务里五万条 SOQL 行数的限制;另一种是返回一个 Iterable,也就是一个自定义的可迭代集合,但这时就会受到五万条 SOQL 行数限制的约束,所以一般用于从外部系统导入数据这种场景。
第二个方法是 execute。这个方法会真正处理每一块数据。参数里拿到的 scope 就是一个批次的记录列表,默认是两百条。关键的一点是,每一次 execute 执行开始的时候,Salesforce 上的调控器限制,也就是 governor limits,会被重置。所以每个批次都能拥有自己全新的限制额度,不用担心上一批把 CPU 时间或查询次数用完。
第三个方法是 finish。它负责收尾,在所有批次都处理完之后执行。你可以在这里发送总结邮件、做数据清理或者启动下一个批处理作业,非常适合做后处理通知。
此外,这三个方法都会传进来一个叫 BatchableContext 的上下文变量。这个上下文可提供 getJobID 方法,拿到这个任务 ID 后,你可以再去查询 AsyncApexJob 对象,就能随时监控作业的执行状态,比如失败了没有、处理了多少记录、还剩多少批等等。
最后,一个经典的例子就是 SearchAndReplace 模式。思路特别简单:在 start 里查询出要修改的记录,在 execute 里把特定字段值替换成新值,最后在 finish 里发邮件通知管理员任务完成。整个流程就是查询、更新、批处理这三步,学了它你就迈出批量Apex的第一步了。
关键词
Apex
Salesforce
Developer Guide