MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

指定時刻で実行されるフローの構築パターン

Twitterでたまたま見かけたツイートに対して、考えられるフローのパターン2種を解説します。

課題としては

「9:00と17:30」みたいに、分の値が違う二つの時刻を設定できないだろうか?

というものでした。

スケジュール実行フロー

このような指定した時刻に実行されるフローを作成する場合、トリガーには「繰り返し」を選ぶのが一般的です。

過去の投稿でもスケジュール実行についていくつかのパターンでまとめていますが、トリガーの設定だけでは上記の課題のように異なる時刻の 分(minites) 違いを指定することはできません。

mofumofupower.hatenablog.com

Previewを見てもわかる通り、時間 (hours) と 分 (minites) で指定したすべての組み合わせでフローがトリガーされます。

例えば 9:00 と 17:30 にトリガーしたいと思うと、hours に 9, 17 を minites に 00,30 をそれぞれ指定しますが、そうすると 9:30 と 17:00 にもトリガーされてしまいます。

ではこれをどうやって間引いていくかというのが今回のパターン2種です。

1. トリガーして即終了

最も簡単には『トリガーすることは許容する。指定時刻以外では即終了させる』というパターンです。

これを実現するには 条件分岐、終了アクション そして少しの式を使います。

条件分岐では createArray('09:00','17:30')のようにして、実行したい時刻を含む配列を作ります。 (この式では ["09:00","17:30"] という配列が出来上がる)

この配列が、現在時刻を含むかでフローを続行するか終了させるかを判定しているわけです。

条件分岐のもう一個の式では日本時間での時刻をHH:mm形式で取得しています。 convertFromUtc(utcNow(),'Tokyo Standard Time','HH:mm')

※この表現はよく使うので覚えておくと吉

これで createArray内で指定した時刻以外ではトリガーはするけど即終了するというフローが出来上がります。

2. トリガーから間引く

少し面倒ですがスケジュール実行フローの設定で入力したものからさらにトリガーの実行を間引くことができます。

それが Trigger Condition の設定です。 Trigger Conditionについては以前まとめたものがあるのでそちらをご確認ください。

mofumofupower.hatenablog.com

今回の設定では、先ほどの条件分岐と同じ式を Trigger Conditionに設定していきます。

条件分岐の "含む" という部分も式になっているので少し分かりづらいですが、以下の式をセットしています。

@contains(createArray('09:00', '17:30'), convertFromUtc(utcNow(), 'Tokyo Standard Time', 'HH:mm'))

構成は先ほどと同じですね。 createArrayで指定した時刻と 日本時間を比べています。 Trigger Conditionではこれがtrueになったときだけトリガーが実行されます。

検証の都合上少し設定が違いますが、以下のとおり、14:00, 14:20, 14:40 に設定しているトリガーに @contains(createArray('14:00', '14:40'), convertFromUtc(utcNow(), 'Tokyo Standard Time', 'HH:mm')) というTrigger Conditionを追加した結果、 14:20 の実行が間引かれていることが分かります。

おわり

今回は異なる時刻に定期実行するフローのトリガーのパターン2種をご紹介しました。 トリガーしてしまうとフローの実行履歴に残ってしまうので、それを嫌う場合にはTrigger Conditionで間引きを入れるのもよいのかなと思います。