Apex スケジューラーを使用したジョブのスケジュールのサンプル

環境
Salesforce Apex

スケジュール済み Apex の構文

public class SomeClass implements Schedulable {
  public void execute(SchedulableContext ctx) {
  // 処理コード
  }
}

課題

スケジュール済み 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.Apexクラスの定義

global class DailyLeadProcessor implements Schedulable {
    
    global void execute(SchedulableContext ctx) {
        
        List<Lead> leadLst = [SELECT Id,LeadSource FROM Lead WHERE LeadSource = NULL LIMIT 200];
        List<Lead> updLst = new List<Lead>();
                    
        for ( Lead ld : leadLst ) {
            if(ld.LeadSource == NULL){
                ld.LeadSource = 'Dreamforce';
                updLst.add(l);
            }
        }
        Update updLst;
    }
}

2.テストクラスの定義

@isTest
public class DailyLeadProcessorTest {
    
    @testSetup
    static void setup(){
        
        List<Lead> leadLst = new List<Lead>();
        
        for ( Integer i = 0; i<200; i++){
            leadLst.add(new Lead(
                LastName = 'Test' +i,
                Company = 'Name' + i,
                LeadSource = NULL
            ));
        }
        Insert leadLst;
    }
    @isTest
    static void testMethod1(){
        
        List<Lead> leadLst = [SELECT Id FROM Lead LIMIT 200];
        
        String CRON_EXP = '0 0 0 14 4 ? 2024';
                
        System.Test.startTest();
        String jobId = System.schedule('DailyLeadProcessor',
                                       CRON_EXP, 
                                       new DailyLeadProcessor());         
 
        System.Test.stopTest();
    }
    
}

 

IT

Posted by arkgame