【Salesforce】Apexによるバッチ処理
Salesforceで定期的に実行するバッチ処理を久しぶりに書きました。
「Database.Batchable」インターフェースを継承することで作成できます。
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_batch_interface.htm
「Database.Batchable」インターフェースには「start」「execute」「finish」のメソッドが定義されています。
executeメソッドの第二引数はSObject型のリストなので、下のような記述も可能です。
global class TestBatch implements Database.Batchable<sObject>{
/**
* 開始処理
* バッチ処理対象のレコードを取得するための
* クエリロケーターを返す
*/
global Database.QueryLocator start(Database.BatchableContext BC){
String query = '';
query = 'select Id, Name from Account';
return Database.getQueryLocator(query);
}
/**
* 実行処理
* startメソッドのクエリから取得したレコードを処理する
*/
global void execute(Database.BatchableContext BC, List<Account> accountList){
// 取得したレコードに対して処理を行う
for(Account acc : accountList){
// 各レコードに処理を行う
}
update accountList;
}
/**
* 終了処理
* バッチ処理完了のメールを飛ばしたりする
*/
global void finish(Database.BatchableContext BC){
}
}
呼び出し方法も記述します。
第二引数でバッチサイズを設定しています。
// バッチクラスをインスタンス化する TestBatch batch = new TestBatch(); // バッチ処理を行う Database.executeBatch(batch, 5);
スケジューリングする場合は「Schedulable」クラスを継承したクラスを使用します。
One Response to "【Salesforce】Apexによるバッチ処理"