LoginSignup
19
17

More than 1 year has passed since last update.

SharePoint ドキュメントライブラリの5000件問題と対応策について

Last updated at Posted at 2021-07-17

SharePoint には、リスト とは別にドキュメントライブラリというのが存在します。
SharePoint の リスト については、モダンサイトにすれば5000件問題から解放されるみたいな話があるのですが・・・
※詳しいお話は、太田さんがまとめてくれています!
idea.toString(); SharePoint Online モダン リストの 5,000 件問題対応と 20,000 件問題の回避方法

こと、ドキュメントライブラリについては、5000件を超えると明示的に以下のような警告が表示されるようになります。

image.png

image.png

まぁ、だから何だ?ってお話なんですけど、今回意外なところでこの問題にぶつかりました。

そもそも ドキュメントライブラリのアイテムって?

ドキュメントライブラリだから、アイテムのカウントは当然ファイル単位と思われている方も多いかと思います。

しかし、調査した結果 フォルダもカウントに含まれる ことが分かりました。
まぁ、考えてみれば当然っちゃ当然なのですが・・・

この図のように、フォルダ「1」に
image.png
ファイル「1.xlsx」が入っている場合
image.png

フォルダ「1」を構成するアイテム数は2となります。

一般的なファイルサーバーのような扱いをしている場合は、フォルダに複数のファイルやフォルダが格納されていると思いますので、ドキュメントライブラリのアイテム数は尋常じゃない個数になるということは想像に難しくないでしょう。

今回問題が起きたところ

Power Automate を組んでいるときに、当該フォルダのファイルの一覧を取得しようとして、以下のようなフローを組みました。

image.png

結果は、アイテム数が5000件を行かない場合は、明示的に配列データとして一覧を取得することができました。
image.png

ところが、5000件を超えると、以下のようなエラーが出るようになります。
image.png

かと思えば、環境によってはエラーにはならず、空の配列だけが出力されることもあります。
※つまり処理が継続してしまう。

でも、フォルダも指定しているので、そんな全件検索を使用しているつもりはないと思うのですが、明示的にOdata の Filter クエリを投げないと出力できないようです。

じゃあクエリをなげるか・・・

クエリを投げるようにすればいいっぽいので、作成日を適当に入れて検索してみました。
しかし・・・

5000件未満のファイル取得はうまくいく

以下のように、フィルタークエリを作成日を指定して実施したところ、きちんと出力されるようになりました。

image.png

image.png

・・・が

5000件以上のファイル取得はうまくいかない

同様のクエリを、5000件以上のフォルダに対して同様に行ったところ・・・

image.png

image.png

ご覧のように、取得することができません・・・。

フォルダのIDを元に検索するのが一番確実・・・?

冒頭で申しました通り、フォルダもまた1アイテムです。
基本的にフォルダが作成された後でないとファイルをフォルダ内に「作成」されることはありませんので、当該フォルダのIDを取得して、それをフィルタクエリに入れてあげれば、5000アイテムを超えるドキュメントライブラリであっても検索されるようになりました。

image.png

ただし、あくまで
格納先のフォルダができた後にファイルがそのフォルダに作成されることが前提の仕様となりますので、予めファイルが作成されていて、そのフォルダに移動するといった場合は、IDが作成時より若いと思われますので、そういう場合は一工夫する必要があるかと思います。

19
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
17