Batchable インターフェース

概要

Batchableインターフェースは、Salesforceにおいて大量のレコードを非同期で処理するためのインターフェースです。特に大量のデータを効率的に処理する必要がある場合や、ガバナ制限を考慮しながら処理を行いたい場合に使用されます。

使い方

Batchableインターフェースを実装するApexクラスは、以下の3つのメソッドを持つ必要があります。

  1. start: このメソッドは、バッチジョブの最初に一度だけ実行され、処理対象となるレコードの範囲やクエリを指定します。
  2. execute: このメソッドは、指定されたレコードの範囲やクエリに基づいて複数回実行されます。実際の処理ロジックをこのメソッド内に記述します。
  3. finish: このメソッドは、バッチジョブの最後に一度だけ実行され、処理の終了後のロジック(例: 通知の送信)を記述します。

以下は、Batchableインターフェースを実装した簡単なサンプルコードです。この例では、すべてのAccountレコードのDescriptionフィールドに”Updated by Batch”というテキストを追加します。

public class AccountUpdateBatch implements Database.Batchable<sObject> {

    // startメソッド: 処理対象となるレコードの範囲やクエリを指定
    public Database.QueryLocator start(Database.BatchableContext bc) {
        return Database.getQueryLocator('SELECT Id, Description FROM Account');
    }

    // executeメソッド: 実際の処理ロジック
    public void execute(Database.BatchableContext bc, List<sObject> scope) {
        List<Account> accountsToUpdate = new List<Account>();
        for (sObject s : scope) {
            Account a = (Account)s;
            a.Description = a.Description + ' Updated by Batch';
            accountsToUpdate.add(a);
        }
        update accountsToUpdate;
    }

    // finishメソッド: 処理の終了後のロジック
    public void finish(Database.BatchableContext bc) {
        // ここに終了後のロジックを記述(例: 通知の送信など)
    }
}

このクラスを実装した後、以下のようにApexからバッチジョブを実行することができます。

AccountUpdateBatch batch = new AccountUpdateBatch();
Database.executeBatch(batch);

どのようなときに使うのか

  1. 大量のレコードの処理: 何万、何百万というレコードを一度に処理する必要がある場合
  2. ガバナ制限の回避: 同期処理ではガバナ制限に引っかかるような処理を、非同期処理として分割して実行したい場合
  3. スケジュールされたジョブ: 特定の時間や周期で自動的に実行されるジョブとしてBatchableインターフェースを使用する場合

まとめ

Batchableインターフェースは、Salesforce開発において大量のデータを効率的に処理するための強力なツールです。適切に実装と使用を行うことで、ガバナ制限を超えることなく、大量のデータを安全かつ迅速に処理することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

雇われのシステムエンジニアです。
普段は車載ECUのセキュリティー分野に従事しております。

■保有資格
Salesforce 認定 Platform アプリケーションビルダー
Salesforce 認定 Platform デベロッパー

コメント

コメントする

目次