ADVERTISEMENT

【Power Automate】期限通知が想定どおり進まない時の入力値と条件分岐の直し方

【Power Automate】期限通知が想定どおり進まない時の入力値と条件分岐の直し方
🛡️ 超解決

Power Automateで期限通知フローを設定したのに、指定した日時に通知が届かない、または間違ったタイミングで通知が送られるといったトラブルはよく発生します。その原因の多くは、入力値として扱っている日付や時刻の形式が想定と異なっていたり、条件分岐のロジックが誤っていることに起因します。この記事では、期限通知フローが意図どおり動作しない場合に、どこを確認してどのように修正すればよいのかを具体的に解説します。実際のフロー修正に役立つ手順やよくある失敗パターンも紹介しますので、ぜひ参考にしてください。

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

  • 最初に見る場所: トリガーの条件(トリガー条件やスケジュール設定)と、条件アクション内で使っている日付関数・比較演算子。
  • 切り分けの軸: 入力値(日付の形式やタイムゾーン)が原因か、条件分岐(比較演算子や論理式)が原因かを分けて考える。
  • 注意点: 日付や時刻の比較ではタイムゾーンの差異が影響するため、utcNow()を使う場合は明示的にタイムゾーンを変換する。また、会社の環境によってはコネクタの利用制限があるので管理者に確認が必要。

ADVERTISEMENT

期限通知が想定どおり進まない主な原因

期限通知フローが期待した動作をしない場合、大きく分けて「入力値の問題」と「条件分岐の問題」の2つに分類できます。それぞれの具体例を見ていきましょう。

日付・時刻データの形式とタイムゾーンの違い

Power Automateでは、日付や時刻を扱う際に内部的にはISO 8601形式(例:2025-03-15T09:00:00Z)が使われます。しかし、ExcelやSharePointリストなどから取得するデータは、ユーザーが入力した形式(例:2025/3/15 9:00)であることが多く、そのまま比較しようとすると想定外の結果になります。また、タイムゾーンが指定されていない場合、Power AutomateはUTCとして解釈するため、日本の標準時(JST)と9時間のずれが生じます。このずれにより、同じ日付でも通知が1日ずれることがあります。

条件分岐のロジックミス

条件アクションの中で「期限日が本日より前」という判定をしたい場合に、単純に「期限日が本日より小さい」というだけでは期待どおりにならないケースがあります。例えば、期限日が2025-03-15で本日が2025-03-15の場合、「小さい」はfalseになるため、当日を含まない判定になります。また、複数の条件を組み合わせるときにANDとORを間違えると、まったく逆の動作をすることがあります。

トリガー設定の見落とし

スケジュールトリガーを使っている場合、繰り返し間隔や開始時刻の設定が誤っていると、そもそもフローが起動しません。また、トリガー条件を設定している場合は、その条件が満たされないとフローが実行されないため、条件式が正しいかどうかも確認が必要です。

入力値の確認と修正手順

以下の手順で、フロー内の入力値を確認・修正してください。特に日付や時刻を扱うアクションがある場合は、必ずチェックしましょう。

  1. フローエディターで問題のアクションを開き、日付や時刻を入力しているフィールドを特定します。動的なコンテンツや関数が使われている場合は、その式をメモします。
  2. 日付の形式が統一されているかを確認します。SharePointやExcelから取得した値は、必要に応じて formatDateTime() 関数でISO 8601形式に変換します。例:formatDateTime(items('Apply_to_each')?['Deadline'], 'yyyy-MM-ddTHH:mm:ssZ')
  3. タイムゾーンの変換が必要な場合は、convertFromUtc() や convertToUtc() を使って明示的に変換します。日本時間を使うなら、convertFromUtc(utcNow(), 'Tokyo Standard Time', 'yyyy-MM-dd') のように指定します。
  4. トリガーで使っている日付と比較する場合は、utcNow() をそのまま使うか、convertToUtc() で統一します。例えば、期限日をUTCに変換してから比較することでタイムゾーンのずれを防げます。
  5. 条件式の中で日付を比較するときは、計算結果が文字列になっていないかを確認します。式の結果が文字列として比較されると、期待した日付順にならないことがあります。数値として比較する必要がある場合は、ticks() 関数を使ってチック値に変換する方法もあります。
  6. テスト実行を行い、各アクションの出力を確認します。特に「入力」と「出力」のタブで日付の値が正しく変換されているかを見ます。期待と異なる場合は、手順2~5を見直します。

条件分岐の直し方(具体例)

条件分岐のミスを修正するには、まず何を判定したいのかを明確にします。以下に代表的なシナリオと正しい条件式を示します。

期限超過の判定条件

「期限日を過ぎた場合に通知する」という条件を考えます。期限日が2025-03-15で、フローが2025-03-16に実行された場合に通知したいとします。このとき、条件式は「期限日が本日より前」です。Power Automateの条件アクションでは、左側に期限日、右側に本日を置き、演算子は「次の値より小さい」を選びます。ただし、同日を含めたい場合は「次の値以下」を使います。

注意点として、日付の値が時刻を含んでいる場合、比較は時刻まで考慮されます。例えば期限日が2025-03-15T00:00:00Zで、本日が2025-03-15T12:00:00Zの場合、「小さい」はfalseになります。もし日付のみで比較したいなら、formatDateTime() で日付部分だけを取り出して比較します。

複数条件の組み合わせ

「期限日が近づいてきた(例えば3日前以内)かつ、まだ通知を送っていない」という複数条件を組み合わせる場合は、条件アクション内で「AND」または「OR」を使います。よくあるミスは、条件を別々のアクションに分けてしまうことです。正しくは、1つの条件アクション内で「グループの追加」から条件行を追加し、論理演算子を「かつ」または「または」に設定します。

例えば、次のような式になります。
@and(greaterOrEquals(items('Apply_to_each')?['Deadline'], addDays(utcNow(), -3)), equals(items('Apply_to_each')?['Notified'], false))
この式は、期限日が3日前以降かつ通知フラグがfalseの場合に真となります。

失敗パターンと対策

以下の表は、実際に発生しやすい失敗パターンとその対策をまとめたものです。自身のフローと照らし合わせて確認してください。

失敗パターン 原因 対策
期限日が本日の通知が来ない 条件で「小さい」を使っており、当日を含めていない 「次の値以下」に変更する、または日付のみの比較にする
通知が9時間ずれる タイムゾーンの変換をしていないためUTCとJSTが混在 convertToUtc / convertFromUtc で明示的に変換する
条件が常に真または常に偽になる 日付の形式が文字列で、比較がアルファベット順になっている formatDateTime() でISO形式に統一するか、ticks() を使う
複数条件の組み合わせで意図しない結果 ANDとORの誤用、または条件の順序が不適切 論理演算子を確認し、グループ化して優先順位を明確にする
フロー自体が実行されない トリガー条件が間違っている、またはスケジュール設定がミス トリガーの設定を確認し、条件式をシンプルにしてテストする

管理者に確認すべきポイント

会社の環境によっては、Power Automateの制限やポリシーが原因でフローが意図どおり動かないことがあります。以下の点を管理者に確認してください。

  • データ損失防止(DLP)ポリシー: 使用しているコネクタ(SharePoint、Outlook、Teamsなど)が許可されているかどうか。DLPポリシーでブロックされていると、アクションが失敗します。
  • カスタムコネクタの利用: 外部APIと連携する場合、カスタムコネクタの登録や認証設定が正しいか確認が必要です。
  • ライセンスの制限: 使用しているPower Automateのライセンス(無料、Office 365付属、有料)によって、実行可能なフローの種類や頻度に制限があります。例えば、プレミアムコネクタが必要なアクションを使っている場合は有料ライセンスが必要です。
  • 実行履歴のログ: フローの実行履歴が残っていない場合、管理者による監査設定が無効になっている可能性があります。実行履歴を有効にしてもらうと、トラブルシューティングが容易になります。

よくある質問(FAQ)

Q1: 日付の比較で「次の値より大きい」を使ったのに、過去の日付で真になるのはなぜですか?
A1: 日付の値が文字列として比較されている可能性があります。文字列の場合、「2025-03-15」と「2025-03-14」を比較すると、先頭から順に比較するため、「2025-03-15」の方が「大きい」とみなされますが、時刻が含まれているとアルファベット順になることがあります。必ずISO 8601形式で統一し、formatDateTime() を使いましょう。

Q2: 同じ日付なのに条件がfalseになることがあります。どうしてですか?
A2: 時刻の違いが原因です。例えば、期限日が「2025-03-15T00:00:00Z」で本日が「2025-03-15T12:00:00Z」の場合、「等しい」はfalseになります。日付のみで比較したい場合は、formatDateTime(…, ‘yyyy-MM-dd’) で日付部分だけを取り出して比較してください。

Q3: 複数条件を設定したのに、一部の条件しか評価されていないようです。
A3: Power Automateの条件アクションでは、左から順に評価され、最初に偽になった時点で残りの条件は評価されません(短絡評価)。また、ANDとORの優先順位に注意してください。複雑な条件の場合は、式エディタで直接記述するか、ネストした条件アクションを使うと意図した評価順にできます。

まとめ

期限通知フローのトラブルは、入力値の形式やタイムゾーンの扱い、条件分岐のロジックに原因があることがほとんどです。まずは日付の形式をISO 8601に統一し、タイムゾーンを明示的に変換することで多くの問題は解決します。次に、条件式が期待する動作になっているかを確認し、必要に応じて演算子や論理式を見直してください。

手順に沿って一つずつ確認していけば、自力で修正できるケースがほとんどです。どうしても解決しない場合は、管理者と協力して環境設定や実行ログを確認することをおすすめします。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

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

ADVERTISEMENT