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


# はじめに

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/d60924d9-6a31-100b-8e4b-0628a11559b8.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/4b7e610a-da89-2379-eaaf-59b61c51f3a6.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/7bc316f6-7dfc-81d4-084a-c910c2bbdabf.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/b3524199-2373-2c7e-8569-682b650ee3ae.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/5d547f39-564a-1ad6-dc6f-4281a7aaaa11.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/a54d3e3e-aef8-6aea-5899-0545897f612d.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/80771768-8eed-c5d6-d918-a597d962e654.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/74868ea0-41ba-1b4f-b0e3-2922b2ce3420.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/9c228ed3-9d33-5984-6f9d-c56dea46db78.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/9e4af213-c0fd-d0df-9488-f9d2f111cf9b.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/36f4df7d-72d2-95b7-4f2c-02cd9bdf70a0.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/5a50ecff-d8d1-a16c-cfe3-cb34ae404b62.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/ce8176f5-2abe-0501-aca6-d0abdbbd5bb9.png)

# 文字列が空の場合

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/9b1f5250-4e01-003d-5703-834769a93153.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/b86a6966-6835-c86f-9892-4ba9e9fdc1ce.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/03bcad21-c63a-2b53-1f14-ec3b7aa8aeaf.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/0aedaa44-7a2a-31fa-8bee-b210883b1980.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/36e7c5a2-e9a4-85a4-71c7-179a39bca33e.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/f528f98e-7541-4f35-0727-113d9e17f93d.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/854ffc35-20b1-0dd8-0a4c-6bd28df8e418.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/d42437eb-72cf-1740-04de-31c05fd32cff.png)

# 選択肢列の場合

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/99794b5a-040c-1b81-2a4d-5fe57760877d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/60a0e0a0-7fa8-a2d3-8803-ab8d0667bb6f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/47cf4bdd-2de2-6df1-9f76-101c3dc8559e.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/c905194f-8878-ff7e-179e-ee6dff6c5d4b.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/06032c48-0a32-dac0-c088-262ec8355808.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/fafe9d98-87fc-87df-2cb8-7bd68dfc14d9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/2a27e81a-4194-cc7f-9643-148a9c81849b.png)


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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/9d607a0d-7fee-a606-fbe8-61c0e5c8d1c2.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/9680932c-8a1b-c97a-3b62-e12c4a4e1cbb.png)

# 数値列の値が空の時

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/e0758538-3b8d-5965-4f08-495c97175816.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/a98b052d-7f43-94be-7ff5-cb51fbbdaf82.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/58833261-cb7c-a5aa-3d0d-f91ddad38f5b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/7a28e508-3777-8a2b-9baa-99371dbe69fb.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/9d8b06d9-bb0b-d0e4-a489-2ac67ba601cc.png)

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

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/8fb07802-287c-faaf-500b-dbd32bd66c3d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/17c68ef7-5602-d3a7-29e0-2670af8f6aa3.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/d3efdf07-1dd2-88dd-51f8-dbdb25f31723.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/0d401c78-e999-dd8e-039e-43514e9f2f52.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/5f5fa4b5-49aa-08e7-6108-8016e8a7dc2a.png)

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

https://qiita.com/Takashi_Masumori/items/2fc4794369a2d5b840df

# まとめ

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