Apex schedulableスケジューラーを使用したジョブのスケジュールサンプル
環境
Salesforce
スケジュール済み Apex の構文
public class SomeClass implements Schedulable { public void execute(SchedulableContext ctx) { // 処理コード } }
特定の時間に実行される Apex クラスを呼び出すには、まずクラスに Schedulable インターフェースを実装します。
System.schedule() メソッドを使用して、特定の時間に実行されるようにクラスのインスタンスをスケジュールします。
System.Schedule メソッドの使用
Schedulable インターフェースを使用してクラスを実装したら、System.schedule() メソッドを使用して
このクラスを実行します。
System.schedule() メソッドは、ジョブの名前、ジョブの実行予定日時を表すために使用する CRON 式、
Schedulable インターフェースを実装するクラスのインスタンスという 3 つの引数を取ります。
課題
スケジュール済み Apex を使用してリードレコードを更新する Apex クラスを作成する。 Schedulable インターフェースを実装してリードレコードを特定の LeadSource で更新する Apex クラスを作成します (Batch Apex の内容とよく似ています)。 Apex クラスを作成する: 名前: DailyLeadProcessor インターフェース: Schedulable execute メソッドでは LeadSource 項目が空白である Lead レコードの最初の 200 件を検出し、LeadSource 値「Dreamforce」で更新する必要がある Apex テストクラスを作成する: 名前: DailyLeadProcessorTest テストクラスで、200 件の Lead レコードを挿入し、DailyLeadProcessor クラスをスケジュールして実行し、すべての Lead レコードが正しく更新されたことを検証する 単体テストは DailyLeadProcessor クラスに含まれるすべてのコード行をカバーし、結果のコードカバー率が 100% になる必要がある。 この Challenge の完了を確認する前に、Developer Console の [Run All (すべて実行)] 機能を使用して、少なくとも 1 回テストクラスを実行する
1.DailyLeadProcessorクラスの定義
public class DailyLeadProcessor implements schedulable { public void execute(schedulableContext sc) { List<lead> leadList = new List<lead>(); List<lead> ldlst = new List <lead>([select id,leadsource from lead where leadsource = null]); for(lead ld : ldlst){ ld.leadsource = 'Dreamforce'; leadList.add(ld); } update leadList; } }
2.テストクラスの定義
@isTest public class DailyLeadProcessorTest { @isTest public static void testmethod() { List<lead> leadLst = new List<lead>(); for(Integer i=0; i<200; i++) { lead ld = new lead(); ld.lastname = 'lastname' + i; ld.Company = 'company' + i; leadLst.add(ld); } insert leadLst; System.Test.startTest(); DailyLeadProcessor dlp = new DailyLeadProcessor(); String jobId = System.Schedule('dailyleadprocessing', '0 0 0 1 12 ? 2024, dlp'); System.Test.stopTest(); List<lead> chkList = new List<lead>([select id,leadsource from lead where leadsource != 'Dreamforce']); System.assertequals0,chkList.size()); } }