ある日、普段動いている Power Automate(SharePoint コネクタ)の「新しいフォルダの作成」アクションで、急に「Exception from HRESULT: 0x80131904」エラーが出てコケた。
結論から言うと、原因は「SharePointのごみ箱にファイルが溜まりすぎていたこと」。
見かけ上のファイル数が5000件未満でも、ごみ箱の中身を含めてしきい値を超過し、エラーになっていた模様。
以下、調査から解消までのメモ。
発生したエラー:「Exception from HRESULT: 0x80131904」

Exception from HRESULT: 0x80131904 clientRequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx serviceRequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
「0x80131904」はよく出るエラーで、SharePoint Onlineでも同じエラー文字列が出る事例がいくつか報告されてる。
前提:SharePointの「5000件問題」
SharePointには「リストビューのしきい値(List View Threshold)」があって、よく5000件が目安として語られるやつ。
このしきい値に引っかかると、画面表示だけでなく「API経由の操作」でもエラーになることがある(今回がまさにそれ)。
今回の原因:ごみ箱が溜まりすぎ
最初、ドキュメントライブラリのアイテム数を見たら3700件くらいで、そこまで危機感を持ってなかった。
ただ、同じサイトのごみ箱に、同じドキュメントライブラリから捨てたファイルが7000件強残っていて、これが今回の落とし穴……。
SharePointでは「ごみ箱側のアイテムが増えすぎて、しきい値関連のエラーになる」ケースがあるみたいで、「見えるファイル数」だけ見て安心していると、裏側で詰まっていることがある。
解消:不要なファイルを消し、ごみ箱を空にする
いうことで今回は、ドキュメントライブラリ内の不要なファイルを削除し、ごみ箱を空にしたところ、フローは問題なく最後まで実行されるようになった。
ちなみにSharePoint Onlineのごみ箱には段階があって、ユーザーが見る「ごみ箱」とは別に、さらにもう一段(管理側の領域)もある仕様。
今回のハマりを減らす意味でも、運用として「定期的にごみ箱を空にする」はルール化したほうが安全。
未検証の回避策(次やるならこれ)
今回は「ごみ箱を空にする」で解決したけど、ファイルを簡単に消せない現場もあるので、次に同じ系統で詰まったら試したい回避策は以下の通り(※どっちも未検証)。
1) ドキュメントライブラリを分ける(未検証)
アーカイブ用のドキュメントライブラリを作って、古いファイルをそっちに逃がす。
Power Automateが触るライブラリの総量を抑えられれば、しきい値系のトラブルを踏みにくくなるはず。
2) 列にインデックスを付ける(未検証)
SharePointのリストビューしきい値周りは「インデックスで回避できる」話が定番。
なので、フローで検索・参照に使う列(作成日やフォルダパスに関係する列など)にインデックスを付けるのも解消方法の候補。
注意:0x80131904はこれ以外でも出る
今回の自分の環境では「ごみ箱に大量ファイル」が原因だったけど、0x80131904 自体は汎用エラーで、SharePoint Onlineでも別要因で出る可能性があるとのこと。
なので、同じエラー(Exception from HRESULT: 0x80131904)が出た場合は、まず「アイテム数(ごみ箱の件数含む)」を順に疑って、それでもダメな場合は別の原因を探す必要がある。

コメント