【Salesforce】Apexによるバッチ処理

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です