Apex 一括処理クラスの追加
前提条件:
このレッスンでは、Database.Batchable インターフェースを実装する Apex 一括処理クラスを作成します。この一括処理クラスは、start メソッドで渡されるレコードをクリーンアップします。
- 開発者コンソールで、 をクリックします。
- クラス名として「CleanUpRecords」と入力し、[OK] をクリックします。
-
自動生成されたコードを削除し、次のコードを追加します。
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} - をクリックします。
もうひとこと...
- この一括処理クラスには、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 メソッドを使用して送信します。
次に、この一括処理クラスを呼び出すテストメソッドを追加します。