はじめに
この記事では、Power Automate にてShare Point コネクタ利用時に「ファイル識別子」に別のアクションで取得した、パスなどの動的コンテンツを設定したい場合のやり方について纏めています。
別のアクションで取得したパスを「ファイル識別子」に設定する場合、取得した値を少し加工してあげる必要があるのですが若干初見殺し感があるので備忘録も兼ねて纏めてみることにします。
「ファイルパス」と「ファイル識別子」
Power Automate からShare Point のドキュメントを指定するには、対象の「サイトのアドレス」と「ファイルパス」もしくは「ファイル識別子」の指定が必要なものがほとんどです。
では、「ファイルパス」と「ファイル識別子」の違いは何でしょうか?
実際に動かしてみて挙動をみてみましょう!
下記のようなフローを用意し、実際に動かしてみます。
2つとも同じ結果を取得するようなアクションですね。
違いは、「ファイルパス」か「ファイル識別子」という点です。
そしてこちらが上記フローを実行した結果です。
「ファイル識別子」を指定したフローだけが失敗していますね。
エラーとしては、下記のようなものが出力されています。
{ "status": 400, "message": "Route did not match\r\nclientRequestId: 6d2fa675-2883-41b6-bd93-d6d7a73ac3f1\r\nserviceRequestId: 6d2fa675-2883-41b6-bd93-d6d7a73ac3f1" }
ルートが一致しないと怒られていますね。
原因を調査してみる
「未加工入力の表示」で「ファイル識別子」に動的なコンテンツを設定した場合と、GUI 操作で直接パスを設定した場合の違いを比較してみましょう。
「未加工入力の表示」は実行履歴の以下より取得可能です。
ここで取得した結果をWinMarge という比較・マージ用ツールを用いて差分を比較してみます。
左がGUI 操作で直接パスを設定した場合、右が動的なコンテンツを設定した場合です。
比較の結果「id」に指定されている値が違うということがわかりました。
「/」が「%252f」に置換されていますね。
これでピンとこない方は
- / %252f
- %252f uri
などで調べてください。
※%252f ではなく%2F が検索結果に引っかかるかもしれませんが、どちらでも同じ挙動をします。
「ファイル識別子」に動的コンテンツを指定するには
これらの結果をもとに「ファイル識別子」に指定している動的コンテンツを加工してアクションが正常に実施されるように修正します。
修正内容は「/」を「%252f」(もしくは「%2F」)に置換してあげればよいです。
置換を行うには、「replace」関数を用います。
replace(items('Apply_to_each')?['Path'], '/', '%252F')
もしくは
replace(items('Apply_to_each')?['Path'], '/', '%2F')
これで正常にフローを実行することができました!
おわりに
今回は、問題解決アプローチも記事に組み込んで紹介してみました。
調べても出てこないような問題もPower Automate やPower Apps でアプリを作成しているかもしれません。
そのような場合は、自分でトライ&エラーを繰り返してみて原因を特定し、解決できるよう目指してみましょう!