6.9K Views
October 22, 23
スライド概要
気ままに勉強会 #70 LT会に登壇させていただいた際の資料です。
Power AutomateでSPOファイル作成時のパス長すぎ、上書き時におきるエラーの対処などについてです。
Power Automate SPO ファイル作成・取得のパス長すぎ エラーの回避、上書き更新について 気ままに勉強会 #70 LT 2023/10/21:ヨウセイ
自己紹介 ヨウセイ 一般職からSPO・C#系へ。そこからPower Platform技術者へ。 主にシステム開発や技術支援をやっています。得意分野は以下です。 Power Automate Power Apps キャンバスアプリ モデル駆動型アプリ Dataverse Power Pages Power Automate for Desktop M ic ro so ft認 定: P o w e r P la t fo rm So lut io n A rc hit e c t Exp e rt 他 E X A M : P L 6 0 0 、 P L 2 0 0 、 P L 1 0 0 、 PL 9 0 0 SharePoint • BLOG:Power Apps Tips ログ (youseibubu.com) • X( 旧Twitter):https://twitter.com /youseibubu • Qiita:https://qiita.com /youseibubu • Docswell:https://www.docswell.com /user/yousei
アジェンタ • SPOファイル作成時のパス長すぎ問題の回避 • SPOファイル作成時上書きエラーの回避 • 追加調査!対応する容量について • SPOファイル取得時のパス長すぎ問題の回避 • おまけ:OneDriveは?
SPOファイル作成時の パス長すぎ問題の回避
パス長すぎ問題 SPOでの「パス(フォルダ名+ファイル名)」 が長すぎるとファイル作成時にエラーが発生」する事象 Aは大丈夫だが、 Bの場合にエラー A:ある程度長い フォルダ名+ファイル名が 一定より長いとエラーに エラーメッセージはよくわ /Shared Documents/DOC1/ あああああああああ あああああああああ あああああああああ あああ/あいうえおか きくけこ新しいファ イル名.jpg B:さらに長い からん。。
パス長すぎ問題 参考: PowerAutomate 「ファイルの作成」は名前が長すぎるとエラー? #PowerAutomate - Qiita ファイルパス(フォルダ名+ファイル名まで)の エンコード後のバイト数が740ほどとなるとエラー が発生するというもの。 ファイルの識別子(ID)にはパスをエンコードした ものが使われる。※SPOの場合 →2バイト文字の場合は、エンコード×エンコード という感じで、1文字が15バイトくらいになってし まい軽く740バイトに達します。 大体日本語のみだと5~60文字で到達する感じ これとは別にSPOやOneDrive側の制限でエンコード後の パスは文字数400文字までの制限があります。 これ以下でも上記の場合にエラーとなる事象です。 OneDrive と SharePoint の制限事項と制約事項 - Office サ ポート (microsoft.com) 完全にこれが原因ともいいきれないが、 通常だとこの文字数で成功/エラーが分かれる
パス長すぎ問題 SPOの場合のファイルのPath:ライブラリ+フォルダ+ファイル名 →ドキュメントライブラリ以降のパス(サイト部分除く) /Shared Documents/DOC1/ああああああああああああああああああああああああああああああ/新しいファイル名.jpg SPOの場合のファイルのID(識別子):Pathがエンコードされたもの →日本語だと取っても長くなる。英語だとそのまま 文字数:66 %252fShared%2bDocuments%252fDOC1%252f%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%258 2%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%2 5e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3 %2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%25 81%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581%2582%25e3%2581% 2582%25e3%2581%2582%252f%25e6%2596%25b0%25e3%2581%2597%25e3%2581%2584%25e3%2583%2595%25e3%258 2%25a1%25e3%2582%25a4%25e3%2583%25ab%25e5%2590%258d.jpg なにかの呪文なの? こわいわっ! ぱわ代 文字数:616
パス長すぎ問題 Aある程度長い →これは成功 Bさらに長い IDは大体760くらい →失敗 AのIDの文字数:616
パス長すぎ問題 さきほどの文字数までの例: /Shared Documents/DOC1/あああああああああああああああああああああああああああ あああ/あいうえおかきくけこ新しいファイル名.jpg 76文字でアウト 実際の例:以下のフォルダ構成にファイルを配置 /Shared Documents/営業部/発注管理/○○支部/△△△△△課/2023年度下期/ フォルダ:この時点で48文字 A: /Shared Documents/営業部/発注管理/○○支部/△△△△△課/2023年度下期 /□□□□□□□様.xlsx A:合計64文字→セーフ B: /Shared Documents/営業部/発注管理/○○支部/△△△△△課/2023年度下期 /□□□□□□□□□様_受注確認書類_添付資料①.xlsx B:合計76文字→アウト ※あくまでざっくり計算の例 他に対応するすべがなければフォルダおよびファイル名の文字数を これ以下となるようにする運用が必要 →ファイル名に使える文字数が結構少ない。。
パス長すぎ問題→この場合は起きないぞ! サンプルではドキュメントライブラリからのファイル取得アクションを使 用していますが、SPOの添付ファイルの場合やDataverseのファイル取得 の場合も同様に事象が発生しました。 また複数環境で確認しましたがいずれも発生していました。 ※英語、日本語の環境差は未確認 あれ?手動トリガーやPower AppsV2トリガーでパラメー ターで渡したファイルだとエラーは発生しないぞ!?
パス長すぎ問題→この場合は起きないぞ! ①:トリガーのパラメータで渡したファイルだったら起きないぞ!? ファイルコンテンツの 取得の結果を指定 →エラーとなる パラメータでファイルを渡 したものをそのまま指定 →エラーにならない!
パス長すぎ問題→この場合は起きないぞ! ①:トリガーのパラメータで渡したファイルだったら起きないぞ!? エラーなくファイルが作成される。中身も問題なし 作成されたファイルのIDの文字数は766 ※従来だとエラーで作成できなかった文字数 さらにもっと名前を長くしてもエラーは発生しません。 左記ではIDの文字数は2416でした。3000でも大丈夫でした。 これとは別にSPOやOneDrive側の制限でパスはエンコード後の文字数400文字の制限があります。 OneDrive と SharePoint の制限事項と制約事項 - Office サポート (microsoft.com)
パス長すぎ問題→この場合は起きないぞ! 普通はフロー内でファイル取得して使用するケースが多いため、 パラメータ渡し以外の方法をいろいろ探ってみた なんと作成アクションに一旦入れて、そのままそれを指定すると 同様にエラーが出なくなったぞ!? ちなみに変数アクションだとダメでした (オブジェクト、文字列などいずれも)
パス長すぎ問題→この場合は起きないぞ! ②:作成アクションにいれて指定すると起きないぞ!?
パス長すぎ問題→この場合は起きないぞ! ②:作成アクションにいれて指定すると起きないぞ!? 作成されたファイルのIDの文字数は2416 ファイルもちゃんとしている
パス長すぎ問題→それぞれの違い SPOファイル作成 なぜ? →結局解明は出来ず。 〇取得したファイルをそのまま指定と作成アクションを経ての設定 で、それぞれファイルの作成アクションの入力値の情報は全く同じ でした。 ※コンテンツタイプとバイナリを渡していてどちらも同じだった 〇パラメータ渡しの場合はコンテンツのバイナリのみを渡していた。 上のパターンとは入力値は異なる。 →ただ、同じようにファイル指定でコンテンツのみを指定にした場 合は中身が壊れていた。。 ので採用できず。。 UI上で操作、確認できる以外の部分で裏情報が何やら あるのかなーという感じでした。 アクションの入力値 ・ファイル取得 ・作成アクション →ファイル取得の場合 とおんなじ ・パラメータ渡し →Contentのみ指定と なっている。ただファ イル取得でこの形式で やってみてもファイル が壊れていた。。
パス長すぎ問題→この場合は起きないぞ! このころに気付く。あれ?上書きもできているぞ? 今までエラーになっていたのに?
SPOファイル作成時 上書きエラーの回避
上書きエラーもなくなったぞ!? ファイルを取得してそのまま指定する場合では、 既存ファイルがあるとエラーとなるが、この対応をした場合は上書きとなる。 ファイルコンテンツの ①パラメータ渡し、②作成アクション 取得の結果を指定 で設定した場合は既存ファイルがあっ →既存ファイルがある ても上書き更新される。 とエラーとなる
上書きエラーもなくなったぞ!? 通常は既存ファイルがあるとエラーとなる。 そのため以下のような対応が通常だった認識 1.先にファイル存在チェックしてあったら更新、なかったら作成 →一つのファイルを残したい場合など 2.重複しないように一意の名前を付けて作成(実行日時ミリ秒など) →実行タイミングのファイルを残したいケースや または一時ファイルとして後で削除するなどのケース →今回の対応を取ればそのままエラーなく上書きが可能 ※上記の方が良いケースもあるのでケースバイケース
上書きエラーもなくなったぞ!? 上書きエラーの回避の観点で調べてみた。 →昔は上書き更新できていたらしい。今は上書きするとエラーとなる 参考にした資料:Power Automate の「ファイル作成」は上書きでエラーになった (fujitatakesh.net) 参考記事より抜粋 →ファイル作成アクションの「チャンクの許可」をオフにすれば 解消するとな!?
上書きエラーもなくなったぞ!? 上書きエラー回避の「チャンクの許可」をオフにするの参考記事 参考にした記事: Power Automate で "名前のファイルが既に存在します" エラーを解決する方法 |アラシュ・アガジャニ (arashaghajani.com) 参考にした記事:Power Automate の共有ポイントの "ファイルの作成" アク ションのファイル チャンク エラーを解決する (bythedevs.com) ファイル作成アクションのコンテンツ転送 >チャンクの許可をオフにする。 (既定ではオンになっている)
チャンクの許可をオフ ③:チャンクの許可をオフにするとパス長い場合もエラー起きない! ①パラメータで指定、②作成アクションを指定 と同じ挙動となった! パスが長くても、既存ファイルがあっても エラーにならない。
チャンクの許可のオフについて チャンクを使用してワークフロー内の大きいサイズのメッセージを処理する - Azure Logic Apps | Microsoft Learn 大きいファイルを分割して送信する機能 Automateだと大きなメッセージサイズというのは 100MBとあり、ただコネクタがそれ以下でも大きい とみなすケースがありその場合はチャンクを検討す 自動化フロー、スケジュールされたフロー、インスタント フローの制限 事項 - Power Automate | Microsoft Learn る。。理解がちゃんとできていない。。 大きいファイルを分割してやり取りする設定のため、 オフの場合に大きいファイルの場合を使う場合にはエ ラーとなる可能性あり。 ※そもそも大きなファイルを使用する場合は 他の制限でエラーとならないかなども要注意
追加調査:影響する容量の調査 「チャンクの許可をオフ」と「作成アクション」で検証 30MB、50MBなどはOKだった。 →100MBをあげたら90MB以下でないとダメとエラー →作成アクションはチャンクの許可をオンにしていたが効 いてないので同じ挙動 1GBで試そうとしたらファ イ ル の 取得 アク シ ョン で エ ラーとなった。 何もしないケース(普通にファイ ル指定+チャンクの許可をオンの まま)→100MBが作れた。 ※公式でみると対応は1GBまで 100MB以下でないとダメ ※こっちはチャンク関連なし →だったチャンクの許可オフ で90MBで問題なさげ
追加調査:影響する容量の調査 追加調査!サンプルファイルでどの容量で影響が出るか検証 チャンクの許可をオフだと90MBより大きいとエラーとなった。 また、作成アクションに入れた場合(チャンクの許可をオンにしてる)でも同様にエラーとなった のでやはりチャンクの許可をオフと同じ挙動となる様子(チャンクの許可は無視されている) そのままの設定(通常どおりのファイル指定+チャンクの許可をオン)の場合はこれを突破出来た。 →この場合は1GB 以下まで行けるらしいが、ファイルの取得アクションが100MB以下でないと取 れないエラーが出たためそれ以上試しておらず。 →個人的には100MB以上の場合はファイルの取得側でエラーが出るので、そもそもその大きさの ファイルをやりと りするケー スは厳しいと 認識。( SPOのREST API を使えば対応 可能かも ) →90MBまではチャンクの許可をオフでもエラーとならないので おおむねこれでよさそう。
パス長すぎ、上書きエラーの回避 いずれかの対応ならどっちも回避が可能だった 大容量ファイル系は SPOのRESTAPIアクションで対 応可能かもしれない。 方法 ファイル容量 備考 ファイルの取得で そのまま指定 ~1GB? ※取得は100MBで エラー どちらもエラーが発生 上書きしない、長いパス にしない対応が必要 ①パラメータでファイ ルを渡して指定 90MB以下でないと エラーとなる 3つの結果は同じく。 正常に終了する ②ファイルの取得を一 旦作成アクションに入 れて指定 ③SPOファイル作成ア クションのチャンクの 許可をオフにする 一定以上長 いパス 上書き 作成アクションは挙動的 にチャンクの許可をオフ と同じだった。 →1アクション増えるの でチャンクの許可をオフ の方がよさそう
作成時のパス長すぎ、上書きエラーの回避 パラメータ渡しの場合は気にしないでよい。 ファイル取得して作成する際はチャンクの許可をオフにす るでよさそう。 ※従来の通り存在判定・一意ファイルがマッチするケースもあり 今回パス長すぎの件で色々探してたら、 併せて上書きエラーも回避できたね。 それぞれの事象がつながってたりもするんだねー。 ぴーたくん
SPOファイル取得時の パス長すぎ問題の回避
ファイル取得時のパス長すぎ問題 参考: PowerAutomate 「ファイルの作成」は名前が長すぎるとエラー? #PowerAutomate – Qiita 参考にした記事にもありますが、 SPOのファイルを取得する際もファイルのID(一意識別子)を指定して取 得するアクションでは一定の長さでエラーとなります!(1000位?) 対応:「パスによるファイルコンテンツの取得」にすることで長いパスの ファイルでもエラーとならず取得が可能! 「パスによる○○の取 得」を使っておけばひ とまずOK
ファイル取得時のパス長すぎ問題 対応:「パスによるファイルコンテンツの取得」にすることで長いパス のファイルでもエラーとならず取得が可能です。
おまけ:OneDriveは問題なし SPOだと注意が必要な今回の件はOneDriveだとそもそもエラー起きないです。 同じように長いパスでも作成できて、上書きもしてくれる。 →そもそもファイルのIDはSPOのそれとは異なりドライブIDなので長くならない。 →アクションも既定でチャンクの許可はオンのままで問題なし →この点は無関係っぽい。裏の仕組みが違うのか?不明 同じくらい長いパスのファイル→問題なく作成可能 既存があっても上書きしてくれる。 チャンクの許可はオン オフにしても特に変わらず。
ブログにも書いております。 ファイル作成時に名前長すぎてエラー の回避方法(現時点理由不明) | Power Apps Tips ログ (youseibubu.com) その他登壇関連: 【登壇資料】8/5 気ままに勉強会 #63 に「Power Appsと Power Automateの連携あれこれ」 で初登壇しました! | Power Apps Tips ログ (youseibubu.com) 【登壇資料】8/3 RPACommunity【自動化やIT活用ネタ】ライトニングトーク大会 に 「PowerAutomateのRSSおすすめカスタマイズ」でLT登壇しました。 | Power Apps Tips ロ グ (youseibubu.com) 【パワスロ】JPPGB ゲーム作成コンテスト #0 パワスロで大賞ならびにデザイン賞をいただき ました! | Power Apps Tips ログ (youseibubu.com)
全体のまとめ ① パラメータ渡し、作成アクション、チャンクの許可のオフ のいずれかで作成時のパス長すぎエラーと上書きエラーが どっちも回避できるよ。 ② ファイル取得時の長すぎ問題もパスによる○○の取得で回 避できるよ。 ③ 容量は90MBまでに抑えるのがよいよ。 ④ OneDriveは気にせず大丈夫だよ。 ご清聴ありがとうございました。