Bizrobo!Basicで祝日時は処理をしないようにする処理

はじめまして、BizRobo! Basicをお勉強中のものです。
どうぞよろしくお願いいたします。

#はじめに
BizRobo! Basicには、ロボットの実行をManagement Consoleでスケジュール設定ができます。
例えば、平日(月曜～金曜)に作動させたい場合は、スケジュールのcron方式でスケジュール実行ができます。しかしながら、祝日や企業指定休日には、ロボットを実行させたくないという場合、ロボットの処理はじめに「祝日または企業指定休日判定」を組み込まなければなりません。今回、その処理の部分をスニペットで作成しロボットを作成しました。

#Management Consoleのスケジュール指定方法
Management Consoleのスケジュール指定方法は、「シンプル方式」と「cron方式」の２つあります。

**シンプル方式**
単純に一定周期毎の実行を設定します。[繰り返し期間]に実行間隔(毎秒/毎分/毎時/毎日)を指定します。[開始日(ローカル時間)]にスケジュールの起点となる日時を指定します。

**cron方式**
曜日指定や実行時間帯指定、実行期限指定などが設定できます。設定は次のような UNIX/Linux の Crontab 書式でスケジュールを記載します。
>　“秒 分 時 日 月 曜日 年(オプション)”

また、曜日の要素を「MON-FRI」と定義した場合には「月、火、水、木、金」の指定になります。例えば、月曜日から金曜日の15時にロボットを実行させたい場合は、次のように記載します。
>　"0 0 15 * * MON-FRI ?"

:::note info
BizRoboは、ナレッジが専用のポータルサイトがあります。ポータルサイトを閲覧するためには、アカウント登録が必要です。ナレッジには、上記のスケジュール設定方法の詳細が記載されていますので、そちらで詳しくご覧ください。
:::

(BizRoboポータルサイト: [BizRobo! POTAL](https://portal.bizrobo.com/ja/login "BizRobo! POTAL"))

#祝日または企業指定休日判定
前提として、祝日と企業指定休日を一覧にしたファイルを用意します。
今回は、現時点が2021年12月17日であるため、次のような2021年12月1日から2022年12月31日までの祝日と企業指定休日の一覧を作成しました。
![祝日および企業指定休日_20211201-20221231.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/ef393d28-4e9f-4586-f4e5-f98bd6539ca0.png)

#使用したDesign Studioのバージョン
Design Studio 10.7.0.9

#ロボット構成
ロボットでは、以下構成を基本としています。
1. 開始ログ出力
2. TRY処理
　・エラーが発生した場合：各ステップの「エラー処理」タグ上で「次の代替手段を試行」
　　　　　　　　　　　　　でTRYステップを設定する (※CATCH処理へ進む)
　・エラーが発生しなかった場合：終了ログ出力
3. CATCH処理(エラーが発生した場合):エラーメッセージをログ出力

**ロボット構成**
![ロボット構成.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/4b521be6-d977-122e-303a-923f701bc182.png)


**エラー処理**
ステップの「エラー処理」タグ上で「次の代替手段を試行」をTRYを指定する
![エラー処理.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/8bcf6e3c-6047-506b-d15b-7be0e7d72d9d.png)

#ロボット処理
1. ロボット構成を元に、「ロボット実行判定」処理グループと、「実行判定」による処理有無を追加します。

![ロボット全体像.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/052b7346-2414-57e3-eee2-94ec5969b435.png)

2.「ロボット実行判定」処理グループを展開します。
　2-1. 現在日をある変数に設定する
　2-2. 祝日判定スニペットで現在日が祝日にあたるかどうか確認する
　2-3. 祝日判定スニペットの結果をもとに、祝日判定で次のとおり設定する
　　祝日の場合:　対象外終了ログ出力する
　　祝日でない場合:　実行有無フラグをONに設定する(※実行有無フラグのデフォルトはOFF)
![ロボット実行判定展開.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/dd11089f-1e01-e669-14b1-7bb2eb146a5c.png)


3.スニペット「祝日判定」を展開します。
　3-1. 祝日フラグをOFFに設定する
　3-2. 祝日と企業指定休日を一覧にしたファイルを読み込む
　3-3. 一覧を行ループし日付を取得する
　3-4. 現在日変数と日付変数が同日であるかどうか判定する
　　　　同日でない場合:　次行へ進む
　　　　同日である場合:　祝日フラグをONに設定し行ループを抜ける
　3-5. 祝日と企業指定休日を一覧にしたファイルを閉じる
![祝日判定スニペット.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/74e4de6a-1bc6-b2ab-e4f6-09b5c4780f38.png)

4.次のブランチの「実行判定」では、実行有無フラグがONまたはOFFであるか判定します。
　実行有無フラグがONの場合:　後続の処理を進める
　実行有無フラグがOFFの場合:　後続の処理はスキップする
![ロボット全体像_実行判定.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/cf606381-392b-e968-67ac-a0193563ee87.png)

#ロボットで使用するタイプ
**HolidayInfo.type**
![タイプ_祝日情報.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/507990b2-7943-e7c4-5662-9cb8583123d3.png)

#ロボット実行結果
1. 現在日を2021/12/17で実行すると、祝日でも企業指定休日でもないため赤丸部分の処理は実行され以下ログ出力となる。
![ロボット実行結果_20211217.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/f44ee274-cf7c-1328-6430-e4d79b938b05.png)

2.現在日を2021/12/31として実行すると、企業指定休日にあたるため以下ログ出力となる。
　2-1. 現在日設定しているステップを以下の通り変更する
　　変更前：変数にdate関数を設定し「 00:00:00.000」と後に追加する
　　変更後：変数に文字列「2021-12-31」を設定し「 00:00:00.000」と後に追加する
![ロボット実行結果_20211231.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/a6c3786c-ce38-ad00-0340-e11f2d211ce2.png)

#おわりに
RPAのツールは市場には沢山ありますが、使いやすい機能があったり、なかったりします。ない機能をどう対応するか四苦八苦して作り上げることが開発者の醍醐味ではないでしょうか？

最後まで読んでいただきましてありがとうございました。