概要
Batchable
インターフェースは、Salesforceにおいて大量のレコードを非同期で処理するためのインターフェースです。特に大量のデータを効率的に処理する必要がある場合や、ガバナ制限を考慮しながら処理を行いたい場合に使用されます。
使い方
Batchable
インターフェースを実装するApexクラスは、以下の3つのメソッドを持つ必要があります。
- start: このメソッドは、バッチジョブの最初に一度だけ実行され、処理対象となるレコードの範囲やクエリを指定します。
- execute: このメソッドは、指定されたレコードの範囲やクエリに基づいて複数回実行されます。実際の処理ロジックをこのメソッド内に記述します。
- 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);
どのようなときに使うのか
- 大量のレコードの処理: 何万、何百万というレコードを一度に処理する必要がある場合
- ガバナ制限の回避: 同期処理ではガバナ制限に引っかかるような処理を、非同期処理として分割して実行したい場合
- スケジュールされたジョブ: 特定の時間や周期で自動的に実行されるジョブとして
Batchable
インターフェースを使用する場合
まとめ
Batchable
インターフェースは、Salesforce開発において大量のデータを効率的に処理するための強力なツールです。適切に実装と使用を行うことで、ガバナ制限を超えることなく、大量のデータを安全かつ迅速に処理することができます。
コメント