LoginSignup
1
0

More than 1 year has passed since last update.

JS7® JobScheduler スケジュールの設定

Last updated at Posted at 2022-05-17

概要

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 より、新規カレンダーを作成します。
image.png

名前は、work_alldaysとしてください。
image.png

設定は下記のように行います。
※ここでは休日は考慮しなくて構いません。
image.png

項目名 設定値
Name work_alldays
Title 毎日(Descriptionに相当)
Documantation (空でよい)
Type Working days (営業日)を選択
Valid From 対象期間(空でよい)
Valid To 対象期間(空でよい)

Included Frequenciesが選択されていることを確認のうえ、Add Frequencyをクリック
image.png

Weekdaysを選択し、Every Dayを選択。Add Frequency で追加する。
image.png

Every day が追加されたことを確認し、Releaseしてください。
image.png

休業日カレンダーを作成

同様に、休業日のカレンダーを定義します。

名前は、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 を追加
image.png

National Holidays を選択し、 Japan, 2022 で祝日をまとめて追加
image.png

Specific Days を選択し、会社の休業日を追加(夏季、冬季休暇など)
image.png

対象を追加したらCloseしてください。

Show Preview で、対象日付を確認できます。
image.png

image.png

問題なければ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 より、新規スケジュールを作成します。
image.png

名前は sche_WorkdayOrderSample としてください。
image.png

下記のように設定してください。

項目名 設定値
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 をクリック
image.png

Assign Working Day Calendar をクリックします。
image.png
先ほど作ったwork_alldays を追加します。
image.png

追加されたwork_alldaysにて、period をクリック
image.png

下記のように設定し、Save します。
(私の環境ではIMEを無効にしないとうまくSaveできないです・・・)
image.png

項目名 設定値
Repeat Interval Single Start を選択
Start Time 10:00と入力(任意)
On Non-working Day suppress executionを選択 (休日は実行しない)

同様に休業日カレンダーを割り当てます。
Assign Non-Working Day Calendar から nonwork_holidays を追加します。
image.png

営業日、休業日カレンダーが追加されたことを確認の上、Show Preview をクリックしてください。
対象日付が確認できます。
image.png
image.png

問題なければ、Run-time設定は閉じて、Release してください。
image.png

以上でスケジュール定義は完了です。
基本的には、この設定により、営業日スケジュールが追加されます。

(スケジュール定義に従ったOrderの登録は、DailyPlanの機能となります)

【参考】Repeat Interval について

Repeat Interval の設定は、通常は Single Start を選んでください。
cron での 10分毎に実行、毎時15分に実行などの処理の代替え手段とする場合は、WorkFlow定義でCycle処理を利用することを推奨します。
image.png
スケジュール定義でのRepeat設定は、その繰り返し回数分Orderが作成されます。
そのため、Order情報が溢れ、ログの視認性も非常に悪くなります。
またエージェントをメンテナンス停止した場合に、起動後のタイミングで一度に大量のOrderが処理される可能性があります。
WorkFlowのCycle処理を使えば、Orderはあくまで1つとなり、メンテナンス停止時もエージェント起動後より処理が始まるだけです。

応用設定(設定サンプル)

週の営業日初日

月曜のみ対象のカレンダーと、休業日カレンダーの組み合わせで実現できます。

カレンダー定義

項目名 設定値
Name work_monday
Title 月曜(Descriptionに相当)
Documantation (空でよい)
Type Working days (営業日)を選択
Valid From 対象期間(空でよい)
Valid To 対象期間(空でよい)
Included Frequencies WeekdaysMonday を追加

スケジュールの Run-Time設定

Type Calendar Repeat Interval Start Time On Non-working Day
営業日 work_monday Single Start 11:00(任意) after non-working day(翌営業日)
休業日 nonwork_holidays - - -

月曜が休日の週は翌日が対象となっていることをご確認ください。
image.png

週の最終営業日

週初日と同じ要領で設定できます。

カレンダー定義

項目名 設定値
Name work_friday
Title 金曜(Descriptionに相当)
Documantation (空でよい)
Type Working days (営業日)を選択
Valid From 対象期間(空でよい)
Valid To 対象期間(空でよい)
Included Frequencies WeekdaysFriday を追加

スケジュールの Run-Time設定

Type Calendar Repeat Interval Start Time On Non-working Day
営業日 work_friday Single Start 12:00(任意) before non-working day(前営業日)
休業日 nonwork_holidays - - -

毎週最終営業日が対象となっていることをご確認ください。
image.png

毎月第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が赤となる)
image.png

スケジュールの Run-Time設定

Type Calendar Repeat Interval Start Time On Non-working Day
営業日 work_workingday Single Start 11:00(任意) after non-working day(翌営業日)
休業日 nonwork_holidays - - -

さらに Restrictions の設定を追加します。
image.png

MonthDaysより、Count from First Day1 のみ選択して追加、Submit
(営業日カレンダーの1番目の日付が対象となる)
image.png

第1営業日が対象となっていることを確認してください。
image.png

第2営業日、第1~第5営業日、最終営業日(Count from Last Day から追加)なども、同様の方法で設定できます。

営業日と休日の処理を分ける

WorkFlow定義との組み合わせで実現可能です。

WorkFlow定義

あらかじめ、WorkFlow定義にて、Order変数 is_holiday: bool型 デフォルト値 false を定義します。
image.png

休日にスキップしたい箇所は、If条件で、$is_holiday == false の場合のみ実行するように設定します。
image.png

カレンダー定義

休日処理用のカレンダー定義を追加します。

項目名 設定値
Name work_holiday
Title 休業日処理用(Descriptionに相当)
Documantation (空でよい)
Type Working days (営業日)を選択
Valid From 対象期間(空でよい)
Valid To 対象期間(空でよい)
Included Frequencies WeekdaysにてSaturday, Sundayを追加
National HolidaysにてJapan, 2022で祝日追加
Specific Weekdaysにて休業日を追加

スケジュール定義

スケジュール定義にて、営業日処理用のスケジュールと、休日処理用スケジュールを、同時刻で実行されるように定義します。

  • 営業日処理用

    • カレンダー work_workingday を使用
    • Order変数 is_holiday == false を指定
      image.png
  • 休日処理用

    • カレンダー work_holiday を使用
    • Order変数 is_holiday == true を指定
      image.png

これで営業日、休業日でWorkFlowの実行内容を分けることができます。

【補足】休業日カレンダー利用時の回避手段

Ver 2.5.1以前の環境にて、スケジュール定義にて休業日カレンダーを使用した場合、休業日を考慮しない他のスケジュール分も含めて休日のDailyPlanが作られなくなる問題を把握しています。

これについては、各スケジュール定義にて、何らかの休業日カレンダーを割り当てれば回避可能ですので、この方法をご紹介します。

Ver 2.5.2 でこの問題は解消しました。
旧バージョン利用者向けに、しばらく回避情報は残します。

空の休業日カレンダー定義

まず、対象日が空となる休業日カレンダーを定義します。

image.png

項目名 設定値
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 を確認し、下記のように全日程が除外日となっていることを確認します。

image.png

スケジュールの定義

休業日を考慮しない、毎日実施のスケジュールの定義を行います。

スケジュールの Run-Time設定
image.png

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 を確認し、休業日が影響していないことを確認します。
image.png

このように、何らかの休業日カレンダーを割り当てることで、休日でもDailyPlanが作成されます。

一部でも休業日カレンダーを用いる場合は、休業日が不要なスケジュール定義においても、このダミー休業日定義を割り当てることをお勧めします。

最後に

営業日処理を利用すると、人の業務の流れに合わせた処理の自動化が組みやすくなります。
関連する関係会社、銀行などのカレンダー定義を作り、自動処理の幅を広げることができます。
今よりさらに業務の自動化を推し進めるために、是非マスターしてください。

また、休業日情報(祝日、会社休業日)の毎年のメンテナンスは避けられません。
したがって、休業日情報を含むカレンダーは、できるだけ少なく済ませることをお勧めします。

参考

JS7 - Schedules

JS7 - Calendars

JS7 - Cycle Instruction

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0