Веб-служба Sharepoint GetListItems не возвращает все строки - PullRequest
5 голосов
/ 22 августа 2009

Я использую веб-сервис GetListItems, и он возвращает только около 50% сохраненных результатов. Существует ли ограничение на количество возвращаемых данных? Есть ли что-нибудь вокруг этого?

Ответы [ 7 ]

5 голосов
/ 22 августа 2009

Метод извлекает только количество строк в представлении списка по умолчанию. Чтобы решить эту проблему, вы можете просто увеличить количество строк в представлении по умолчанию или, что еще лучше, использовать запросы CAML. Вот статья о том, как использовать CAML с веб-сервисами: http://dotnet.org.za/zlatan/archive/2007/08/01/collaborative-application-markup-language-caml-and-webservices-in-sharepoint-2007.aspx

4 голосов
/ 24 октября 2011

Из моего опыта у вас есть варианты: 1. Измените представление, которое вы используете при вызове метода getlistitems, на правильное представление, которое возвращает все строки 2. Проверьте и посмотрите, поместили ли вы ограничение строки в свой метод getlistitems. Если вы хотите вернуть все, что у вас есть в текущем представлении, вы можете использовать «0», см. Пример ниже: XmlNode doc = doclist.GetListItems («Мой список», «Мой вид», запрос, viewFields, «0», queryOptions, null);

Вы также можете попробовать зайти на свой сайт SharePoint, перейти к списку, из которого вы тянете, затем выбрать настройки и изменить вид по умолчанию / создать свой собственный вид и развернуть группу «Итоги». В группе «Итоги» найдите уникальный идентификатор для вашего списка (например, ID), затем в раскрывающемся списке рядом с ним выберите «СЧЕТЧИК» и сохраните свой вид. Как только список перезагрузится, сравните общее число, которое теперь будет отображаться в этом представлении, с количеством элементов, возвращаемых вашим запросом. Дайте мне знать, если они все еще не одинаковы. :)

2 голосов
/ 22 августа 2009

См. эта статья, количество возвращаемых вами строк основано на используемом представлении. Измените ограничение строки в представлении.

1 голос
/ 26 июня 2015

Установить rowLimit на 0

var rowLimit = "0";
var result = client.GetListItems("ListName", null, query, viewFields, rowLimit, queryOptions, null);

Остерегайтесь тайм-аутов . Если у вас есть много элементов в списке SharePoint, вы можете нажать http timeout. Тайм-ауты можно изменить в IIS и web.config вашего сайта SharePoint

1 голос
/ 27 сентября 2013

Просто для ссылки на других людей, которые попадают сюда из Google.

Мне нужно извлечь данные из устаревшей системы, и у меня точно такая же проблема. Разница в том, что у меня нет контроля над списком sharepoint, поэтому я не могу изменить представление по умолчанию.

var items = listSvc.GetListItems(listname, null, null, null, null, null);

var pager = items.ChildNodes[1].Attributes["ListItemCollectionPositionNext"] != null ? items.ChildNodes[1].Attributes["ListItemCollectionPositionNext"].Value : string.Empty;
var pagerXml = new XmlDocument();
pagerXml.InnerXml = "<QueryOptions><Paging ListItemCollectionPositionNext=\"\" /></QueryOptions>";
var pagerNode = pagerXml.GetElementsByTagName("QueryOptions")[0];

while (!string.IsNullOrEmpty(pager))
{
    pagerNode.ChildNodes[0].Attributes[0].Value = pager;
    var temp = listSvc.GetListItems(listname, null, null, null, null, pagerNode);
    foreach (XmlNode c in temp.ChildNodes[1].ChildNodes)
    {
        var c2 = items.OwnerDocument.ImportNode(c, true);
        items.ChildNodes[1].AppendChild(c2);
    }

    pager = temp.ChildNodes[1].Attributes["ListItemCollectionPositionNext"] != null ? temp.ChildNodes[1].Attributes["ListItemCollectionPositionNext"].Value : string.Empty;
}

Это однократный код использования, поэтому я оставляю читателю навести порядок: D

но суть в том, что если вы не можете получить его за один вызов, просто получите его партиями, используя размер страницы просмотра в качестве размера пакета. Последний аргумент GetListItems() принимает параметр XmlNode, и вы можете передать что-то вроде:

<QueryOptions><Paging ListItemCollectionPositionNext="{paging-option}" /></QueryOptions>

, где {paging-option} - это значение атрибута (с тем же именем), что и rs:data

1 голос
/ 21 апреля 2012

GetListItems () ограничивает результаты на основе ограничения строки представления, которое вы используете в качестве второго параметра в вызове метода. Если вам нужно вернуть все строки:

  1. Перейдите на свой сайт SharePoint, используя свой любимый (или наименее любимый) веб-браузер
  2. Перейдите к вашему списку
  3. Выберите представление, соответствующее идентификатору GUID, который вы используете в качестве второго параметра вызова метода GetListItems () (см. Пример ниже)
  4. Выберите (из раскрывающегося меню «Вид») «Изменить этот вид»
  5. Прокрутите весь путь до самого дна и разверните "Предел элемента"
  6. Установите большое число (я использовал 9000) в качестве «Количество элементов для отображения» и выберите «Ограничить общее количество элементов, возвращаемых к указанному количеству.»
  7. Нажмите ОК.

    Service.GetListItems (ListGuid, ViewGuid , запрос, viewFields, RowLimit , queryOptions, null);

Если параметр метода RowLimit меньше предела просмотра строки, который вы установили в SharePoint, то результаты будут ограничены значением параметра.

1 голос
/ 30 декабря 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...