Developer

開発者コンソールからスケジュール登録しよう【セールスフォース】

Developer
この記事は約4分で読めます。

こんにちは、アンダーソンです。
今回は毎回えーっとどうだったかな?となってしまう、スケジューラクラスの
開発者コンソールからの設定の仕方をまとめてみました。

スポンサーリンク

まずスケジュールクラスを用意する

まず実際に使うスケジュールクラスを用意します。
詳しくはこちらをどうぞ

public class ScheduleTest implements Schedulable {
    public void execute(SchedulableContext SC) {
        Account acc = new Account(); 
    }
}

ただ初期化するスケジューラ。。。どこに需要もないですが一旦よしとします。

画面からやってみる

SalesforceはUIが充実しているためスケジュールの設定もインターフェース上で行うことができます。

設定→Apexクラス→Apexをスケジュールに進みます。

スケジュールクラスとして実装されているApexが出てきますので

  • 毎週(曜日を選択)なのか
  • 毎月(何日か第何曜日)なのか
  • 期間はいつからいつまでか
  • 開始時刻はいつか

ただこのインターフェース。時間が1時間事にしか設定できないんです。。。
これでは30分ごとに動くとか、微妙な時間にリードに一括でメールを送るとかができません。

開発者コンソールから設定してみよう

そんな悩みが出てきたら開発者コンソールを開いてください。
匿名実行でスケジュールの設定ができます。

system.schedule(スケジュール名(ラベル),実行するタイミング,実行するクラス);

の順に書いていきます。
実行するタイミングは、

Seconds Minutes Hours Day_of_month Month Day_of_week Optional_year
秒 分 時間 日 月 週 年
の順に書いていきます。
また特殊文字もありますので
そちらも抑えておきましょう。

特殊文字説明
,値を区切ります。たとえば、複数の月を指定する場合は JAN, MAR, APR を使用します。
範囲を指定します。たとえば、複数の月を指定する場合は JAN-MAR を使用します。
*すべての値を指定します。たとえば、Month を * と指定すると、ジョブは毎月にスケジュールされます。
?特定の値を指定しません。Day_of_month と Day_of_week のみで使用でき、通常は、特定の値以外を指定しない場合に使用します。
/増分を指定します。スラッシュの前の数値は期間の開始を指定し、スラッシュの後の数値は期間の長さを指定します。たとえば、Day_of_month に 1/5 と指定した場合、Apex クラスは月の 1 日から始まり、5 日おきに実行されます。
L範囲の終了を指定します。Day_of_month と Day_of_week でのみ使用できます。日で使用すると、1 月の場合は 1 月 31 日、うるう年の 2 月の場合は 2 月 29 日など、L は常に月末日を意味します。Day_of_week のみで使用すると、7 または SAT を意味します。Day_of_week の値と一緒に使用すると、その月で指定した曜日の最後を意味します。たとえば、2L と指定すると、月の最終月曜日が指定されます。L と一緒に値の範囲は使用しないでください。予期しない結果が生じる場合があります。
W特定の日に最も近い平日 (月曜日~金曜日) を指定します。Day_of_month でのみ使用できます。たとえば、20W と指定し、20 日が土曜日の場合、クラスは 19 日に実行されます。1W と指定すると、1 日が土曜日の場合、クラスはその前の月ではなく、次の月曜日である 3 日に実行されます。月の最後の平日を指定するには、L と W を一緒に使用します。
#weekday#day_of_month という形式で、月の第 nth 日目を指定します。Day_of_week でのみ使用できます。# の前の数値は、平日 (SUN-SAT) を指定します。# の後の数値は、月の日付を指定します。たとえば、2#2 と指定すると、クラスは毎月第 2 月曜日に実行されます。

とりあえず書いていきましょう。

//毎日午後12時半に実行
system.schedule('テストスケジュール', '0 30 12 * * ?', new ScheduleTest());
//毎月最終金曜日の午後12時に実行
system.schedule('テストスケジュール2', '0 0 12 ? * L', new ScheduleTest());
//月曜日から金曜日の午後12時20分に実行
system.schedule('テストスケジュール3', '0 20 12 ? * MON-FRI', new ScheduleTest());

こんな感じで書けば細かく設定することが可能です。

これでOKですね。

あまり頻繁に使わないので覚えにくいかもしれませんがぜひ参考にしてみてください。

その他の開発に関する記事はこちらです。

Developerも含めた試験問題にチャレンジしてみましょう。

コメント