Database.Stateful を使うと、データの内容を保持した状態でバッチが走らせられた
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は毎回リセットされてしまう。
-
Previous
Salesforce Selecting compound data not supported in Bulk Query -
Next
Salesforce Web To Lead リードの「取引の開始」時にトリガを実行する方法