Power Automateで承認フローを構築する際、承認者を動的に指定しようとして「権限エラー」に遭遇したことはありませんか。このエラーは、フローが「指定されたユーザーが見つからない」や「承認者の形式が正しくない」といった理由で停止するケースが多く、原因の特定に時間を取られがちです。本記事では、承認者の動的指定で権限エラーが発生する原因を整理し、入力値の正しい形式や条件分岐の修正方法を具体的に解説します。実際のトラブルシューティングに役立つ情報を網羅していますので、ぜひご活用ください。
【要点】この記事で確認すること
- 最初に見る場所: 承認アクションの「割り当て先」プロパティに入力されている値の形式。メールアドレス、オブジェクトID、UPNのいずれかを正しく指定してください。
- 切り分けの軸: 端末側(ユーザー入力値の誤り)とアカウント側(存在しないユーザーや権限不足)の二軸で原因を特定します。
- 注意点: 会社PCで管理されているテナントでは、承認フローで使用するコネクタ(Approvals)に適切な権限が付与されているか管理者に確認が必要です。また、動的コンテンツの出力が配列になっていないかも確認ポイントです。
ADVERTISEMENT
目次
権限エラーの主な原因とログの読み解き方
Power Automateの承認アクションで権限エラーが表示される場合、まずは実行履歴からエラーメッセージを確認しましょう。典型的なエラーには「InvalidApprovalCreateRequestApprovalType」や「The user does not exist in the directory」などがあります。これらのエラーは、以下の2つに大別されます。
- 入力値の形式誤り: 承認者を指定するプロパティに、Power Automateが認識できない形式の値が渡されている。
- ユーザー存在・権限不足: 指定したユーザーがテナント内に存在しない、または承認フローを実行するサービスプリンシパルに必要な権限がない。
ログの「詳細」セクションを展開すると、より具体的なエラーコードが確認できます。たとえば「ApprovalConnectionParametersInvalid」はパラメーターの構造自体が不正であることを示します。この情報をもとに原因を絞り込んでいきましょう。
承認者を動的に指定する際の入力値の正しい形式
承認者を動的に指定する場合、「割り当て先(Assigned To)」プロパティに設定する値の形式は厳格に決まっています。以下の表で、許可される形式と注意点をまとめました。
| 入力形式 | 例 | 注意点 |
|---|---|---|
| ユーザープリンシパル名(UPN) | user@contoso.com | テナント内で一意のメールアドレス形式。最も推奨される。 |
| メールアドレス | user@contoso.com | UPNと同じ場合が多いが、Exchangeのエイリアスなどとは異なる。 |
| オブジェクトID(GUID) | 12345678-1234-1234-1234-123456789abc | Azure ADのユーザーオブジェクトID。変更されないので堅牢。 |
| 単一のユーザー(配列不可) | 文字列(例: user@contoso.com) | 複数承認者を指定する場合はセミコロン区切り、または「承認者」タイプを段階指定に。 |
動的コンテンツの出力が配列になっていないか
よくあるミスとして、SharePointリストやフォームなどから取得した「ユーザー列」の出力をそのまま「割り当て先」に使用するケースがあります。しかし、これらの出力は配列(JSON配列)や複合オブジェクトになっていることが多く、直接代入すると権限エラーが発生します。たとえば、SharePointの「ユーザー列」の動的コンテンツは {'claims': 'i:0#.f|membership|user@contoso.com', 'displayName': '...'} という構造です。このままではPower Automateが認識できません。
正しくは、「Apply to each」ループを使って個別のユーザーを取り出すか、「式」を使ってプロパティを抽出します。具体的な方法は次のセクションで説明します。
具体的な修正手順:式と条件分岐の使い方
ここでは、承認者の動的指定で権限エラーを解消するための具体的な手順を5つ紹介します。手順に沿ってフローを修正してください。
- 「承認」アクションの「割り当て先」プロパティに直接式を入力する。
動的コンテンツではなく、「式」タブからstring()やconcat()を使って値を整形します。たとえば、SharePointリストのユーザー列「申請者」が@item()?.Claimsで取得できる場合、式としてstring(items('Apply_to_each')?['Claims'])を設定します。 - メールアドレス形式に変換する式を使う。
「Base64デコード」や「split」を組み合わせて、UPNを抽出します。例:substring(items('Apply_to_each')?['Claims'], lastIndexOf(items('Apply_to_each')?['Claims'], '|')+1) - 条件分岐:「承認者」が空欄の場合のエラー回避。
動的に取得した承認者が空またはnullの場合、フローが停止します。事前に「条件」アクションで値の存在をチェックし、値がない場合は「管理者に通知する」などの代替処理を入れます。 - 「ユーザーの取得(Get User)」アクションでオブジェクトIDを取得する。
メールアドレスからユーザーを検索し、オブジェクトIDを動的に取得して「割り当て先」に指定する方法です。この方法ならどのような入力形式でも統一のGUIDで渡せるためエラーが減ります。ただし、Azure ADへのアクセス権限が必要です。 - 「承認 – 開始して待機」アクションのバージョンに注意する。
古いバージョンの承認アクションは入力形式の互換性が低い場合があります。最新の「承認(v2)」を使用し、プロパティの「承認者」には「1人以上の承認者(任意)」を選択して、動的コンテンツの配列をそのまま渡せるようにします。ただし、配列の各要素はオブジェクトIDまたはUPN文字列である必要があります。
条件分岐の設定でよくある失敗パターン
動的承認者を扱う際、条件分岐の設計ミスが権限エラーの原因になることがあります。以下に代表的な失敗パターンと対策をまとめます。
パターン1:承認者リストに無効な値が混ざっている
SharePointリストから取得したユーザー列に、削除されたユーザーや外部ユーザーが含まれている場合があります。「Get User」アクションで事前に存在確認を行い、存在しないユーザーはフィルターで除外してください。
パターン2:複数承認者を指定する際の区切り文字の誤り
同一ステップで複数の承認者を指定する場合、セミコロン(;)で区切って文字列として渡す方法があります。しかし、動的コンテンツを配列のまま結合すると、セミコロンで連結されずにエラーになります。正しくは join(outputs('Get_items')?['body/value']?['UserEmail'], ';') のような式を使用します。
パターン3:「割り当て先」に空文字列が渡される
承認者が未設定のレコードに対してフローが実行されると、空の値が渡され権限エラーになります。条件分岐で「割り当て先が空の場合」を検出し、フローを中断するか、デフォルトの承認者を設定するロジックを加えてください。
管理者に確認すべき設定項目
権限エラーの中には、個人の設定変更では解決できない管理者権限が必要なケースがあります。以下の項目を確認し、必要に応じてIT管理者に連絡してください。
- 承認コネクタのアクセス許可: Power Automateの「承認(Approvals)」コネクタには、テナント内のユーザー情報を読み取る権限が必要です。管理者が「承認設定」で適切なアプリケーション権限(User.Read.Allなど)を付与しているか確認してください。
- Azure ADでの動的グループ設定: フローで動的グループを承認者に指定する場合、グループの種類が「セキュリティグループ」または「Microsoft 365グループ」である必要があります。配布グループは使用できません。
- 外部ユーザーの招待: 承認者が組織外のユーザーの場合、Azure AD B2Bコラボレーションで招待済みであること、およびゲストユーザーが承認フローを利用できるライセンスを持っていることを確認します。
よくある質問(Q&A)
実際に読者から寄せられた質問を基に、追加の情報を提供します。
Q1: 「割り当て先」にメールアドレスを入れているのにエラーになるのはなぜですか?
A: メールアドレスがUPNと異なる場合があります。Power AutomateはUPN形式(user@contoso.com)を期待しますが、Exchange Onlineでエイリアスが別に設定されていると、エイリアスメールアドレスでは認識されません。Azure ADユーザー設定で「ユーザープリンシパル名」を確認してください。
Q2: 承認者を「変数」に格納してから渡してもエラーになります。
A: 変数の内容が文字列であることを確認してください。変数に配列やオブジェクトが入っているとエラーになります。string() 式で強制的に文字列に変換するか、変数の初期化時にデータ型を「文字列」に設定します。
Q3: 承認フローが「アクセス拒否」で失敗します。どうすればいいですか?
A: まずはフローの所有者または実行アカウントに、Approvalsコネクタの使用権限があるか確認します。Power Platform管理センターで、フローを含む環境の「セキュリティロール」を確認してください。また、Dynamics 365環境では、承認者に「Common Data Service User」ロールが必要な場合があります。
まとめ
承認者の動的指定における権限エラーは、入力値の形式ミスやユーザー存在確認の不足が原因であることがほとんどです。本記事で紹介したように、式を使って値を整形する、条件分岐で空値を防ぐ、管理者権限の不足を確認するといった手順を踏めば、多くのエラーは解決できます。特に、SharePointリストやフォームからユーザー情報を取得する場合は、動的コンテンツの構造を理解し、適切なプロパティを抽出することが重要です。フローの設計段階からエラーハンドリングを組み込むことで、運用後のトラブルを大幅に減らせます。ぜひ本記事の手順を実践し、安定した承認フローを構築してください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Office・仕事術の人気記事ランキング
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【神技】保存せずに閉じたExcel・Wordファイルを復元する!消えたデータを復活させる4つの救出法
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【Copilot】「サービスに接続できません」エラーの原因切り分けと対処法
- 【PDF】PDFのサムネイルプレビューが表示されない!エクスプローラーの設定とAcrobat環境設定
- 【Excel】矢印キーで「セルが動かず画面がスクロールする」!ScrollLockの解除方法(ノートPC対応)
- 【Teams】会議の「参加者リスト」を出席後にダウンロードする!誰が参加したか確認する手順
