【AutomationAnywhere】Botのご紹介 – 営業日取得Bot
こんにちは。TECHVAN RPAチームです!
今回は、弊社で作成したAutomationAnywhereの営業日取得Botをご紹介したいと思います。
正確には、営業日取得MetaBotに5つのLogicを作成しています。
今回このMetaBotを作成した経緯は、
弊社のとある業務を別のRPAツールとExcelを使用して自動化したことがあったのですが、
それをAAを使用して作り替える話が出てきました。
そこで、ついでにExcelを使わず全ての処理をAAでできないか、
というところから、Excelで行っていた営業日算出処理もAAでやってみることになりました。
初めはAAで営業日を判断するのは、難しいのでは?
と思っていたのですが、何事も為せば成る!ということでなんとかなりました。
もし、同じようなお悩みをお持ちの方がいらっしゃれば、
ゴリゴリのロジックを書くことが苦手なAAでもやればできるぞ!
ということを感じていただければいいなと思います!
Logicのご紹介
それでは、1つずつLogicの機能をご紹介していきたいと思います。
各ロジックの相関関係はこんな感じです。
①曜日取得Logic
引数:対象日付(YYYY/MM/DD)
戻り値:曜日の漢字1文字(日~土)
これは、対象日付を渡すと、対応した曜日を返してくれるLogicです。
年月日からいろいろ計算すると日~土までのインデックスを求めることができるので、
それを戻り値として返却します。
②国指定祝日判定Logic
引数:対象日付(YYYY/MM/DD)
戻り値:対象日が国指定祝日か否かのフラグ(国指定祝日なら 1、違うなら 0)
日本の祝日はどうやって判断すればいいのかなぁとネット検索していたところ、
なんと、内閣府がCSVファイルで国民の祝日データを用意してくれていることが判明したため、
それを利用して判別しています。
内容としては、内閣府の祝日CSVファイルをダウンロードし、
対象日付と比較して一致するかどうかを判定している、というものです。
一つ悩んでいることは、ダウンロードした祝日CSVファイルをどうするかということです。
初めの段階では、祝日を判定したLogicの最後に祝日CSVファイルを削除する、
という処理を入れていたのですが、それだと複数日を処理する場合に毎回ダウンロードして消して、
という工程を踏むため、処理がかなり遅くなり、無駄も多いので考え直しました。
現時点での着地点としては、祝日データは基本的に1年間は更新されない、という考えをもとに、
祝日CSVファイルは一度ダウンロードしたら残り続け、
次の年になったら1度だけダウンロードして更新する、という処理に落ち着きました。
祝日CSVファイルが残り続けるのは少し気持ち悪いですが、
これだとダウンロード処理は1年に1度だけになるので、処理が格段に軽くなります。
③営業日判定Logic
引数:対象日付(YYYY/MM/DD)/独自休日リスト(YYYY/MM/DDのリスト型)
戻り値:対象日が営業日か否かのフラグ(国指定祝日なら 1、違うなら 0)
このLogicは、引数の対象日付に対して、①と②の処理と引数でもらった独自休日リストを比較し、
対象日付が営業日かどうかを判定します。
独自休日リストは、土日と国指定休日以外の各企業毎の休日に対応するために用意しているものです。
それと、国指定祝日には年末年始休暇は含まれていないため、そこの考慮が必要な場合は、
独自休日リストに年末年始の日付を追加して渡す必要があります。
④日付加算減算Logic
引数:対象日付(YYYY/MM/DD)/加算日数(マイナス値可)
戻り値:加算または減算した日付(YYYY/MM/DD)
これは、対象日付と加算日数から日付を進めたり、戻したりしてくれる処理です。
日付の加算減算の処理をするときは、
一度年と月と日を分解し、計算してから繋ぎ直して返却するのですが、
VariableOperationコマンドを使用して「年/月/日」として繋ぎ直そうとすると、
それぞれを数値として認識し、割り算を行ってしまう問題が発生してしまいました。
そこで「年&月&日」でくっつけてから、replace処理で「&」を「/」に変換する、
という変則的な処理をして解決しました。
AA v.11には型の概念がないので、そういうところですんなりいかないことがありますね。
⑤X日営業日取得Logic
引数:対象日付(YYYY/MM/DD)/独自休日リスト(YYYY/MM/DDのリスト型)/
営業日日数(何日後の営業日を取得するかの数値 マイナスも可)
戻り値:計算後の営業日日付(YYYY/MM/DD)
このLogicは、③と④の組み合わせで作成しています。
対象日付を③に渡して判定し、営業日なら1ループ、非営業日ならループカウント無し。
④に対象日付を渡して、日付を1日進める、または1日戻って次の営業日判定をします。
挙動として気を付ける点は、引数の営業日日数に1を設定しても、-1を設定しても、
対象日付当日が営業日の場合は同じ日を返すところです。
もう一つ、営業日日数に0を渡した場合は、
何も判定しないで対象日付をそのまま返す処理になっています。
最後に
なかなか思い通りにいかないところもありましたが、
結果としては内閣府からのCSVダウンロードなどもあり、
AAに処理を移すメリットはあったのかなと思いました。
もしこの営業日取得Botに需要があれば、BotStoreにも挙げてみたいなと思っています。
お問い合わせはこちらまで ⇒ テクバンお問い合わせフォーム