ADVERTISEMENT

【Power Automate】期限通知が想定外に繰り返される時の入力値と条件分岐の直し方

【Power Automate】期限通知が想定外に繰り返される時の入力値と条件分岐の直し方
🛡️ 超解決

Power Automateで期限通知を自動化すると、設定ミスによって同じ通知が何度も送られてしまうトラブルが発生することがあります。この問題は、入力値の扱いや条件分岐の設計に起因するケースが多く、原因を特定すれば簡単に修正できます。本記事では、想定外の繰り返しを防ぐための具体的な確認手順と修正方法を、実務で役立つ事例とともに解説します。

【要点】この記事で確認すること

  • 最初に見る場所: フローの実行履歴で、各繰り返しにおけるトリガー入力値と条件アクションの出力値を確認します。
  • 切り分けの軸: トリガーの種類(定期的/イベント駆動)と条件分岐の設定、および変数の初期化位置の3点で原因を絞り込みます。
  • 注意点: 会社PCでフローを変更する場合は、管理者が設定しているコネクタやポリシーに影響を与えないか事前に確認してください。

ADVERTISEMENT

期限通知が繰り返される原因とは

Power Automateで期限通知が想定外に繰り返される原因は、大きく分けて3つあります。1つ目はトリガーの設定不備、2つ目は条件分岐のロジックミス、3つ目はデータ更新の欠落です。それぞれの具体例を見ていきましょう。

トリガーの設定不備

定期的なトリガー(「スケジュール」など)を使用している場合、実行間隔が短すぎると期限通知が高頻度で送られます。また、イベント駆動トリガー(「アイテムが作成または変更されたとき」など)では、更新処理がトリガー条件を再度満たすことでループが発生します。

条件分岐のロジックミス

条件式で現在日時と期限日時を比較する際に、タイムゾーンの考慮漏れや比較演算子の誤用があると、条件が常に真となって通知が無限に送られる可能性があります。また、条件を満たした後にそのアイテムに対して「処理済み」フラグを更新しない場合も同様です。

データ更新の欠落

期限通知を送った後に、該当レコードのステータスを変更するなどの更新処理がないと、次回のフロー実行でも同じレコードが通知対象として検出され続けます。特にApply to eachループの中で更新処理を忘れると、同じアイテムに何度も通知が行われます。

入力値の確認と修正方法

問題を解決する第一歩は、フローが実際に受け取っている入力値を正確に把握することです。Power Automateの実行履歴から各アクションの入出力を確認しましょう。

実行履歴の確認手順

  1. Power Automateポータルで該当フローを開き、「28日間の実行履歴」をクリックします。
  2. 最新の失敗または成功した実行を選択し、「入力」と「出力」タブを確認します。
  3. トリガーの出力で、どのようなデータが渡されているかを確認します。特に日付や数値の形式、nullの有無に注意してください。
  4. 条件アクションの出力で、条件式の評価結果が想定通りか確認します。
  5. Apply to eachなどのループアクションでは、各ループの反復回数とループ内の入出力を確認します。

入力値の修正ポイント

よくあるのは、日付の比較を行う際に文字列と日付型の不一致が発生するケースです。例えば、SharePointリストから取得した日付はテキスト型になっている可能性があります。その場合は、formatDateTime()ticks()関数を使って正しい型に変換してから比較してください。また、タイムゾーンは環境やデータソースによって異なるため、必要に応じてconvertTimeZoneアクションを使用します。

入力値の型 よくある問題 修正方法
日付/時刻 文字列として扱われ比較が正しく行われない formatDateTime(utcNow(),’yyyy-MM-dd’)で統一
数値 文字列と数値の比較で意図しない結果 int()またはfloat()関数で明示的に変換
ブール true/falseの文字列として扱われる equals(変数, true)のように比較

条件分岐の見直し方

条件分岐の設計ミスは、想定外の繰り返しの最大の原因です。ここでは、正しい条件式の書き方とよくある誤りを解説します。

条件式の基本

期限通知では、「アイテムの期限日が今日で、かつ通知済みフラグが未送信」という条件を設定します。このとき、「期限日が今日」の比較には時間部分の影響を排除するため、startOfDay(utcNow())startOfDay(期限日)を比較する方法が安全です。

よくある条件ミスの例

  • 「期限日 <= 現在日時」と書いてしまう:過去のすべてのアイテムが対象になり、毎回通知が送られます。正しくは「期限日 == 今日」かつ「通知フラグ == false」です。
  • 条件の評価順序を誤る:複数条件をANDやORで結合する際に、優先順位が意図しない結果を生むことがあります。式ビルダーでグループ化を活用してください。
  • Apply to eachの外で条件を設定する:ループ外でフィルターをかけると、すべてのアイテムに対して同じ条件が適用され、想定外の挙動になります。

条件分岐の修正手順

  1. 条件アクションを開き、左側の「式」タブで現在の条件式を確認します。
  2. 日付比較にstartOfDayticksを使用していない場合は修正します。
  3. 「アイテムが通知済みか」を示す変数やフィールドの値を条件に含めます。
  4. 条件が複数ある場合は、グループ化して括弧で優先順位を明確にします。
  5. 修正後、テスト実行を行い、条件が正しく評価されることを確認します。

ループを防ぐための実践手順

通知フローが何度も繰り返されるのを防ぐには、フロー内で「処理済み」を記録し、同じアイテムを再処理させない仕組みが必須です。以下に具体的な手順を示します。

  1. トリガー:SharePointリストの「アイテムが作成または変更されたとき」を選択します。
  2. 最初のアクションで「スコープ」を追加し、すべてのアクションをまとめます(エラーハンドリングのため)。
  3. データソースから期限が近いアイテムを取得します。「アイテムの取得」アクションでフィルタークエリを使用し、例:Deadline eq '@{formatDateTime(utcNow(),'yyyy-MM-dd')}' and Status ne '通知済み'
  4. Apply to eachで各アイテムをループし、条件アクションでさらに絞り込みます(上記の条件が確実でない場合)。
  5. 通知メールを送信するアクションの直後に、「アイテムの更新」アクションを追加し、Statusフィールドを「通知済み」に更新します。
  6. 更新アクションが成功したかどうかを確認するための「条件」を追加し、失敗した場合にリトライやログ出力を行います。
  7. フローを保存し、適切な間隔でトリガーが動作するようにします。スケジュールトリガーの場合は実行間隔を1時間以上に設定します。

失敗パターンとその対策

実際の現場で発生しやすい失敗パターンをいくつか紹介します。これらを参考に、自身のフローに当てはまるものがないか確認してください。

失敗パターン 原因 対策
毎分通知が届く スケジュールトリガーの間隔が1分に設定されている 間隔を1時間以上に変更。またはイベント駆動に切り替え
同じアイテムに重複通知 通知送信後にステータス更新がない Apply to each内でアイテム更新アクションを追加
条件が常に真になる 日付比較に文字列を使用している、またはタイムゾーンが異なる startOfDayやconvertTimeZoneで統一
大量のApply to eachが発生 フィルター条件が緩すぎて全アイテムが対象になる フィルタークエリを厳密にし、さらに条件アクションで絞り込み

管理者へ伝える情報

フローの修正に管理者権限が必要な場合や、組織全体の設定に影響するケースでは、管理者に以下の情報を共有しましょう。

  • コネクタの認証状態:期限通知に使用するメールやSharePointのコネクタが正しく認証されているか確認します。認証が切れると予期せぬエラーが発生します。
  • データ損失防止ポリシー(DLP):組織でDLPが有効な場合、フローで使用しているコネクタが許可リストに含まれているか確認が必要です。
  • ライセンス:Power Automateの有料ライセンスが必要なアクション(プレミアムコネクタなど)を使用していないか確認します。
  • 共有フローの所有権:自分が所有者でないフローを編集する場合は、管理者に編集権限を依頼してください。

よくある質問

Q: 通知が2通送られることがあります。原因は何ですか?

A: トリガーが2回実行されたか、フィルタ条件で同じアイテムが複数回ヒットしている可能性があります。実行履歴でトリガーの回数を確認し、フィルタークエリに重複排除の条件を追加してください。

Q: フローを修正しても繰り返しが止まりません。

A: 修正前にフローがキューに残っている可能性があります。フローを一度無効にしてから再び有効にし、実行履歴をクリアしてみてください。それでも解決しない場合は、トリガー条件に「処理済みフラグ」が確実に含まれているか再確認します。

Q: 条件アクションの式ビルダーでエラーが表示されます。

A: 式の構文が間違っているか、使用している関数が正しく認識されていない可能性があります。動的なコンテンツが正しい型で挿入されているか確認し、必要な場合は式を直接記述してください。

まとめ

期限通知が想定外に繰り返される問題は、入力値の型不一致や条件分岐の設計ミス、ステータス更新の欠落が主な原因です。実行履歴から入力値と条件の評価結果を確認し、日付比較にはstartOfDayを使用する、通知後に必ずステータスを更新するといった対策をとることで、安定したフローに改善できます。また、組織全体のポリシーやライセンスへの影響にも注意しながら設定を行ってください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

ADVERTISEMENT