BizRobo! Basicをお勉強中のものです。どうぞよろしくお願いいたします。
#はじめに
人事部や経理部などでは、業務上よくN営業日に処理を行うことが多々あると思います。以前投稿した「Bizrobo!Basicで祝日時は処理をしないようにする処理」から派生して、今回は「N営業日に処理を実行させる」ロボットを作成してみました。
#前提
前提として、「Bizrobo!Basicで祝日時は処理をしないようにする処理」のロボットをベースとしています。そのため、以下項目についても、今回も同様となりますので、ここでの記載は割愛いたします。
祝日または企業指定休日判定
使用したDesign Studioのバージョン
ロボット構成
#ロボットで使用するタイプ
ロボットで使用するタイプは以下になります。
HolidayInfo.type
スニペット「祝日判定」で使用します。
WorkDateInfo.type
属性[ in_WorkRunDate ]は、N営業日のNの数字を入力しておきます。(例:12月の第14営業日)
#ロボット処理
2.「N営業日判定」処理グループを展開します。
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の場合: 後続の処理はスキップする
#ロボット実行結果
-
現在日時2021-12-20が第5営業日であるかテストします。
※タイプ[ WorkDateInfo ]の属性[ in_WorkRunDate ]を「5」としています。
-
現在日時2021-12-20が第14営業日であるかテストします。
※タイプ[ WorkDateInfo ]の属性[ in_WorkRunDate ]を「14」としています。
#Tips
###Repeat - Next
RepeatとNextの間は無限に繰り返されるため、その間である条件でRepeatを終了する値判定を組み込むことが必要です。(例:赤枠のRepeatとNextは無限ループとなり青枠の条件判定でRepeatを終了となります)
次のように青枠の条件判定をしています。
###Assign M月1日設定
このステップでは、システム日時から「yyyy-MM-dd 00:00:00.000」形式でDate型の属性[ out_WorkDate ]に日付を作成します。次のように、変数の割当では、「コンバータ」で値に2つ設定を行っています。
-
属性[ Counter ]:INPUTの桁数による分岐
桁数が2以下の場合: 前に0を追加し「2021-12-0d 00:00:00.000」とする
桁数が2以下でない場合: [dd]に挿入して「2021-12-dd 00:00:00.000」とする
構文: 条件式 ? 真の場合 : 偽の場合
#補足
- 値の設定方法は、「値」、「変数」、「エクスプレッション」、「コンバータ」の4つがあります。
- 「コンバータ」で変数を取得すると、その後の「エクスプレッション」では「INPUT」と記述すると取得した値として扱うことができます。
#おわりに
ループのアクションには以下複数用意されていますが、使い方がよくわかっていなかったとき、ループの終わりがよく理解できず、ループを抜けた後の処理に四苦八苦しました。ループを抜けた後の処理は、ループの前でブランチを切っておけば良いことがわかってからは、ループの扱いが怖くなくなりました。一歩一歩前進ができていることに、自分に万歳です!!