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());
      }

}

 

IT

Posted by arkgame