この記事の目次
System.schedule

System.scheduleの全体像を掴もう
System.scheduleは、Salesforceにおいてscheduleインターフェースを実装するSystemクラスの1つで、型はStringとなります。 クラスの1種なのでデータや命令が書かれたものであると同時に、String型なので文字列を格納出来る変数の1種でもあります。System.scheduleで一体何が出来るのか
スケジューラとも呼ばれるSystem.scheduleを使う事で、指定した時間にSalesforceのApexクラスを実行する事が出来ます。このインターフェースを使う事でデータをまとめて処理出来るので、週毎に進捗の確認が出来るというメリットがあります。 System.scheduleを使って1度に処理出来る仕事の数は100までです。スケジュール済みApexがカスタムビューに表示される様にしておく事で、現在までに完了したタスクの数を確認する事が出来ます。 他にも、スケジュール済みのタスク数をカウントするには、CronTriggerあるいはCronJobDetailをプログラム上に表示させるという方法もあります。System.scheduleを使う際に気を付けたいポイント
System.scheduleではタスクを実行出来る時間を指定出来ますが、クラウド上の状況によりその時間が若干遅れる場合があります。 加えてトリガからタスクを設定させる際には、バグの原因にもなりかねません。100以上のタスクをスケジュール設定しない様に注意が必要です。 また、APIや複数のスケジュールを一括で更新する事は苦手であるため、そういった内容をスケジュールしたい際は小分けにして行いましょう。Apexクラスを呼び出そう
System.scheduleの実装方法をご紹介します。まずはSalesforce内でスケジュールしたいクラスを呼び出す必要があります。その為に必要なコードを以下に示します。global class SomeClass implements Schedulable {
global void execute(SchedulableContext ctx) {
// awesome code here
}
}
このコードでは、まず”Schedule contextオブジェクト”をパラメーターにする事を宣言しています。続いてスケジュールが完了したら、Crontriggerオブジェクトを作成してスケジュール済みである事を把握できる様にします。
Scheduleインターフェースを実装しよう
SalesforceでSystem.scheduleを実行する前に、Schedulableインターフェースでクラスを実装する必要があります。 ポイントとしては、System.scheduleメソッドを宣言するには変数globalあるいは変数publicで宣言する必要があるという事です。実際には以下の様なコーディングを行います。global class scheduledMerge implements Schedulable {
global void execute(SchedulableContext SC) {
sea otter reserved Association = new sea otter reserved Association();
}
}
指定した時刻にインスタンスが実行される様にしよう
クラスの呼び出し及びSchedulableインターフェースによる実装が完了したら、いよいよSystem.scheduleの出番です。 以下の様なコードを書き、指定した時刻にタスク処理が行われるようにします。Sea otter reserved Association reminder = new Sea otter reserved Association();
// 月、日(必要に応じて年も)と時、分、秒を記入
String sch = '28 43 17 11 5 ?';
String jobID = System.schedule('Sea otter reserved Association', sch, reminder);