Power Automateで「複数のキーワードのうち、どれか1つでも含まれているか(OR条件)」を判定したいときがけっこうある。
Apply to Each(ループ)を使うと、キーワードが増えるほど実行時間が長くなり、アクション数の制限も圧迫するので、一括でチェックしたい。
結論から言うと、「アレイのフィルター処理」アクションを使えば、ループなし(一括)で複数キーワードの検索が可能。
この記事では、受信したメール本文のキーワード仕分けを例に、実行時間を劇的に短縮できるスマートな判定フローの作り方を解説。
実例:メールの本文にキーワードが含まれるかを判定
今回は例として、受信したメールの本文に「採用」「求人」「インターン」「面接」のいずれかが含まれていたら、何かしらの処理をする場合を考えてみる。


非推奨:Apply to Eachですべてチェックする
真っ先に思い浮かぶのはApply to Eachでキーワード一つ一つチェックしていく方法。


ただ、この方法だとキーワードが増えれば増えるほど実行時間もかかるし、アクションの実行制限も圧迫してしまうので、あまりおすすめはできない。
推奨:アレイのフィルター処理で一括チェック
おすすめの方法はアレイのフィルター処理で一括でチェックする方法。
こんな感じで、「差出人」にチェックするキーワードの配列を設定し、左辺のチェック対象の文字列(今回はメール本文)を、右辺に式「item()」を設定するだけ。


あとはif文でアレイのフィルター処理の結果の長さ(length)をチェックし、0より大きければ何かしらのキーワードが含まれているし、0であればキーワードが含まれていないと判定できる。


length(body('アレイのフィルター処理'))
動作確認
ifの中にこんな感じで作成アクションをいれて、動作を確認する。


メール本文にキーワードが含まれる場合
まずはこんな感じのキーワードが2つ含まれるメールを受信してみると、


フィルター処理の結果のlengthは2となり、キーワードが含まれていることがわかる。


メール本文にキーワードが含まれていない場合
続いて、キーワードが含まれていないメールを受信してみると、


lengthは0となりキーワードが含まれていないことがわかる。


ということで、アレイのフィルター処理を使えば、実行時間が劇的に短縮されるだけでなく、Power Automate特有の「アクション実行数の制限」を無駄に消費するリスクも防げる。
処理速度もメンテ性も爆上がりするテクニックなので、この「ループなし」の方法がおすすめ。
コメント