2010-11-06

Force.com : Apex でスケジュールを使って処理を実行したい

 
Apex でスケジュールを使って処理を実行したい
  • どっかに「hello, world」とか出力する
  • 1 時間毎に出力する



◆ クラス

■ 処理を実行するクラス
// 処理を実行するクラス
public class HelloWorld {
    // 処理
    public static void print() {
        System.debug('***** hello, world');
    }
}


■ スケジュールを実行するクラス
// スケジュールを実行するクラス
global class ScheduledHelloWorld implements Schedulable {
    // 処理
    global void execute(SchedulableContext sc) {

        System.debug('***** INFO  *****');
        CronTrigger ct = [SELECT id, CronExpression, StartTime, EndTime, NextFireTime, PreviousFireTime, TimeZoneSidKey FROM CronTrigger WHERE id = :sc.getTriggerId()];
        System.debug('***** ジョブID : ' + ct.id);
        System.debug('***** cron 式 : ' + ct.CronExpression);
        System.debug('***** スケジュール開始日時 : ' + ct.StartTime);
        System.debug('***** スケジュール終了日時 : ' + ct.EndTime);
        System.debug('***** 次のジョブの開始日時 : ' + ct.NextFireTime);    // null の場合、次回予定なし
        System.debug('***** 最新のジョブ終了日時 : ' + ct.PreviousFireTime);    // null の場合、未実行
        System.debug('***** タイムゾーン : ' + ct.TimeZoneSidKey);

        System.debug('***** START ***** ');
        HelloWorld.print();
        System.debug('***** E N D ***** ');
    }

    // テスト
    static testMethod void testScheduledHelloWold() {
        Test.startTest();
        String jobId = System.schedule('test hello world','0 0 * * * ?', new ScheduledHelloWorld());
        System.debug('***** job id : ' + jobId + ' ***** ***** *****');
        Test.stopTest();
    }
}
スケジュールを登録するためには Schedulable インタフェースを実装しないといけないらしい。
Schedulable インタフェースは execute メソッドを実装しないといけないらしい。

[開発]→[Apex クラス]→[ScheduledHelloWorld]→[テストを実行]ボタン押下でテストが可能。
指定した実行時間まで待たずに、テストは開始される。


■ スケジュールを登録するクラス
// スケジュールを登録するクラス
global class HelloWorldScheduler {
    // スケジュール開始
    public static void start() {
        String jobId = System.schedule('hello world','0 0 * * * ?', new ScheduledHelloWorld());
        System.debug('***** job id : ' + jobId + ' ***** ***** *****');
    }
}
  • System.schedule(String JobName, String CronExpression, Object schedulable_class) とは
    • 引数・String JobName : ジョブ名
    • 引数・String CronExpression : スケジュールの実行時間指定(cron 形式)
      • 形式 : Seconds Minutes Hours Day_of_month Month Day_of_week optional_year
      • ex. 毎時間 0 分 0 秒 : '0 0 * * * ?'
      • ex. 毎月 末日 22 時 : '0 0 22 L * ?'
    • 引数・Object schedulable_class : Schedulable インタフェースを実装したクラスのインスタンス
    • 戻り値・String JobId : ジョブID



◆ スケジュールの登録 1

  1. [設定]→[開発]→[Apex クラス]→[Apex をスケジュール]ボタン押下
  2. 項目を設定
    • ジョブ名 : hellow world (任意の名前)
    • Apex クラス : ScheduledHelloWorld (Schedulable インタフェースを実装したクラス)
    • Apex の実行をスケジュール : (略)
  3. [保存]ボタン押下
画面からだと、スケジュールは最低一日一回からぽい。(実装した場合は最低一時間一回からっぽい。)
あと、スケジュールの実行期間(開始、終了)とか設定しないといけないぽい。



◆ スケジュールの登録 2

  1. [システムログ]リンク押下
  2. [System Log]画面の[Execute Apex]に実行するメソッドを入力
    • HelloWorldScheduler.start();
  3. [実行]ボタン押下
新しい[System Log]画面なんて知らない。
そのまま[System Log]画面を開いていると、スケジュールが実行されたときに[Logs]にログリストがつらつらとか。



◆ スケジュールの確認

  1. [設定]→[監視]→[スケジュール済みジョブ]から確認



◆ スケジュールの削除

  1. [設定]→[監視]→[スケジュール済みジョブ]から削除するジョブの[アクション/削除]リンク押下



◇ 参考

 

0 件のコメント:

コメントを投稿