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

Apex 一括処理クラスの追加

このレッスンでは、Database.Batchable インターフェースを実装する Apex 一括処理クラスを作成します。この一括処理クラスは、start メソッドで渡されるレコードをクリーンアップします。

  1. 開発者コンソールで、[File (ファイル)] | [New (新規)] | [Apex Class (Apex クラス)] をクリックします。
  2. クラス名として「CleanUpRecords」と入力し、[OK] をクリックします。
  3. 自動生成されたコードを削除し、次のコードを追加します。
    1global class CleanUpRecords implements 
    2   Database.Batchable<sObject> {
    3
    4   global final String query;
    5   
    6   global CleanUpRecords(String q) {
    7       query = q;
    8   }
    9
    10   global Database.QueryLocator start(Database.BatchableContext BC){
    11      return Database.getQueryLocator(query);
    12   }
    13   
    14   global void execute(
    15                Database.BatchableContext BC, 
    16                List<sObject> scope){
    17      delete scope;
    18      Database.emptyRecycleBin(scope);
    19   }
    20
    21   global void finish(Database.BatchableContext BC){
    22       AsyncApexJob a = 
    23           [SELECT Id, Status, NumberOfErrors, JobItemsProcessed,
    24            TotalJobItems, CreatedBy.Email
    25            FROM AsyncApexJob WHERE Id =
    26            :BC.getJobId()];
    27                          
    28       // Send an email to the Apex job's submitter 
    29       //   notifying of job completion. 
    30       Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
    31       String[] toAddresses = new String[] {a.CreatedBy.Email};
    32       mail.setToAddresses(toAddresses);
    33       mail.setSubject('Record Clean Up Status: ' + a.Status);
    34       mail.setPlainTextBody
    35       ('The batch Apex job processed ' + a.TotalJobItems +
    36       ' batches with '+ a.NumberOfErrors + ' failures.');
    37       Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
    38   }
    39}
  4. [File (ファイル)] | [Save (保存)] をクリックします。

もうひとこと...

  • この一括処理クラスには、query 変数で指定されたクエリに基づいてレコードが渡されます。このクエリ変数は、このクラスのコンストラクタに設定されます。
  • レコードのバッチごとに、このクラスの 3 つのメソッドが、start メソッド、execute メソッド、finish メソッドの順で実行されます。
  • start は、execute メソッドで処理するレコードのバッチを提供するため、Database.getQueryLocator(query); をコールし、処理するレコードのリストを返します。Database.QueryLocator オブジェクトで返せるレコードの最大数は、5000万件です。
  • 一括処理するレコードのリストは、execute メソッドの第 2 パラメータで渡されます。execute メソッドは、delete DML ステートメントでレコードを削除します。削除されたレコードはごみ箱に 15 日間保管されるため、このメソッドはさらにごみ箱を空にしてこれらのレコードを完全に削除します。
  • Apex 一括処理ジョブが呼び出されると、新しいレコードが AsyncApexJob テーブルに追加されます。このテーブルには、一括処理ジョブに関する情報 (状況、処理済みバッチ数、処理対象バッチ合計数など) が含まれます。finish メソッドは、ジョブの送信者にジョブの完了を確認するためのメールを送信します。AsyncApexJob オブジェクトへのクエリを実行し、ジョブの状況、送信者のメールアドレスなどの情報を取得します。続いて、新しいメールメッセージを作成し、Messaging.SingleEmailMessage メソッドを使用して送信します。

次に、この一括処理クラスを呼び出すテストメソッドを追加します。