Labyrinth of Wisdom

-This is My Archive-


【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だと思います。

参考

おまけ

スケジュールの管理画面を作成されている方がおられました。 ここまでいけばかなりユーザも使いやすいですね。

www.terrasky.co.jp