Twitterでたまたま見かけたツイートに対して、考えられるフローのパターン2種を解説します。
課題としては
「9:00と17:30」みたいに、分の値が違う二つの時刻を設定できないだろうか?
というものでした。
スケジュール実行フロー
このような指定した時刻に実行されるフローを作成する場合、トリガーには「繰り返し」を選ぶのが一般的です。
過去の投稿でもスケジュール実行についていくつかのパターンでまとめていますが、トリガーの設定だけでは上記の課題のように異なる時刻の 分(minites) 違いを指定することはできません。
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については以前まとめたものがあるのでそちらをご確認ください。
今回の設定では、先ほどの条件分岐と同じ式を 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で間引きを入れるのもよいのかなと思います。