Apex schedulableスケジューラーを使用したジョブのスケジュールサンプル
環境
Salesforce
スケジュール済み Apex の構文
public class SomeClass implements Schedulable {
public void execute(SchedulableContext ctx) {
// 処理コード
}
}
public class SomeClass implements Schedulable {
public void execute(SchedulableContext ctx) {
// 処理コード
}
}
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 回テストクラスを実行する
スケジュール済み 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 回テストクラスを実行する
スケジュール済み 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;
}
}
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;
}
}
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());
}
}
@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());
}
}
@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()); } }