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