この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Apex 一括処理

Apex 一括処理クラスを使用すると、レコードをバッチ単位で非同期に一括処理できます。データの整理やアーカイブなど、処理するレコードの数が多い場合、Apex 一括処理が適しています。一括処理クラスを呼び出すごとに、ジョブは Apex の実行待ちジョブキューに置かれます。

一括処理クラスの実行ロジックは、レコードのバッチごとに 1 回コールされます。デフォルトのバッチサイズは 200 レコードです。カスタムバッチサイズも指定できます。さらに、各バッチ実行は、別個のトランザクションとみなされます。新しいレコードのバッチごとに、新しいガバナ制限のセットが適用されます。このため、コードをガバナ実行制限内に抑えやすくなります。一括処理が別個のトランザクションとして扱われることのもう 1 つの利点は、レコードのバッチの部分処理が可能になることです。あるバッチの処理が失敗した場合でも、正常に処理された他のすべての一括処理トランザクションが影響を受けたり、ロールバックされたりすることはありません。

Apex 一括処理構文

Apex 一括処理クラスを記述するには、クラスに Database.Batchable インターフェースを実装する必要があります。クラス宣言には、implements キーワードに続けて Database.Batchable<sObject> を含める必要があります。次に例を示します。
1global class CleanUpRecords implements Database.Batchable<sObject> {
さらに次の 3 つのメソッドも実装する必要があります。
  • start メソッド
    1global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContext bc) {}

    start メソッドは、Apex 一括処理ジョブの開始時にコールされます。このメソッドは、インターフェースメソッド execute に渡すレコードまたはオブジェクトを収集します。

  • execute メソッド:
    1global void execute(Database.BatchableContext BC, list<P>){}

    execute メソッドは、メソッドに渡すレコードのバッチごとにコールされます。データの処理単位ごとに必要な処理をすべて実行する場合に、このメソッドを使用します。

    このメソッドは次を取得します。
    • Database.BatchableContext オブジェクトへの参照。
    • List<sObject> などの sObjects のリスト、またはパラメータ化された型のリスト。Database.QueryLocator を使用している場合は、返されたリストが使用されます。

    レコードのバッチが start メソッドから受け取った順序で実行される保証はありません。

  • finish メソッド
    1global void finish(Database.BatchableContext BC){}

    finish メソッドは、すべてのバッチが処理された後にコールされます。確認メールの送信や後処理操作を行う場合に、このメソッドを使用します。

一括処理クラスの呼び出し

一括処理クラスを呼び出すには、最初に一括処理クラスをインスタンス化し、一括処理クラスのインスタンスを使用して Database.executeBatch をコールします。
1BatchClass myBatchObject = new BatchClass();
2Database.executeBatch(myBatchObject);

このチュートリアルの各ステップでは、一括処理クラスの作成とテストの方法、および一括処理ジョブを呼び出す方法を学習します。