【Apex】スケジュールを操作する
Apexコードを使ってスケジュールの作成・削除を行うことが出来ます。
これらを使えば、特定のクラスが呼び出された後にスケジュールをセットしたり削除したりすることが出来ます。
サンプルコード
CreateSchedule
クラスを呼び出すと、ジョブ名「3時のおやつ」で2016年中毎日15時にScheduledTest
クラスを呼び出すスケジュールが作成されます。
global class CreateSchedule { public static void execute(){ String jobName = '3時のおやつ'; // 2016年毎月毎日15時(年は省略可) String jobTime = '0 0 15 * * ? 2016'; // スケジュールを作成 System.schedule(jobName, jobTime, new ScheduledTest()); } }
今回は開発者コンソールから呼び出せるクラスを書いてみました。
開発者コンソール>Debug>Open Execute Anonymous Window
にアクセスし、下記のコードを記述してExecute
をクリックしてください。
CreateSchedule
クラスが呼び出されます。
CreateSchedule.execute();
スケジュールが作られたかどうかを確認するには、
設定>ジョブ>スケジュール済みジョブ
にアクセスしてください。作成されたスケジュールが一覧で表示されています。
毎日15時になるとScheduledTest
クラスが呼び出されます。
ただ毎日呼び出されると鬱陶しいので、呼ばれたらセットされたスケジュールを消すようにしてみました。
このクラスが呼ばれると、セットされたスケジュールが消され、コンソールにメッセージが表示されます。
global class ScheduledTest implements Schedulable { global void execute(SchedulableContext sc) { String jobName = '3時のおやつ'; // スケジュールオブジェクトからレコードを取得 List<CronTrigger> ct = [SELECT Id FROM CronTrigger WHERE CronJobDetail.JobType = '7' AND CronJobDetail.Name = :jobName LIMIT 1]; // スケジュール削除 System.abortJob(ct[0].Id); System.debug('今日のおやつはカールだよ'); } }
このスケジュールクラスは特殊で、Schedulable
インターフェースを実装していたりします。スケジュールオブジェクトにアクセスするSOQL文もかなり特殊ですよね。
これらは決まった様式なので、最初の内はあまり深く考えなくてもいいかもしれません。 とりあえずはこの様式に当てはめて、自分の行いたい処理を書けばOKだと思います。
参考
おまけ
スケジュールの管理画面を作成されている方がおられました。 ここまでいけばかなりユーザも使いやすいですね。