Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Power Automateで祝日や土日、業務時間後を判定する

はじめに

Power Automateで祝日や土日、業務時間後を判定し、「業務時間外だけ何か処理をしたい」または「業務時間だけ何か処理をしたい」というニーズに応えられるようにしてみました。

祝日データの準備

まず、祝日データを用意します。

内閣府の国民の祝日に関するページからCSVがダウンロードできるので、それをExcelとして保存し、テーブルにしておき、OneDriveなどに保存してPower Automateから参照できるようにします。

image.png

Power Automate 全体像

こんな感じになりました

image.png

解説

ひとまず今回は「土日、祝日、業務時間に特定の処理を行う」方で作ってみます。

トリガー

今回はテストがしやすいようにトリガーは「手動」にして、実行時にUTCのISO 8601形式で入力するようにします。実際にはメールの受信やFormsの投稿など適宜変更します。

受け取ったあと、タイムゾーンの変換アクションで日本時間に変換しておきます。日時を変数に入れるときに式で判定してもいいのですが、ここでアクション作っておくと、トリガーが変わっても基準時間変えるだけでいいのであえて入れてみました。

image.png

変数の初期化

トリガーとなる日時から後の処理で必要な以下の3要素を変数に入れておきます。

  • 年月日
  • 日時のうちの「時」の24時間表記(例 22:30なら"22")
  • 曜日

image.png

年月日は文字列で格納します。式でformatDateTimeを使い、"2021-02-20"のような形式で格納します。

formatDateTime(body('日本時間に変更'),'yyyy-MM-dd')

「時」は後で大小比較をしたいので整数で格納します。式でformatDateTimeを使い、"HH"で24時間表記の「時」のみ取り出します。(hhだと12時間表記になって計算がおかしくなるので注意)

int(formatDateTime(body('日本時間に変更'),'HH'))

曜日は式でdayOfWeek関数を使うと取り出せます。
日月火...土の順で1,2,3...6の数字として判定したものを格納します。
ここも整数型の変数なので、intで変換しておきます。

int(dayOfWeek(body('日本時間に変更')))

祝日情報の読み込み

祝日情報を読み込みます。Excelの「表内に存在する行を一覧表示」アクションを使います。
このアクションで、先ほど内閣府の国民の祝日データをもとに作成したExcelを読み込みます。

この時、フィルタークエリで、今回トリガーで指定された日付で絞り込みます。
また、DateTime形式はISO 8601にしておきます。

image.png

祝日の判定

祝日を判定し分岐します。

image.png

祝日の判定は、祝日情報の読み込みで取得したデータが存在するかどうかで判定します。
式でempty関数を利用します。

empty(outputs('祝日情報の読み込み')?['body/value'])

祝日情報にデータがないと、上記の式はtrueを返し、データがあるとfalseを返します。
言い方を変えると、式がfalseだと祝日ということになります。

祝日の場合は「はい」の分岐に進み、処理(今回は通知送信)を行います。

祝日でない場合は「いいえ」の分岐に進みます。

土日の判定

最初に曜日を判定しているので、その変数を使います。
曜日が0(日曜)または6(土曜)の場合は「はい」の分岐に進み、処理を行います。

「いいえ」の場合はさらに業務時間かどうかの判定に進みます。

image.png

業務時間の判定

最初に時間の「時」の部分(22:30の「22」)を変数に入れいているのでこれを使います。

今回は業務時間を9-17時としました。
なので、And条件で、「時」が9以上かつ17未満であるかどうかを判定します。

条件を満たす場合は「はい」の分岐に進みますが、この場合、業務時間内ということになります。

今回は「土日、祝日、業務時間に特定の処理を行う」ことを想定しています。
言い方を変えると「業務時間内は処理を行わない」ので、「はい」の場合はここで処理を終了します。

image.png

「いいえ」の場合は「業務時間ではない」ことになるので、後続の処理に続きます。

処理

今回はダミーでモバイル通知を入れてありますが、適宜差し替えてください。

image.png

注意点

業務時間の判定は以下のケースでテストしていますが、本番利用の際は各自でテストいただいた上でご利用ください。

  • 平日 業務時間:2021/2/22(月)10時
    • 2021-02-22T01:00:00
  • 平日 業務時間外:2021/2/22(月)20時
    • 2021-02-22T12:00:00
  • 土曜:2021/2/27(土)10時
    • 2021-02-27T01:00:00
  • 祝日:2021/2/23(祝)10時
    • 2021-02-23T01:00:00

また、今回、業務時間を9-17時として作りましたが、厳密には17時ちょうどは業務時間外と判定されます。(16:59:59まで業務時間判定なので実用上は問題ないと思いますが)

なお、業務時間で17:30など「分」も考慮したい場合はもう少し作りこみが必要です。

おわりに

相談受けて作ってみたのですが楽しかったです。

tfunakoshi
AzureとPower Platformが好き。 特にLogic AppやPower Automateが好き。
https://tech.fnk.tokyo/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away