API SharePoint CSOM не генерирует исключение порогового значения - PullRequest
0 голосов
/ 06 мая 2020

Я использую Microsoft.SharePoint.Client.Folder.Folders для доступа к папке с более чем 5000 подпапок.

Я ожидал получить сообщение об ошибке: «Попытка операции запрещена, поскольку она превышает порог просмотра списка установлен администратором. ". Но вызов возвращает пустой без ошибок.

Эта проблема возникает при использовании CSOM для доступа к папке в SharePoint 2016, 2019 и в Интернете.

Кто-нибудь знает, является ли это известной проблемой в CSOM API, и если MS исправит эту проблему в CSOM, потому что ни одно исключение не вводит в заблуждение пользователя этого API.

1 Ответ

0 голосов
/ 07 мая 2020

Edit: List.RootFolder.Folders выдает исключение, если количество вложенных папок превышает 5000: enter image description here Используйте запрос CAML, как показано ниже, чтобы получить вложенные папки в родительской папке:

using (ClientContext ctx = new ClientContext("https://zheguo.sharepoint.com/sites/dev"))
            {

                ctx.Credentials = new SharePointOnlineCredentials(account, secret);
                List list = ctx.Web.Lists.GetByTitle("Documents");
                ListItemCollectionPosition position = null;
                var page = 1;

                do
                {
                    CamlQuery camlQuery = new CamlQuery();
                    camlQuery.ViewXml = @"<View Scope='RecursiveAll'><Query><Where><Eq><FieldRef Name='FSObjType' /><Value Type='Integer'>1</Value></Eq></Where></Query><RowLimit>5000</RowLimit></View>";
                    camlQuery.ListItemCollectionPosition = position;
                    camlQuery.FolderServerRelativeUrl = "/sites/dev/Shared%20Documents/";
                    var collListItem = list.GetItems(camlQuery);
                    ctx.Load(collListItem, listitems => listitems.Include(
                        item => item.Id, item => item["FileRef"])
                        , listitems => listitems.ListItemCollectionPosition);
                    ctx.ExecuteQuery();

                    position = collListItem.ListItemCollectionPosition;
                    foreach (var listItem in collListItem)
                    {
                        Console.WriteLine(listItem["FileRef"]);
                    }

                    page++;
                }
                while (position != null);
             }

Использование ListItemCollectionPostion может преодолеть большие данные, превышающие 5000 элементов, в фильтре Caml FSObjType равным 1 означает получить только объект папки:

Как выполнить запрос CAML в больших списках SharePoint с помощью CAML, чтобы избежать Исключение - попытка операции запрещена, поскольку она превышает пороговое значение представления списка, установленное администратором - SharePoint Office 365

camlQuery.FolderServerRelativeUrl установлен для родительской папки, которая требует запроса.

...