Power Automateでフローを実行した際に、「アクセスが拒否されました」や「要求が正しくありません」といった権限エラーが発生し、原因がnull値の扱いにあるケースは少なくありません。特に、SharePointやSQL Serverなどからデータを取得する際に、必須項目がnullとして渡されると、コネクタ側で権限不足と誤認されることがあります。本記事では、null値が原因で権限エラーが発生する仕組みと、入力値や条件分岐を修正する具体的な方法を解説します。
【要点】この記事で確認すること
- 最初に見る場所: エラーメッセージの内容と、フロー実行履歴でエラーが発生したアクションの入力値を確認してください。nullが含まれている場合、権限エラーと同時に表示されることがあります。
- 切り分けの軸: 問題が「null値そのもの」なのか「null値が原因で不正なリクエストになり権限エラーが発生している」のかを、条件分岐でnullチェックを追加して検証します。
- 注意点: 会社PCで管理されているPower Platform環境では、カスタムコネクタや特定のAPIスコープが制限されている場合があります。勝手にコネクタの権限を変更する前に、管理者に確認してください。
ADVERTISEMENT
目次
なぜnull値で権限エラーが起きるのか
Power Automateのコネクタ(例:SharePoint、SQL Server、Office 365 Groups)は、APIに対して厳格な入力検証を行います。必須パラメータがnullとして渡されると、APIは不正なリクエストと判断し、アクセス権限がないものとしてエラーを返すことがあります。たとえば、SharePointの「アイテムの取得」アクションで、アイテムIDがnullの場合、APIは「アイテムが存在しないか、アクセス権限がありません」というエラーを返します。これは、IDがnullであることが原因で、適切なリソースを特定できないためです。
また、条件分岐を正しく設定していない場合、null値を含むデータが意図しないパスに進み、権限が必要なアクション(例:ファイルの作成、メール送信)を実行しようとしてエラーになることもあります。つまり、null値の扱いは単なるデータ欠落の問題だけでなく、セキュリティエラーの原因にもなり得ます。
エラーが発生する典型的なパターンと見分け方
パターン1: トリガー条件でnullが渡される
フローが手動実行やスケジュールで起動された場合、トリガーの出力にnullが含まれることがあります。たとえば、「SharePoint – アイテムが作成されたとき」トリガーでは、リストの必須フィールドが空だとnullになります。その後のアクションでそのフィールドを参照すると、権限エラーが発生する可能性があります。
パターン2: アクションの出力がnullになる
前のアクション(例:「JSONの解析」や「条件」)の結果がnullだった場合、後続のアクションの入力にnullが使われます。たとえば、「条件」アクションで偽の場合に値を何も設定しないと、後続の「ファイルの作成」アクションでパスがnullになり、権限エラーが発生します。
パターン3: ループ内でnullが混入する
「Apply to each」ループで処理する配列やオブジェクトにnull要素が含まれていると、ループ内のアクションで権限エラーが発生するケースがあります。特に、SharePointリストの複数行テキストフィールドなどが空の場合に、その値をそのまま渡すとエラーになります。
null値をチェックする条件分岐の基本
権限エラーを防ぐために、null値が発生し得る箇所では必ず条件分岐でチェックし、代替値を設定するか、フローを分岐させます。Power Automateでは、以下のような関数を使ってnullを判定します。
- empty()関数: 値がnull、空文字、空の配列の場合はtrueを返します。例:
@empty(triggerOutputs()?['body/value']) - equals()関数: 値が明示的にnullかどうかを比較します。例:
@equals(variables('myVar'), null) - coalesce()関数: 最初の非nullの値を返します。デフォルト値を設定するのに便利です。例:
@coalesce(triggerOutputs()?['body/field'], 'default')
条件分岐を追加する際は、以下のように「条件」アクションでチェックし、nullの場合は処理をスキップしたり、エラー処理を行います。
- フローエディターで、nullが問題となるアクションの直前に「条件」アクションを追加します。
- 左側の式に
@empty(yourVariable)または@equals(yourVariable, null)を入力します。 - 「はい」の場合(nullの場合)には、フローを終了するか、代替値を設定するアクション(例:「変数を設定」でデフォルト値を代入)を追加します。
- 「いいえ」の場合(nullでない場合)には、元のアクションを実行します。
- 必要に応じて、「スコープ」アクションでエラー処理をまとめることもできます。
ここでは、SharePointリストから特定のアイテムを取得するフローを例に、null値による権限エラーを修正する手順を示します。多くの場合、アイテムIDがユーザー入力や前のアクションから渡されますが、nullのまま「アイテムの取得」を実行するとエラーになります。
| 修正前 | 修正後 |
|---|---|
| 1. トリガーまたは変数でIDを受け取る 2. 「SharePoint – アイテムの取得」にIDを指定 3. エラー:アクセス拒否 |
1. トリガーまたは変数でIDを受け取る 2. 条件でIDが空かチェック 3. 空の場合:フローを終了 4. 空でない場合:「アイテムの取得」を実行 |
- まず、フローの最初に「変数を初期化する」アクションを追加し、IDを格納する変数(例:
itemId)を用意します。変数の種類は整数または文字列にします。 - トリガーまたは前のアクションからIDを変数に設定します。
- 次に、「条件」アクションを追加し、左側に
@empty(variables('itemId'))と入力します。 - 「はい」の場合:処理を行わずにフローを終了するか、管理者に通知するアクション(例:メール送信)を追加します。
- 「いいえ」の場合:「SharePoint – アイテムの取得」アクションを追加し、IDに
@variables('itemId')を指定します。 - 最後に、フローを保存してテストします。nullのIDが渡された場合、権限エラーが発生せず、条件分岐で適切に処理されることを確認します。
入力値の型変換とデフォルト値の設定
null値が発生しやすい状況では、入力値を適切な型に変換したり、デフォルト値を設定することで権限エラーを回避できます。特に、APIが特定の型を期待している場合、文字列のnullと数値のnullが異なる動作をすることがあります。
文字列型のnull対策
文字列フィールドが空の場合は、coalesce()関数で空文字やデフォルトテキストに置き換えます。例:@coalesce(triggerOutputs()?['body/Title'], '未設定')。これにより、権限エラーが発生しにくくなります。
数値型のnull対策
数値フィールドがnullの場合は、coalesce()で0や-1などの特殊な値に置き換えます。ただし、0が有効な値として扱われる可能性があるため、代わりに条件分岐で処理をスキップする方が安全です。
オブジェクトや配列のnull対策
オブジェクト全体がnullになるケース(例:「JSONの解析」で解析対象がnull)では、「条件」アクションでオブジェクトが空かどうかをチェックし、空の場合は以降のアクションを実行しないようにします。また、ループ内で使用する配列の要素がnullの場合は、filterArray()などで事前に除去します。
管理者に確認すべき設定
null値が原因で権限エラーが発生する場合、フロー側の修正だけでなく、環境設定が原因であることもあります。以下の点を管理者に確認してください。
- データソース側のNULL許可設定: SharePointリストやSQLテーブルで、対象フィールドにNULLが許可されているかどうか。必須フィールドにNULLが入るとエラーの原因になります。
- コネクタの権限スコープ: 使用しているコネクタに必要な権限が正しく割り当てられているか。特に、カスタムコネクタやプレミアムコネクタでは、APIのスコープが制限されているとnull値が原因で権限エラーに見えることがあります。
- Power Platform環境のDLPポリシー: データ損失防止ポリシーによって、特定のコネクタの使用が制限されている場合、null値が原因ではなくポリシー違反でエラーになることもあります。エラーメッセージをよく確認してください。
よくある質問とトラブルシューティング
Q: nullチェックを追加したのに権限エラーが治りません
A: nullチェックが正しく機能していない可能性があります。フロー実行履歴で、どのアクションがエラーになっているかを確認し、そのアクションの入力値が本当にnullになっていないか調べてください。また、条件分岐の式に誤りがないか(例:emptyのスペルミス)確認します。
Q: empty関数とequals関数のどちらを使うべきですか
A: 状況によります。empty()はnull、空文字、空の配列をすべてtrueと判定します。一方、equals(value, null)は厳密にnullのみを対象にします。空文字を許可したい場合はequalsを使い、空文字もエラーにしたい場合はemptyを使います。
Q: ループ内でnullがある場合の効率的な対処方法は
A: ループの前にfilterArray()関数を使ってnullの要素を除去することをおすすめします。例:@filterArray(variables('array'), (item) => not(equals(item, null)))。または、ループ内の最初のアクションでnullチェックを行い、nullの場合は「終了」アクションでスキップします。
Q: 権限エラーとnull値が無関係である可能性はありますか
A: はい。特にプレミアムコネクタやカスタムコネクタでは、コネクタの接続設定やAPIの認証が切れている場合にも同様のエラーが発生します。まずはnull値のチェックを追加し、改善しなければ接続設定や権限を見直しましょう。
まとめ
Power Automateでnull値が原因で権限エラーが発生するケースは、条件分岐の追加と入力値の適切な変換で解決できます。最初にエラーログでnullが含まれていないか確認し、該当するアクションの前にempty関数やcoalesce関数を使ったチェックを入れましょう。管理者に相談する際は、エラーメッセージのスクリーンショットと、修正前後のフロー構成を共有するとスムーズです。適切なnull値処理を習慣化することで、予期しない権限エラーを大幅に減らせます。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Office・仕事術の人気記事ランキング
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【神技】保存せずに閉じたExcel・Wordファイルを復元する!消えたデータを復活させる4つの救出法
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
- 【Excel】矢印キーで「セルが動かず画面がスクロールする」!ScrollLockの解除方法(ノートPC対応)
- 【Teams】会議の「参加者リスト」を出席後にダウンロードする!誰が参加したか確認する手順
- 【Teams】画面共有時に「音声」も共有する方法!音が流れない時の設定手順
