ipex

Salesforceの情報や趣味(ゲーム等)についてフリーに

毎年1回だけ動かしたいApexバッチのスケジューリング

1年に1回だけ動くApexバッチのスケジュールは、
画面からスケジュールしようとしてもできない。

f:id:ipex:20151006220812p:plain

// そもそもこの画面が分かりにく過ぎるという問題はさておき

画面からできないなら、バッチの中でスケジュールしてあげるしかない。
ということで、finishメソッドで来年分をスケジューリングしました。

/**
 * finishメソッド
 */
global void finish(Database.BatchableContext bc){
    // 来年のスケジュールを設定(初回実行予定2016年4月1日、以降毎年4月1日に実行させる)
    String strCron = '0 0 0 1 4 ? '
                   + String.valueOf(来年);
    system.schedule('年次バッチ', strCron, new SchedulerClass());
}

・初回を画面からスケジュールする
 (そのバッチが実行されれば、finishメソッドで次回がスケジュールされる)
・来年ってところはうまくバッチ実行日の来年を西暦で入れてNE

際限無く動くので、一応それは要注意。