ADVERTISEMENT

【Power Automate】Adaptive Card投稿が想定どおり進まない時の入力値と条件分岐の直し方

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

Power AutomateでAdaptive Cardを投稿するフローは、TeamsやOutlookへの通知をリッチに見せるために頻繁に使われます。しかし、カードの内容が想定と異なったり、条件に応じた出し分けがうまくいかないというトラブルは少なくありません。原因の多くは、動的な入力値の参照方法や条件分岐のロジックにあります。この記事では、そうした問題を体系的に切り分け、具体的な修正手順を解説します。

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

  • 最初に見る場所: フローの実行履歴で各アクションの出力を確認し、Adaptive CardのJSONがどのように生成されているかを検証します。
  • 切り分けの軸: 静的テキストが正しく表示されるか、動的コンテンツが期待する値に展開されているか、条件式の評価結果が正しいか、の3軸で問題を切り分けます。
  • 注意点: 会社のテナントポリシーやコネクタの権限設定により、Adaptive Cardの表示が制限されている場合があります。フローだけでなく管理者の設定も確認しましょう。

ADVERTISEMENT

1. Adaptive Card投稿の基本構造とエラーが起きやすいポイント

Adaptive CardはJSON形式で定義され、Power Automateでは「Teamsにメッセージを投稿」や「Microsoft Teamsコネクタ」などのアクション内で直接JSONを記述するか、コンポーザーアクションで組み立てた文字列を渡します。このとき、動的コンテンツや式を埋め込む箇所でミスが発生しやすくなります。例えば、文字列の連結に「+」を使うべきところを「&」でつなげてしまったり、動的コンテンツをそのままJSONのキーに入れてしまうと、構文エラーになったり空文字列として扱われます。特に'{‘や'”‘などの特殊文字は正しくエスケープする必要があります。

動的コンテンツの挿入ミスの具体例

よくあるのは、JSONの値部分に動的コンテンツをドラッグ&ドロップした際に、自動で引用符が付かないケースです。たとえば、`”title”: “@{items(‘Apply_to_each’)?[‘Name’]}”`と書きたいところが、`”title”: @{items(‘Apply_to_each’)?[‘Name’]}`のように引用符が欠落することがあります。Power Automateのエディタは空の引用符を補完しない場合があるため、式エディタで明示的に文字列として結合する必要があります。また、コンポーザーアクションでJSON全体を文字列として組み立てる場合は、改行の有無やインデントも意図しない動作の原因になります。

2. 入力値の確認方法:動的コンテンツと関数の正しい使い方

動的コンテンツが想定通りに展開されているかどうかは、フローの実行履歴で各アクションの「出力」を確認するのが基本です。Adaptive Cardを投稿するアクションの出力には、実際に送信されたJSONが表示されます。そのJSONをAdaptive Card Designerに貼り付けてプレビューすると、見た目を確認できます。また、動的コンテンツが空になる原因として、トリガーのタイミングが早すぎてデータがまだ存在しないことや、配列のインデックス指定が間違っていることがあります。

動的コンテンツが空になる場合のチェックポイント

例えば、SharePointの「アイテムが作成されたとき」トリガーを使い、作成されたアイテムのTitleを表示する場合、トリガーの出力から直接動的コンテンツを選べば問題ありません。しかし、その後のアクションで取得した別のリストアイテムの値を入れたい場合、Apply to eachやフィルターアクションのスコープ内外に注意が必要です。スコープ外にあるデータを参照しようとすると、動的コンテンツの選択肢に表示されていても実際の実行時には空になることがあります。このようなときは、コンポーザーアクションで一旦変数に格納し、その変数をAdaptive Cardに使用する方法が有効です。

3. 条件分岐のトラブルシューティング

条件に応じて異なるAdaptive Cardを投稿したい場合、ConditionアクションやSwitchアクションを使います。ここでよくあるのは、条件式の評価結果が期待と逆になるケースです。原因の多くは、比較する値のデータ型の不一致です。例えば、トリガーから取得した数値が文字列として扱われている場合、’123’と123を比較するとfalseになります。また、条件分岐の後にAdaptive Cardを送るアクションを正しく配置していないと、意図しないカードが送られる可能性があります。

条件式の確認方法

Conditionアクションの「結果」フィールドには、評価結果(True/False)と、実際に比較された値が表示されます。実行履歴でこの結果を確認し、意図通りになっていない場合は、式エディタでint()やfloat()、string()などの変換関数を明示的に使いましょう。また、複数条件を組み合わせる場合は、Power Automateの式言語で`and`や`or`を使用し、正しい構文(例:`@and(greater(variables(‘count’), 0), equals(triggerOutputs()?[‘body/Status’], ‘Complete’))`)になっているか確認します。

4. 実際の修正手順:ステップバイステップ

  1. フローの実行履歴を開き、Adaptive Cardを投稿したアクション(例:Teamsにメッセージを投稿)の出力を確認します。出力の中の「body」や「content」にJSONが含まれています。
  2. そのJSONをコピーし、MicrosoftのAdaptive Card Designer(https://adaptivecards.io/designer/)に貼り付けてプレビューします。動的コンテンツの部分が実際の値に置き換わっているか、レイアウトが崩れていないか確認します。
  3. もし動的値が空や「@{…}」のまま表示される場合は、式エディタを開き、動的コンテンツが正しく引用符で囲まれているか、concat()関数などで適切に結合されているかをチェックします。
  4. 条件分岐が意図通りでない場合、Conditionアクションの「結果」を確認します。結果がFalseになっている場合は、比較する値の型をint()やstring()で揃え、式を見直します。Switchアクションの場合は、各ケースの値がトリガーの出力と完全一致しているかを確認します。
  5. 修正後、フローを保存して手動でトリガーし、再度実行履歴を確認します。期待する動作になったら完了です。もし改善しない場合は、フローのデザイナーで各アクションの入力タブを開き、使用している動的コンテンツが実際に出力に存在するか、スキーマエラーが出ていないかを確認します。

5. 比較表:よくある問題ケースと解決策

問題ケース 原因 解決策
静的テキストは表示されるが動的値が空 動的コンテンツの参照先がスコープ外、または式の構文ミス 変数に格納してから利用する、式エディタで@{}の有無を確認する
条件によってカードの出し分けができない 条件式のデータ型不一致、または条件アクションの分岐が正しく構成されていない int()/string()で型を統一し、実行履歴で結果を確認する
配列の各要素に対してカードを送りたいがApply to eachが正しく動作しない Apply to eachの出力で動的コンテンツが配列要素ではなく全体を指している Apply to eachの「出力」を動的コンテンツの選択肢から選び、適切なプロパティ(例:?[‘Name’])を付ける
Adaptive CardのJSONが無効でエラーになる 文字列の引用符不足、カンマ忘れ、余分な末尾カンマ Designerでバリデーションし、JSON整形ツールで構文チェックする

6. 管理者に確認すべき設定

フロー側の問題ではない場合、会社のテナント設定やコネクタの権限が原因かもしれません。例えば、Teamsのポリシーでカスタムメッセージの送信が制限されていると、Adaptive Cardが正しく表示されないことがあります。また、Microsoft 365のグループやチャネルへの投稿に必要なアクセス許可が不足している場合も同様です。Power Automateライセンスが適切でないと、一部のコネクタが利用できないため、管理者に確認する必要があります。さらに、カスタムコネクタを使っている場合は、APIのスコープや認証方法も影響します。

7. よくある質問(FAQ)とまとめ

よくある質問

Q. 動的コンテンツの選択肢に期待する項目が表示されないのはなぜですか?
A. トリガーやアクションの出力スキーマにその項目が含まれていない可能性があります。フローを保存し直すか、アクションの設定で「出力のスキーマを更新」を実行すると表示されるようになる場合があります。

Q. 条件分岐で複数の条件を組み合わせたい場合、どう書けばいいですか?
A. 式エディタで`and`や`or`関数を使います。例えば、`@and(greater(variables(‘count’), 0), equals(triggerOutputs()?[‘body/Status’], ‘Complete’))`のように記述します。各条件は括弧でくくってください。

Q. Adaptive Cardの一部のテキストだけ太字や色を付けたいのですが、可能ですか?
A. Adaptive CardはMarkdown記法をサポートしています。ただし、すべての要素で使えるわけではありません。公式ドキュメントでサポート状況を確認し、必要な場合はMarkdownの`**太字**`や`[リンク](url)`を記述します。

この記事では、Power AutomateのAdaptive Card投稿が想定通り進まないときの原因と修正方法を解説しました。まず実行履歴で出力JSONを確認し、動的コンテンツと条件分岐を中心に切り分けてください。手順に沿って修正を試しても解決しない場合は、管理者にテナント設定やライセンスを問い合わせることをおすすめします。正しい入力値と条件分岐を整えることで、安定したフロー運用が可能になります。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

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

ADVERTISEMENT