Apex 一括処理クラスの追加
前提条件:
このレッスンでは、Database.Batchable インターフェースを実装する Apex 一括処理クラスを作成します。この一括処理クラスは、start メソッドで渡されるレコードをクリーンアップします。
- 開発者コンソールで、 をクリックします。
- クラス名として「CleanUpRecords」と入力し、[OK] をクリックします。
-
自動生成されたコードを削除し、次のコードを追加します。
1swfobject.registerObject("clippy.codeblock-0", "9"); 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17global class CleanUpRecords implements 18 Database.Batchable<sObject> { 19 20 global final String query; 21 22 global CleanUpRecords(String q) { 23 query = q; 24 } 25 26 global Database.QueryLocator start(Database.BatchableContext BC){ 27 return Database.getQueryLocator(query); 28 } 29 30 global void execute( 31 Database.BatchableContext BC, 32 List<sObject> scope){ 33 delete scope; 34 Database.emptyRecycleBin(scope); 35 } 36 37 global void finish(Database.BatchableContext BC){ 38 AsyncApexJob a = 39 [SELECT Id, Status, NumberOfErrors, JobItemsProcessed, 40 TotalJobItems, CreatedBy.Email 41 FROM AsyncApexJob WHERE Id = 42 :BC.getJobId()]; 43 44 // Send an email to the Apex job's submitter 45 // notifying of job completion. 46 Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); 47 String[] toAddresses = new String[] {a.CreatedBy.Email}; 48 mail.setToAddresses(toAddresses); 49 mail.setSubject('Record Clean Up Status: ' + a.Status); 50 mail.setPlainTextBody 51 ('The batch Apex job processed ' + a.TotalJobItems + 52 ' batches with '+ a.NumberOfErrors + ' failures.'); 53 Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail }); 54 } 55} - をクリックします。
もうひとこと...
- この一括処理クラスには、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 メソッドを使用して送信します。
次に、この一括処理クラスを呼び出すテストメソッドを追加します。