SharePoint 2013 REST API не возвращает все элементы для списка

в названии говорится о моей проблеме совершенно точно. Если я попытаюсь собрать все 400 + элементов из списка с помощью REST API sharepoint, я получу только первые 100.

Я прочитал http://msdn.microsoft.com/en-us/library/office/dn292552 (v=офис.15).aspx и в части "работа с элементами списка с помощью REST" они заявляют, что

В следующем примере показано, как получить все элементов списка.

url: http://site url/_api/web/lists/GetByTitle(‘Test')/items

method: GET

headers: ...

я выделил слово все, потому что это не то, что я получаю ...

Я что-то пропустила? Есть ли какой-то вариант, который я должен отключить/включить, чтобы получить действительно все элементы?

спасибо

4 ответов


ограничение связано с подкачкой на стороне сервера.

обходной путь состоит в том, чтобы получить 100 элементов одновременно или переопределить ограничение, введя количество элементов:

https://$DOMAIN/$SITE/_api/web/Lists/getByTitle('$LIST')/Items?$top=1000

обратите внимание, что существует также порог в 5000.


вы можете использовать RowLimit & RowsPerPage в вызове rest. Ниже приведен пример

$.ajax({
url: siteurl + "/_api/web/lists/getbytitle('NewList')/items",
method: "GET",
headers: { "Accept": "application/json; odata=verbose" },
RowLimit : null, //Specify the row limit
RowsPerPage : null, //Specify no of rows in a page
success: function (data) {
     $.each(data.d.results, function(index, item){
$('#oDataFilter').append("<tr>" + "<td class="+styleClass+">" + item.ID + "</td>" + "<td class="+styleClass+">"+ item.Title + "</td>" + "</tr>");
});
},
    error: function (error) {
alert('Error getListItems :: '+JSON.stringify(error));
}

добавлять к Кристоф!--5--> ответ я бы сказал, что перечисление всех (потенциально 5000) элементов в списке и их разбор приведет к проблемам с производительностью.

Если вы запросите sharepoint, чтобы показать все элементы в определенном списке, он распечатает только первые 100. Но ответ xml также предоставляет url-адрес для запроса следующих 100 элементов списка.

в самом конце ответа xml вы увидите тег, как это

<link rel="next" href="https://xxxxx.sharepoint.com/_api/web/lists/GetByTitle('list')/items?%24skiptoken=Paged%3dTRUE%26p_ID%3d100" />

url внутри href="...."это то, что вам нужно.

запрос выше предоставит вам список следующих 100 или менее элементов. Если осталось еще больше элементов, этот xml-ответ, в свою очередь, предоставит другой <link rel="next"> тег, а если нет, этот тег не будет существовать.

лучше обрабатывать 5000 предметов в наборах из 100, а не их все вместе, на мой взгляд.


для тех, кто сейчас это видит, вы можете использовать data.d.__next чтобы получить следующие 100 товаров. Используя некоторую старую добрую рекурсию, вы можете получить все элементы, такие как so

function getItems(url) {
  $.ajax({
    url: url,
    type: "GET",
    headers: {
      "accept": "application/json;odata=verbose",
    },
    success: function(data) {
      console.log(data);

      // Do work

      if (data.d.__next) {
        getItems(data.d.__next);
      }
    },
    error: function(jqxhr) {
      alert(jqxhr.responseText);
    }
  });
}