15
6

列の種類ごとの Power Automate のトリガー条件の書き方について

Last updated at Posted at 2024-05-07

はじめに

Power Automate で以下のトリガーを利用する際、フロー内で更新を行うことで、再度トリガーが発動し、結果的に無限ループしてしまうリスクがあるため、その点を考慮する作りにする必要があります。

image.png

また、例えば、以下のようにお問い合わせの管理を SharePoint リストで行っている際、ステータスを"回答済み"に変更したタイミングで 1 回だけ通知したいような場合、こちらのトリガーのみでは要件を満たせません。

具体的には、こちらのトリガーは、スタータスの列以外含め、アイテムの変更が行われるとトリガーが発動するため、例えば、ステータスを "回答済み" に変更した後 (する前にも動作します)、アイテムが変更されるたびに通知が行われることになります。

image.png

このように、意図しないタイミングにトリガーが発動して無限ループしたり、無駄に通知を送ったりしてしまうことを防ぐため、トリガー条件という機能があります。端的に言うと、トリガーが発動する条件をもうちょっと細かくすることが出来る機能です。

上記の例でいうと、既に通知済みかどうかを判定する "はい/いいえ"の列を別途作成し、通知をしたら "はい" に変更し、ステータスが "回答済み" かつ "回答通知済み" が "いいえ" の場合のみトリガーが発動するようにする感じです。

image.png

image.png

こちらのトリガー条件の書き方について、以下を見て分かる通り、個人的に結構癖があるというか、市民開発者の方にとってかなり難しいと思うのと、列の種類によって書き方が少なからず異なるため、情報を整理したいと思います。

image.png

image.png

文字列が特定の文字の場合

以下の文字列型の列が特定の文字の場合のみトリガーが発動するようにしたいと思います。

image.png

まず、トリガー条件について、式を書くのが難しいので、[アレイのフィルター処理]を使います。

以下のように [基本モード] でフィルターをして、その後、[詳細設定モード] にして式をコピーします。

image.png

image.png

※残念ながら、新しいデザイナーの場合、この方法でそのままコピーする方法だと上手く行きませんでした。修正すれば行けますが、市民開発者の方にとっては、この難しい構文を理解して修正をするより (場合によっては心折れてしまうかもしれないと思います)、そのままコピーできた方が楽なので従来のデザイナーの方を使います

その上で、トリガー条件にコピーします。

image.png

@equals(triggerOutputs()?['body/Title'], 'テスト')

アレイのフィルター処理を削除してテストしてみます。以下のように二つアイテムを追加してみます。

image.png

片方しか動作していないため、問題なさそうです。

image.png

image.png

文字列が空の場合

次に、以下の Text 列が空の場合動作するような条件にしてみます。文字列が空かどうか判定する際は、empty関数を使います。

image.png

empty() のカッコの間にカーソルを合わせて、対象の列を選びます。

image.png

image.png

empty 関数は対象のデータが空だったら true が返されるため、右側には true と書き、[詳細モード] にしてコピーします。

image.png

@equals(empty(triggerOutputs()?['body/Text']), true)

こちらをトリガー条件に追加します。

image.png

こんな感じでデータを追加してみます。

image.png

Text 列が空のデータの方だけ動作しました。

image.png

image.png

選択肢列の場合

選択肢列が特定の値の時だけトリガーが発動するようにしたいと思います。こちらも同様の手順で作成できますが、点注意が必要なのは、"選択肢列 Value" を選ぶことです。

image.png

image.png

image.png

@equals(triggerOutputs()?['body/Choice/Value'], '選択肢 1')

こんな感じでデータを追加してみます。

image.png

"選択肢 2" を選んだ側は動作しませんでした。

image.png

数値列が特定の数値の場合

数値列が特定の数値の場合にトリガーが発動するようにします。同様の手順で作成してみます。

image.png

image.png

@equals(triggerOutputs()?['body/Number'], 1)

こんな感じでデータを追加してみます。

image.png

数値が 1 の時だけ動作しました。

image.png

数値列の値が空の時

image.png

数値列の値が空かどうかを判定する場合は、文字列の時に使った empty を使います。

image.png

@equals(empty(triggerOutputs()?['body/Number']), true)

以下のようなデータを登録し、トリガーが発動しました。

image.png

image.png

ただ、別件では、こちらでは上手く動作しないことがありました。
その際は、以下のような式で動作しました。

image.png

@equals(triggerOutputs()?['body/Number'], null)

はい/いいえ列が false のとき

はい/いいえ列が false のときだけトリガーが発動するようにします。こちらも同じような感じで式を作成します。

image.png

image.png

@equals(triggerOutputs()?['body/YesNo'], false)

問題なく false のときだけ動作しました。

image.png

image.png

true のときトリガーが発動するようにしたい場合は、以下のように変更します。

image.png

フィルタークエリの時は以下のようなことがあったので、もし true で上手く動作しない場合は、false ではないときという表記に変えてもいいかもですね。

まとめ

今回は、列の種類ごとの Power Automate のトリガー条件の書き方について整理してみました。市民開発者の方にとって、トリガー条件ちょっととっつきにくいものの、ニーズは鷹飼と思うので、参考になれば幸いです。

15
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
6