#Trigger Conditions??
Docsだと全然情報ないのですが、各トリガー(Flowの開始部分)に追加で設定できる発動条件です。
トリガーの[・・・]をクリックして表示されるメニューでSettingsを選ぶと表示されます。
ここには、もともとのトリガーの条件とは別に、トリガーしたときのアイテムや各種データをもとに、さらに発動条件を指定することができます。
例えば、SharePointのアイテム作成トリガーで、特定のステータス(選択肢フィールドの値)の場合だったら~とか、反復実行で1分おき に設定するのだけど、発動は日中だけにしたい とか。
そういった、もとのトリガーだけではカバーしきれないようなカスタムの発動条件が定義できます。
Trigger Conditionsを使わない場合、トリガーの次のステップでIFやSWITCH等の分岐条件を入れるかと思います。Falseなら実行終了とか。
そういった「発動はさせるけど、すぐ条件で終わらせることがある」ようなFlowに対して、Trigger Conditionsは有効に働きます。
何がうれしい?
単純にはトリガー回数を減らせるので、実行履歴が見やすくなります。あとは誤って深夜とかに発動してPush通知飛んじゃう みたいなことも避けれるかもしれません。
ただ、多少は数式を書かないといけないので、そこだけはトレードオフです。
何に使える?
すぐ思いついたのは以下のパターンです。
- SharePointリスト/ライブラリで、更新のみ検出する (標準では作成と更新どちらも発動する)
- リストの特定のステータスでのみ対象とする (これも作成・更新で後ろでIFしたりする)
- 反復のスケジュール実行で、実行のウィンドウを指定する (繰り返しを1日おきで、時間指定でもいいけど短いインターバルだと結構大変)
Trigger Conditionsの設定
簡単にいくつかのパターンでTrigger Conditionsの設定方法を見てみます。
1. トリガーしたときのデータに応じた条件
例として、SharePointの選択肢フィールドの値に応じた処理を考えてみます。
データに応じた処理を行う場合、基本的には triggerBody()
に連なるデータを参照して、条件を書きます。
最初はどんな式を書けばいいのか、どんなデータを受信しているかわからないと思いますので、すごく短い、ただtriggerBody()をComposeするだけのFlowを作ってテストします。
これで得られる結果をもとにして、例えば"Title"のデータを使いたいなら
triggerBody()?['Title']
を利用します。
選択肢フィールドであるStatus は階層的になっているので、その値を使うときは triggerBody()?['Status']?['Value']
になります。
Trigger Conditionsで必須なのは条件式、つまり論理演算です。公式のドキュメントが一番見やすいので こちら をご覧ください。
あとはお約束事ですが、Trigger Conditionsの式を書くときは先頭に @ をつけます。
これらを踏まえて、『Status列の値が"Closed"の場合』 というTrigger Conditionsは
@equals(triggerBody()?['Status']?['Value'],'Closed')
このように書けます。
2. データ以外の情報を利用する場合
あまり思いつきませんが、指定した時間(hour)で高頻度でFlowを実行させたい場合(7:00~8:00の間に5分間隔とか)には、
utcNow() : トリガーした時間 (UTC)
formatDateTime() : utcNow()から時間(hour)だけを取り出すために利用
int() : formatDateTimeの結果のStringを整数に変換
これらの関数を組み合わせていきます。
実際に一日ONにしてみましたが、指定時間の間だけ、5分間隔で実行されていました。
おわりに
標準のトリガーで提供されている条件以上に、何かカスタマイズした条件を指定したい場合、Trigger Conditionsの利用は非常に有効です。
Flow全体をきれいに整えることにもつながりますし、個人的には実行履歴が埋め尽くされないのがメリットだと思います。
少し数式になれる必要はありますが、使いこなせればなかなか面白いので、一度試してみてください!