定期実行するけど、祝日だったら動作する(もしくはしない)っていう処理って結構ありませんか?
でも、曜日は比較的簡単に取れるけど、祝日ってそう簡単に取れるのでしょうか?
ということで、そんな貴方に朗報。
Power Automate と Outlook で、簡単に祝日判定ができるやり方をまとめました。
祝日の取得方法
Outlook には、日本の休日という予定表が自動的に入っています。
これを使えば、いちいち毎年祝日を管理するようなテーブルを作る必要もありませんし、祝日が増えたら(もしくは減ったら)勝手に更新されるので、使わない手はないですよね。
なので。休日は以下のように、「イベントのカレンダービューの取得」を使うことにしました。
開始時刻と終了時刻
開始時刻や終了時刻は、実行当日の日付を入れる必要があります。
なお、日本の休日のタイムゾーンUTCで宣言されていますが、時刻は以下のようにすれば良いみたいです。
yyyy-MM-ddT00:00:00.000000
で時刻を指定する必要があるようですし、開始時間が現在日付、終了時刻に翌日の日付を指定する必要があります。
なので、関数を使ってこちらを処理することになります。
formatDateTime(
convertTimeZone(
utcNow(),
'UTC',
'Tokyo Standard Time',
'yyyy-MM-dd'
)
)
formatDateTime(
convertTimeZone(
addDays(
utcNow(),
1
),
'UTC',
'Tokyo Standard Time',
'yyyy-MM-dd'
)
)
関数の解説ですが
-
utcNow
で現在の日時をUTCで取得します。 - 終了時刻のみ、
utcNow
に対してaddDays
で1日加算します。 -
convertTimeZone
でUTCをJST(日本標準時)に変換、かつ時間を切り捨てるためにフォーマットをyyyy-MM-dd
に変換します。 -
formatDateTime
でyyyy-MM-dd
をyyyy-MM-ddT00:00:00.000000
に変換します。
すると、以下のように、現在日時を元に、開始時刻と終了時刻に適切な値が入力されます。
結果はアレイ変数へ
Outlookのこのアクションは、複数のデータが出ることを前提(アレイ型)で出力されます。
今回、この結果が存在するか否かという判定をすることで、祝日判定を行います。
なので、後続で無用な Apply to Each を追加されないよう、アレイ型で変数を宣言します。
変数宣言時の値に割り当てる動的コンテンツには、イベントのカレンダービューで取得した値の一覧を指定します。
いよいよ判定です
変数がカラだった場合は平日、そうじゃない時は祝日と判定できますので、そのとおりに組んでいきます。
条件式を以下のようにします。
empty(variables('結果'))
※変数名を「結果」としていた場合
このように組むことで、はいの部分には平日のみが動作する処理、いいえの部分には祝日のみが動作する処理が完成します。
なお、この処理は、LogicApps でも応用して導入することができると思いますので、社内システムのバッチ処理に使っている方は、ぜひこちらの祝日判定をお試しされるとよいのではないでしょうか?
まとめ
いかがでしたでしょうか?
実はこの処理、より関数を使いこなせば、より少ないアクションで判定させることができると思います。
ですが、そうなるとプロ開発者に依頼しないといけなくなってしまいます。
ですので、できるだけ処理を簡単に、ある程度GUIでもらくらく作ることができる方法としてまとめてみました。
皆さんの業務の一助や、アイデアにつながれば幸いです。