Получить список SharePoint в пакетном режиме c # CSOM - PullRequest
0 голосов
/ 13 марта 2019

Можете ли вы помочь мне получить элементы библиотеки SharePoint (это библиотека с наборами документов) с помощью CSOM.В библиотеке более 5000 элементов, и я знаю, что в SharePoint ограничение составляет 5000, поэтому я пытаюсь получить их партиями по 500. Возможно ли это?

clientContext.Credentials = new SharePointOnlineCredentials(username, securePassword);
List oList = clientContext.Web.Lists.GetByTitle(libraryName);
clientContext.Load(oList);
clientContext.ExecuteQuery();
CamlQuery query = new CamlQuery();
query.ViewXml = "<View><RowLimit>500</RowLimit></View>";
ListItemCollection allDocumentSet = oList.GetItems(query);
clientContext.Load(allDocumentSet);
clientContext.ExecuteQuery();

Я не знаю, почемуне работает.Я получаю следующую ошибку.

Microsoft.SharePoint.Client.ServerException: «Попытка выполнения операции запрещена, поскольку она превышает пороговое значение представления списка, установленное администратором.»

Почему я получаюошибка, если я получаю только 500 наименований в пакете?

Кроме того, еще один вопрос.Когда мне следует использовать «ExecuteQuery» и функцию загрузки?

Спасибо!

1 Ответ

0 голосов
/ 13 марта 2019

Вам необходимо запустить ExecuteQuery для извлечения / обновления данных с сервера.

Вот мой пример тестового кода для извлечения элементов более 5000.

 List lmsList = clientContext.Web.Lists.GetByTitle("LargeList");
                ListItemCollectionPosition itemPosition = null;
                while (true)
                {
                    CamlQuery camlQuery = new CamlQuery();
                    camlQuery.ListItemCollectionPosition = itemPosition;
                    camlQuery.ViewXml = @"<View><RowLimit>500</RowLimit></View>";

                    ListItemCollection listItems = lmsList.GetItems(camlQuery);
                    clientContext.Load(listItems);
                    clientContext.ExecuteQuery();

                    itemPosition = listItems.ListItemCollectionPosition;
                    Console.WriteLine(itemPosition);
                    //foreach (ListItem listItem in listItems)
                    //    Console.WriteLine("Item Title: {0}", listItem["Title"]);

                    if (itemPosition == null)
                        break;

                    Console.WriteLine(itemPosition.PagingInfo);                    
                }
...