[salesforce]スケジュール処理の実行 2

By |10月 22, 2009|salesforce, |


以前、Salesforceからのスケジュール処理について書いたのですが、全然別な方法を発見しました。
http://gokubi.com/archives/daily-cron-jobs-with-apex
ワークフローのタイムトリガを使うのですが、こんなやり方ができるんですね。ずいぶん古い記事ですが、目から鱗。

  1. バッチスクリプト実行用のオブジェクトを作る。項目は以下の二つ
    • バッチスクリプト実行チェックボックス
    • バッチスクリプト最終実行日時
  2. タイムトリガを設定する。実行条件は「バッチスクリプト最終実行日時」の「1日後」。
  3. タイムトリガ適用時のワークフローアクションとして、項目自動更新を設定。「バッチスクリプト実行チェックボックス」をtrueにする。
  4. 「バッチスクリプト実行用のオブジェクト」にupdateトリガを設定する。トリガ内では、「バッチスクリプト実行チェックボックス」がtrueかどうか判定して、その中にスケジュール実行したいAPEX処理を記述する。
  5. 後処理として、チェックボックスをfalseにして、最終実行日時にtodayを設定する。

サンプルスクリプト

trigger TestScript on Batch_Script__c bulk (after update) {
//if checkbox is checked, run the script
  for (Batch_Script__c bs : Trigger.new) {
    if (bs.Test_Script_Run__c == true) {
      //run whatever APEX code you want
      Batch_Script__c ourBS = new Batch_Script__c (
        Id = bs.Id,
        Test_Script_Run__c=false,
        Test_Script_Last_Run_Date__c=system.today()
      );
      update ourBS;

    }
  }
}

これは便利。
難点としては、実行間隔がタイムトリガに依存するので、デイリーか1時間単位でしか間隔設定できない、ってところでしょうかね。