PowerAutomateで平日の決まった時間に1日1回実行するフローを作りたくなりました。Teamsに決まった時間に投稿したいな、と思ったのがきっかけです。
ただ、PowerAutomateの繰り返し実行の設定は、あまり細かい設定には向いておらず、平日(月曜~金曜)のみ実行する、といった処理を作るためには一工夫必要でした。
方法はいろいろあるのかもしれないが、私がうまくいったのは日付から曜日を戻り値として取得するdayOfWeek関数と、その値を判定するequals関数とor関数の組み合わせ。
(2020/7/12追記)
単純に曜日を指定するだけであれば、dayOfWeek関数を使わないもっと簡単な方法があったので、別記事に書いてみました
dayOfWeek関数の使い方
dayOfWeek関数は、dayOfWeek(”)という記述になり、特定の日付の曜日が欲しいのであれば、シングルコーテーションの中に対象の日付を(相変わらずUTCで)記載。
dayOfWeek(‘2018-03-15T13:27:36Z’)
現在時刻の関数を使うのであれば、シングルコーテーションは不要で、関数を記載する。
dayOfWeek(utcNow())
もちろん日本時間の曜日が欲しいので、dayOfWeek(getFutureTime(9, ‘Hour’))に。特に日時処理は深夜や朝一に動かすことが多いため、8:59までに実行するものはUTCとは曜日が異なることから、utcNowを使うと想定通りの結果とならない。これは、以下の記事を参考にしてもらえると良いかな、と思います。
そして、dayOfWeek関数の戻り値は「日曜日」とか「SUNDAY」などといったご丁寧なものではなく、数字。日曜日が0で、月曜日が1~土曜日が6という7種類の数字。これが、月曜日始まりで土曜日が5、日曜日が6なら4以下(lessOrEquals関数)でいけるが、0と6の場合は実行したくない、1から5なら実行したいという作りにしないといけない。
というわけで0か6だったらtrueを返すというequals関数と2つの結果を見てtrueかfalseを返すor関数の組み合わせにしてみました。
or(equals(dayOfWeek(getFutureTime(9, ‘Hour’)), 0), equals(dayOfWeek(getFutureTime(9, ‘Hour’)), 6))
中身を簡単にわけて説明すると、
equals(dayOfWeek(getFutureTime(9, ‘Hour’)), 0) ・・・これが日曜日かどうかの判定equals(dayOfWeek(getFutureTime(9, ‘Hour’)), 6) ・・・これが土曜日かどうかの判定
日曜日か土曜日であれば、どちらかの結果がtrueになる。この2つの結果をみて、少なくとも1つの式がtrueの場合はtrueを返し、どちらの式もfalseの場合はfalseを返すor関数で判定する。
or(日曜日判定,土曜日判定)
このor関数の結果が、以下のようになる。
日曜日の場合・・・or(true,false)→true
月~金の場合・・・or(false,false)→false
土曜日の場合・・・or(false,true)→true
あとは、PowerAutomateの条件アクションでこの関数の結果が、false に等しい場合、という設定にして、分岐後の「はいの場合」に平日に行いたい処理を、「いいえの場合」に土日に行いたい処理(場合によっては処理なし)を設定するという作りにすることで、平日のみ実行するフローの作成ができるようになります。
平日のみ実行したいアクションというのは色々あると思います。バッチ処理的な何かとか。もちろん祝日に対応できていないという点はありますが、月~金だけ実行できるだけでも結構使い勝手良かったりします。同じ考え方を使うと、月曜と火曜日だけなど特定の曜日だけというのも出来ます。是非使ってみてください。
コメント
[…] Power Automateで平日のみ実行するフローを作る方法として、以前、dayOfWeek関数を使う方法をエントリしたが、久しぶりに見てみるとデフォルトで用意されている「繰り返し」のトリガーでもっと簡単に実装できることに気が付いた。いつから出来るようになったのだろうか?しかしこれだと、平日だけでなく、指定曜日だけ実行できるので、むしろこの方法が正しい。 […]
平日/休日判定のやりかたがわからなくて困ってたので助かりました。ありがとうございます。
判定のところは、『6で割った時のあまりが0』という条件にするとよりすっきり出来ると思います。
お役に立ててよかったです!コメントありがとうございます!
確かに、6で割る方がシンプルですね、そっちに変えようかな。。。ありがとうございます。