概要
JS7 JobSchedulerにおけるスケジュール定義について解説します。
まず基本操作として、営業日スケジュールの設定を行います。
また応用として、いくつかの設定サンプルを取り上げます。
※通常の日付、曜日指定の処理は、触れば分かりますので省略します。
前提条件
- JS7 jobscheduler の環境準備、初期設定を済ませていること。
まだの方はこちらから
JS7® JobScheduler 初期設定、サンプルWorkFlowの登録 - WorkFlowの作成、実行、ログ確認などの基本操作ができること。
こちらで簡単な操作説明をしています
JS7 JobScheduler 初めてのWorkFlow実行 - 本例は土日祝日休みを前提とした設定サンプルとなっています。
(内容を理解すれば、他の休日形態でも応用はできるはずです・・・) - 本記事はJobScheduler Ver. 2.3.1, 2.4.1 で確認した内容です。
今後内容が変わる可能性があります。
本記事では休業日カレンダーを使っての設定例を多く取り上げます。
しかし、Ver 2.5.1以前の環境では、スケジュール定義にて休業日カレンダーを使用した場合、他のスケジュール分も含めて休日のDailyPlanが作られなくなる問題を把握しています。
(※Ver 2.5.2で解消しました)
もし対象バージョン利用の場合は、本記事中で、回避手段も紹介していますので、そちらをご参考ください。
【補足】休業日カレンダー利用時の回避手段
JobSchedulerにおけるスケジュール定義
あらかじめ営業日、休業日カレンダーを定義し、そのカレンダーの組み合わせでスケジュールを定義します。
そのため、Cron形式では実現できなかった、営業日、休業日を念頭においたスケジュールを容易に組むことができます。
また、先の予定が可視化できるため、スケジュール定義ミスによる誤作動を防止できます。
基本設定(営業日スケジュール)
まずは基本的な設定をおさえるために、営業日処理用のスケジュールを定義します。
営業日カレンダーを作成
Practice
フォルダ以下の、Automation
- Calendars
より、新規カレンダーを作成します。
設定は下記のように行います。
※ここでは休日は考慮しなくて構いません。
項目名 | 設定値 |
---|---|
Name | work_alldays |
Title | 毎日(Descriptionに相当) |
Documantation | (空でよい) |
Type | Working days (営業日)を選択 |
Valid From | 対象期間(空でよい) |
Valid To | 対象期間(空でよい) |
Included Frequencies
が選択されていることを確認のうえ、Add Frequency
をクリック
Weekdays
を選択し、Every Day
を選択。Add Frequency
で追加する。
Every day
が追加されたことを確認し、Releaseしてください。
休業日カレンダーを作成
同様に、休業日のカレンダーを定義します。
名前は、nonwork_holidays
としてください。
設定は下記のように行います。
※ここでは休日は考慮しなくて構いません。
項目名 | 設定値 |
---|---|
Name | nonwork_holidays |
Title | 休日(Descriptionに相当) |
Documantation | (空でよい) |
Type | Non-working days (休業日)を選択 |
Valid From | 対象期間(空でよい) |
Valid To | 対象期間(空でよい) |
Included Frequencies
が選択されていることを確認のうえ、Add Frequency をクリック
誤って Excluded Frequencies
を選択しないように注意!
ここではあくまで休業日の対象を選択します。
Weekdays
を選択し、Saturday
, Sunday
を追加
National Holidays
を選択し、 Japan
, 2022
で祝日をまとめて追加
Specific Days
を選択し、会社の休業日を追加(夏季、冬季休暇など)
対象を追加したらCloseしてください。
問題なければReleaseしてください。
【参考】周期設定について
カレンダーの対象、除外周期には、下記の設定を複数パターン含めることが可能です。
- Weekdays
- 毎日、もしくは曜日指定
- 毎月もしくは月指定が可能(ver. 2.3.1では月指定は動作しない)
- MonthDays
- 毎月1日、10日、最終日、最終日前日、など
- 休業日カレンダーとの組み合わせで、毎月第2営業日、最終営業日などの指定が可能
- 毎月もしくは月指定が可能(ver. 2.3.1では月指定は動作しない)
- Specific Weekdays
- 第1水曜、第3火曜 最終金曜など
- Specific Days
- 年月日で直接指定
- 単発の作業日、会社の休業日などの指定に利用
- Every
- 5日毎、2週毎、3か月毎、年単位など
- National Holidays
- 国、年を指定して祝日を設定できる
- あまり先まで設定しないように注意。12月に翌年の祝日を追加もしくは再設定をするのがよい。
2021年の祝日は東京五輪の関係で2020年11月末に決まりましたね・・・
Schedule 設定
次に、今作成したカレンダーを使って、営業日スケジュールを定義します。
Practice
フォルダ以下の、Automation
- Schedules
より、新規スケジュールを作成します。
名前は sche_WorkdayOrderSample
としてください。
下記のように設定してください。
項目名 | 設定値 |
---|---|
Name | sche_WorkdayOrderSample |
Title | 営業日処理のサンプル(Descriptionに相当) |
Documantation | (空でよい) |
Workflow Names |
/Example.Unix/01_HelloWorld/jduHelloWorld を選択 |
Plan Order automatically | チェック (DailyPlanサービスによるPlan作成を行う) |
Submit Order to Controller when planned | チェック (Release時にOrder追加まで行う ※ver 2.5.3にて確認) |
次にカレンダーの割り当てを行います。
Run-time
をクリック
Assign Working Day Calendar
をクリックします。
先ほど作ったwork_alldays
を追加します。
追加されたwork_alldays
にて、period
をクリック
下記のように設定し、Save します。
(私の環境ではIMEを無効にしないとうまくSaveできないです・・・)
項目名 | 設定値 |
---|---|
Repeat Interval | Single Start を選択 |
Start Time |
10:00 と入力(任意) |
On Non-working Day |
suppress execution を選択 (休日は実行しない) |
同様に休業日カレンダーを割り当てます。
Assign Non-Working Day Calendar
から nonwork_holidays
を追加します。
営業日、休業日カレンダーが追加されたことを確認の上、Show Preview
をクリックしてください。
対象日付が確認できます。
問題なければ、Run-time設定は閉じて、Release してください。
以上でスケジュール定義は完了です。
基本的には、この設定により、営業日スケジュールが追加されます。
(スケジュール定義に従ったOrderの登録は、DailyPlanの機能となります)
【参考】Repeat Interval について
Repeat Interval の設定は、通常は Single Start
を選んでください。
cron での 10分毎に実行、毎時15分に実行などの処理の代替え手段とする場合は、WorkFlow定義でCycle処理
を利用することを推奨します。
スケジュール定義でのRepeat設定は、その繰り返し回数分Orderが作成されます。
そのため、Order情報が溢れ、ログの視認性も非常に悪くなります。
またエージェントをメンテナンス停止した場合に、起動後のタイミングで一度に大量のOrderが処理される可能性があります。
WorkFlowのCycle処理を使えば、Orderはあくまで1つとなり、メンテナンス停止時もエージェント起動後より処理が始まるだけです。
応用設定(設定サンプル)
週の営業日初日
月曜のみ対象のカレンダーと、休業日カレンダーの組み合わせで実現できます。
カレンダー定義
項目名 | 設定値 |
---|---|
Name | work_monday |
Title | 月曜(Descriptionに相当) |
Documantation | (空でよい) |
Type | Working days (営業日)を選択 |
Valid From | 対象期間(空でよい) |
Valid To | 対象期間(空でよい) |
Included Frequencies |
Weekdays でMonday を追加 |
スケジュールの Run-Time設定
Type | Calendar | Repeat Interval | Start Time | On Non-working Day |
---|---|---|---|---|
営業日 | work_monday | Single Start | 11:00(任意) |
after non-working day (翌営業日) |
休業日 | nonwork_holidays | - | - | - |
月曜が休日の週は翌日が対象となっていることをご確認ください。
週の最終営業日
週初日と同じ要領で設定できます。
カレンダー定義
項目名 | 設定値 |
---|---|
Name | work_friday |
Title | 金曜(Descriptionに相当) |
Documantation | (空でよい) |
Type | Working days (営業日)を選択 |
Valid From | 対象期間(空でよい) |
Valid To | 対象期間(空でよい) |
Included Frequencies |
Weekdays でFriday を追加 |
スケジュールの Run-Time設定
Type | Calendar | Repeat Interval | Start Time | On Non-working Day |
---|---|---|---|---|
営業日 | work_friday | Single Start | 12:00(任意) |
before non-working day (前営業日) |
休業日 | nonwork_holidays | - | - | - |
毎月第1営業日
まず営業日のみのカレンダーを定義します。
(Included に Everyday, Excluded に休日を追加)
カレンダー定義
項目名 | 設定値 |
---|---|
Name | work_workingday |
Title | 営業日のみ(Descriptionに相当) |
Documantation | (空でよい) |
Type | Working days (営業日)を選択 |
Valid From | 対象期間(空でよい) |
Valid To | 対象期間(空でよい) |
Included Frequencies |
Weekdays にてEvery Day を選択 |
Excluded Frequencies |
Weekdays にてSaturday , Sunday を追加National Holidays にてJapan , 2022 で祝日追加Specific Weekdays にて休業日を追加 |
プレビューではこのような表示となります。(Excludedが赤となる)
スケジュールの Run-Time設定
Type | Calendar | Repeat Interval | Start Time | On Non-working Day |
---|---|---|---|---|
営業日 | work_workingday | Single Start | 11:00(任意) |
after non-working day (翌営業日) |
休業日 | nonwork_holidays | - | - | - |
MonthDays
より、Count from First Day
で 1
のみ選択して追加、Submit
(営業日カレンダーの1番目の日付が対象となる)
第2営業日、第1~第5営業日、最終営業日(Count from Last Day から追加)なども、同様の方法で設定できます。
営業日と休日の処理を分ける
WorkFlow定義との組み合わせで実現可能です。
WorkFlow定義
あらかじめ、WorkFlow定義にて、Order変数 is_holiday: bool型 デフォルト値 false
を定義します。
休日にスキップしたい箇所は、If条件で、$is_holiday == false
の場合のみ実行するように設定します。
カレンダー定義
休日処理用のカレンダー定義を追加します。
項目名 | 設定値 |
---|---|
Name | work_holiday |
Title | 休業日処理用(Descriptionに相当) |
Documantation | (空でよい) |
Type | Working days (営業日)を選択 |
Valid From | 対象期間(空でよい) |
Valid To | 対象期間(空でよい) |
Included Frequencies |
Weekdays にてSaturday , Sunday を追加National Holidays にてJapan , 2022 で祝日追加Specific Weekdays にて休業日を追加 |
スケジュール定義
スケジュール定義にて、営業日処理用のスケジュールと、休日処理用スケジュールを、同時刻で実行されるように定義します。
-
営業日処理用
-
休日処理用
これで営業日、休業日でWorkFlowの実行内容を分けることができます。
【補足】休業日カレンダー利用時の回避手段
Ver 2.5.1以前の環境にて、スケジュール定義にて休業日カレンダーを使用した場合、休業日を考慮しない他のスケジュール分も含めて休日のDailyPlanが作られなくなる問題を把握しています。
これについては、各スケジュール定義にて、何らかの休業日カレンダーを割り当てれば回避可能ですので、この方法をご紹介します。
Ver 2.5.2 でこの問題は解消しました。
旧バージョン利用者向けに、しばらく回避情報は残します。
空の休業日カレンダー定義
まず、対象日が空となる休業日カレンダーを定義します。
項目名 | 設定値 |
---|---|
Name | nonwork_dummy |
Title | 休業日なし |
Documantation | (空でよい) |
Type | Non-working days (休業日)を選択 |
Valid From | 対象期間(空でよい) |
Valid To | 対象期間(空でよい) |
Included Frequencies |
Weekdays にてEvery Day を選択 |
Excluded Frequencies |
Weekdays にてEvery Day を選択 |
Show Preview を確認し、下記のように全日程が除外日となっていることを確認します。
スケジュールの定義
休業日を考慮しない、毎日実施のスケジュールの定義を行います。
Type | Calendar | Repeat Interval | Start Time | On Non-working Day |
---|---|---|---|---|
営業日 | work_alldays | Single Start | 10:00(任意) |
ignore non-working day (休業日でも実行) |
休業日 | nonwork_dummy(任意) | - | - | - |
※ignore non-working day
を選べば、通常の休業日カレンダーでも構いませんが、区別しやすくdummyを割り当てます。
Show Preview を確認し、休業日が影響していないことを確認します。
このように、何らかの休業日カレンダーを割り当てることで、休日でもDailyPlanが作成されます。
一部でも休業日カレンダーを用いる場合は、休業日が不要なスケジュール定義においても、このダミー休業日定義を割り当てることをお勧めします。
最後に
営業日処理を利用すると、人の業務の流れに合わせた処理の自動化が組みやすくなります。
関連する関係会社、銀行などのカレンダー定義を作り、自動処理の幅を広げることができます。
今よりさらに業務の自動化を推し進めるために、是非マスターしてください。
また、休業日情報(祝日、会社休業日)の毎年のメンテナンスは避けられません。
したがって、休業日情報を含むカレンダーは、できるだけ少なく済ませることをお勧めします。