BizRobo!BasicでN営業日に実行させる処理

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

#はじめに
人事部や経理部などでは、業務上よくN営業日に処理を行うことが多々あると思います。以前投稿した「[Bizrobo!Basicで祝日時は処理をしないようにする処理](https://qiita.com/auco67/items/1cac4f101a723be4a33d)」から派生して、今回は「N営業日に処理を実行させる」ロボットを作成してみました。

#前提
前提として、「[Bizrobo!Basicで祝日時は処理をしないようにする処理](https://qiita.com/auco67/items/1cac4f101a723be4a33d)」のロボットをベースとしています。そのため、以下項目についても、今回も同様となりますので、ここでの記載は割愛いたします。
**祝日または企業指定休日判定**
**使用したDesign Studioのバージョン**
**ロボット構成**
#ロボットで使用するタイプ
ロボットで使用するタイプは以下になります。
**HolidayInfo.type**
スニペット「祝日判定」で使用します。
![タイプ_祝日情報.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/2a51e2c9-678e-c031-0618-aaa2d8deceef.png)

**WorkDateInfo.type**
属性[ in_WorkRunDate ]は、N営業日のNの数字を入力しておきます。（例:12月の第14営業日）
![type_営業日情報.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/5c2b1e3e-2baf-f5ba-0925-5b5d0c75caa8.png)
#ロボット処理
1. ロボット構成を元に、「N営業日判定」処理グループと、「実行判定」による処理有無を追加します。
![ロボット全体像.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/15850eaa-642b-a618-a394-e98df1539d15.png)

2.「N営業日判定」処理グループを展開します。
![ロボット全体像_展開.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/29cad2ba-bde9-eb76-3428-cebe0a85df7e.png)
　2-1. 無限ループであるRepeatを開始する
　2-2. N営業日判定ではタイプWorkDateInfoの属性[ in_WorkRunDate ]と[ DateCounter ]が同じ
　　かどうか判定する
　　同じ場合:　Repeatを終了し、2-7.へ進む
　　同じでない場合:　後続処理へ進む
　2-3. タイプWorkDateInfoの属性[ Counter ]にRepeatのiterationを格納する
　2-4. AssignM月1日設定ではタイプWorkDateInfoの属性[ out_WorkDate ]へシステム日時から
　　「yyyy-MM-dd 00:00:00.000」形式で設定する。[dd]の部分は属性[ Counter ]を設定する。
　　（例:属性[ Counter=1 ]の場合、属性[ out_WorkDate=2021-12-01 00:00:00.000 ]となる)
　　　※詳細は、下記「Tips」をご覧ください。
　2-5. 属性[ out_Workdate ]が土日であるかどうか判定する
　　　土日である場合: Repeatへ戻り繰り返す
　　　土日ではない場合:　後続処理へ進む
　2-6. 属性[ out_Workdate ]が祝日であるか判定する
　　　祝日である場合: Repeatへ戻り繰り返す
　　　祝日でない場合:　後続処理で属性[ DateCounter ]を1インクリメントする
　2-7. 本日がN営業日であるかどうか判定する
　　　本日がN営業日である場合:　属性[ WorkDateFlg ]をONしN営業日をログ出力
　　　本日がN営業日でない場合:　対象外終了ログ出力

3.次のブランチの「実行判定」では、N営業日フラグがONまたはOFFであるか判定します。
　実行有無フラグがONの場合:　後続の処理を進める
　実行有無フラグがOFFの場合:　後続の処理はスキップする
![ロボット全体像_判定.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/61087ecc-4c19-778a-be60-321c7ac344c6.png)

#ロボット実行結果
1. 現在日時2021-12-20が第5営業日であるかテストします。
　※タイプ[ WorkDateInfo ]の属性[ in_WorkRunDate ]を「5」としています。
![ロボット実行結果_第５営業日.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/682c4f6a-6684-8fcf-17f5-af368fb055c9.png)

1. 現在日時2021-12-20が第14営業日であるかテストします。
　※タイプ[ WorkDateInfo ]の属性[ in_WorkRunDate ]を「14」としています。
![ロボット実行結果_第14営業日.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/f9521b51-5cbf-d089-e062-66604dd0f279.png)

#Tips
###Repeat - Next
RepeatとNextの間は無限に繰り返されるため、その間である条件でRepeatを終了する値判定を組み込むことが必要です。(例：赤枠のRepeatとNextは無限ループとなり青枠の条件判定でRepeatを終了となります)
![Repeat-Next.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/10ac9695-a375-7f93-2ae3-1f5352497928.png)
次のように青枠の条件判定をしています。
![N営業日判定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/523548f7-29cf-6e6f-8ec9-094ad4719bb0.png)

###Assign M月1日設定
このステップでは、システム日時から「yyyy-MM-dd 00:00:00.000」形式でDate型の属性[ out_WorkDate ]に日付を作成します。次のように、変数の割当では、「コンバータ」で値に２つ設定を行っています。

1. タイプ[ WorkDayInfo ]の属性[ Counter ]を取得する
![M月D日設定_1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/2ab213f8-d20e-b331-9673-a50b060cba4f.png)

2. 属性[ Counter ]:INPUTの桁数による分岐
　桁数が2以下の場合：　前に0を追加し「2021-12-0d 00:00:00.000」とする
　桁数が2以下でない場合:　[dd]に挿入して「2021-12-dd 00:00:00.000」とする
　**構文:　条件式 ? 真の場合 : 偽の場合**　
![M月D日設定_2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/9fcac008-0492-8b3f-959b-2811946952c2.png)

#補足
1. 値の設定方法は、「値」、「変数」、「エクスプレッション」、「コンバータ」の４つがあります。
1. 「コンバータ」で変数を取得すると、その後の「エクスプレッション」では「INPUT」と記述すると取得した値として扱うことができます。

#おわりに
ループのアクションには以下複数用意されていますが、使い方がよくわかっていなかったとき、ループの終わりがよく理解できず、ループを抜けた後の処理に四苦八苦しました。ループを抜けた後の処理は、ループの前でブランチを切っておけば良いことがわかってからは、ループの扱いが怖くなくなりました。一歩一歩前進ができていることに、自分に万歳です！！

つたない文章を最後まで読みいただきまして、ありがとうございました。
![ループ種類.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1477705/db243028-2e00-849c-0f96-c2f4903a015d.png)