Apex スケジューラを使用したジョブのスケジュール
概要
Apexスケジューラは非同期処理で最もよく使うインターフェースです。
一括処理と併用すれば大量のレコードを定期実行で処理できる
問題
スケジュールされたApexを使用してリードレコードを更新するApexクラスを作成します。
特定のLeadSourceでLeadレコードを更新するSchedulableインターフェースを実装するApexクラスを作成します。 クラスのコードカバレッジを100%達成する単体テストを作成します。 これは、BatchApexで行ったことと非常によく似ています。
Schedulableインターフェースを使用する「DailyLeadProcessor」というApexクラスを作成します。
executeメソッドは、LeadSourceフィールドが空白の最初の200件のリードを検索し、それらを「Dreamforce」のLeadSource値で更新する必要があります。
‘DailyLeadProcessorTest’というApexテストクラスを作成します。
テストクラスで、200のリードレコードを挿入し、DailyLeadProcessorクラスを実行するようにスケジュールして、すべてのリードレコードが正しく更新されたことをテストします。
単体テストは、DailyLeadProcessorクラスに含まれるコードのすべての行をカバーする必要があり、100%のコードカバレッジが得られます。
このチャレンジを検証する前に、テストクラスを少なくとも1回実行します(「すべて実行」を使用して開発者コンソールをテストします)。
スケジュールされたApexを使用してリードレコードを更新するApexクラスを作成します。
特定のLeadSourceでLeadレコードを更新するSchedulableインターフェースを実装するApexクラスを作成します。 クラスのコードカバレッジを100%達成する単体テストを作成します。 これは、BatchApexで行ったことと非常によく似ています。
Schedulableインターフェースを使用する「DailyLeadProcessor」というApexクラスを作成します。
executeメソッドは、LeadSourceフィールドが空白の最初の200件のリードを検索し、それらを「Dreamforce」のLeadSource値で更新する必要があります。
‘DailyLeadProcessorTest’というApexテストクラスを作成します。
テストクラスで、200のリードレコードを挿入し、DailyLeadProcessorクラスを実行するようにスケジュールして、すべてのリードレコードが正しく更新されたことをテストします。
単体テストは、DailyLeadProcessorクラスに含まれるコードのすべての行をカバーする必要があり、100%のコードカバレッジが得られます。
このチャレンジを検証する前に、テストクラスを少なくとも1回実行します(「すべて実行」を使用して開発者コンソールをテストします)。
スケジュールされたApexを使用してリードレコードを更新するApexクラスを作成します。 特定のLeadSourceでLeadレコードを更新するSchedulableインターフェースを実装するApexクラスを作成します。 クラスのコードカバレッジを100%達成する単体テストを作成します。 これは、BatchApexで行ったことと非常によく似ています。 Schedulableインターフェースを使用する「DailyLeadProcessor」というApexクラスを作成します。 executeメソッドは、LeadSourceフィールドが空白の最初の200件のリードを検索し、それらを「Dreamforce」のLeadSource値で更新する必要があります。 ‘DailyLeadProcessorTest’というApexテストクラスを作成します。 テストクラスで、200のリードレコードを挿入し、DailyLeadProcessorクラスを実行するようにスケジュールして、すべてのリードレコードが正しく更新されたことをテストします。 単体テストは、DailyLeadProcessorクラスに含まれるコードのすべての行をカバーする必要があり、100%のコードカバレッジが得られます。 このチャレンジを検証する前に、テストクラスを少なくとも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>upLst = new List<Lead>();
for(lead ld : leadLst) {
if(ld.LeadSource ==NULL) {
ld.LeadSource = 'Dreamforce';
upLst.add(ld);
}
}
update upLst;
}
}
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>upLst = new List<Lead>();
for(lead ld : leadLst) {
if(ld.LeadSource ==NULL) {
ld.LeadSource = 'Dreamforce';
upLst.add(ld);
}
}
update upLst;
}
}
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>upLst = new List<Lead>(); for(lead ld : leadLst) { if(ld.LeadSource ==NULL) { ld.LeadSource = 'Dreamforce'; upLst.add(ld); } } update upLst; } }
テストクラスの定義
Apex スケジューラを使用したジョブのスケジュール
@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;
}
@isTeat
static void testMethod1() {
List<Lead>leadLst = [SELECT Id FROM Lead LIMIT 200];
Sting CRON_EXP = '0 0 0 16 4 ? 2024';
System.Test.startTest();
String jobId = System.schedule('DailyLeadProcessor',
CRON_EXP,
new DailyLeadProcessor());
System.Test.stopTest();
}
}
@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;
}
@isTeat
static void testMethod1() {
List<Lead>leadLst = [SELECT Id FROM Lead LIMIT 200];
Sting CRON_EXP = '0 0 0 16 4 ? 2024';
System.Test.startTest();
String jobId = System.schedule('DailyLeadProcessor',
CRON_EXP,
new DailyLeadProcessor());
System.Test.stopTest();
}
}
@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; } @isTeat static void testMethod1() { List<Lead>leadLst = [SELECT Id FROM Lead LIMIT 200]; Sting CRON_EXP = '0 0 0 16 4 ? 2024'; System.Test.startTest(); String jobId = System.schedule('DailyLeadProcessor', CRON_EXP, new DailyLeadProcessor()); System.Test.stopTest(); } }