apexでバッチを走らせる場合は、デフォルトでの200件ごとに処理を走らせる場合が多いけれれど、
その時に処理の中でカウントアップしたデータを次の処理に引き継ぎたかった。
結論から言うと、 Database.Stateful
を使うと、データの内容を保持した状態でバッチが走らせられた。
具体的には以下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| public with sharing class Hogehoge_Batch implements Database.Batchable<sObject>, Database.Stateful{
private Integer count {get; set;}
public Hogehoge_Batch(Boolean isLastBatch){
this.count = 0;
}
public Database.QueryLocator start(Database.BatchableContext BC){
String query = 'select id from Lead';
return Database.getQueryLocator(query);
}
public void execute(Database.BatchableContext BC, List<Lead> scope){
for(Lead user : scope){
user.count__c = this.count;
this.count++;
}
update scope;
}
public void finish(Database.BatchableContext BC){
}
}
|
クラス定義の1行目の最後にくっついてる。
これがないとcount
は毎回リセットされてしまう。
参考
SFDC:【大量データ処理】Apex Batchで一括更新処理を確認してみました – tyoshikawa1106のブログ
State Management In Batch Apex in Salesforce