【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によるバッチ処理"