Apex スケジューラを使用したジョブのスケジュール
Apex スケジューラを使用すると、Apex クラスの実行を遅らせて、指定した日時に実行できます。
まずクラスに Schedulable インターフェースを実装します。
次に、System.schedule メソッドを使用して、特定の時間に実行されるようにクラスのインスタンスをスケジュールします
このクラスは Schedulable インターフェースを実装し、このインターフェースに含まれるメソッド (execute メソッド) のみを実装する必要があります。
このメソッドのパラメータは SchedulableContext オブジェクトです。クラスがスケジュールされると、スケジュール済みジョブを表す CronTrigger オブジェクトが作成されます。このオブジェクトには、CronTrigger API オブジェクトの ID を返す getTriggerId メソッドがあります。
Schedulable インターフェースを使用してクラスを実装したら、System.Schedule メソッドを使用してこのクラスを実行します。
ユーザにそのクラスの実行権限があるかどうかにかかわらず、すべてのクラスが実行されます。
global class RemindOpptyOwners implements Schedulable {
global void execute(SchedulableContext ctx) {
List<Opportunity> opptys = [SELECT Id, Name, OwnerId, CloseDate
FROM Opportunity
WHERE IsClosed = False AND
CloseDate < TODAY];
// Create a task for each opportunity in the list
TaskUtils.remindOwners(opptys);
}
}
スケジュールに使用する Cron 式 についての詳細
https://developer.salesforce.com/docs/atlas.ja-jp.220.0.apexcode.meta/apexcode/apex_scheduler.htm
RemindOpptyOwners reminder = new RemindOpptyOwners();
// Seconds Minutes Hours Day_of_month Month Day_of_week optional_year
String sch = '20 30 8 10 2 ?';
String jobID = System.schedule('Remind Opp Owners', sch, reminder);
スケジュールに使用する Cron 式 についての詳細
スケジュール済み Apex を使用する場合は、結果をテストする前にスケジュール済みジョブが終了していることを確認する必要があります。
この確認には、System.schedule メソッドの前後に startTest と stopTest を再度使用して、テストを続行する前に処理が終了するようにします。