[salesforce]スケジュール処理の実行 2
以前、Salesforceからのスケジュール処理について書いたのですが、全然別な方法を発見しました。
http://gokubi.com/archives/daily-cron-jobs-with-apex
ワークフローのタイムトリガを使うのですが、こんなやり方ができるんですね。ずいぶん古い記事ですが、目から鱗。
- バッチスクリプト実行用のオブジェクトを作る。項目は以下の二つ
- バッチスクリプト実行チェックボックス
- バッチスクリプト最終実行日時
- タイムトリガを設定する。実行条件は「バッチスクリプト最終実行日時」の「1日後」。
- タイムトリガ適用時のワークフローアクションとして、項目自動更新を設定。「バッチスクリプト実行チェックボックス」をtrueにする。
- 「バッチスクリプト実行用のオブジェクト」にupdateトリガを設定する。トリガ内では、「バッチスクリプト実行チェックボックス」がtrueかどうか判定して、その中にスケジュール実行したいAPEX処理を記述する。
- 後処理として、チェックボックスを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時間単位でしか間隔設定できない、ってところでしょうかね。