2014-09-26 30 views
8

Der Titel gibt mein Problem ziemlich genau an. Wenn ich versuche, alle 400+ Elemente aus einer Liste mit Sharepoint REST API zu sammeln, bekomme ich nur die ersten 100.Sharepoint 2013 REST API gibt nicht alle Elemente für eine Liste zurück

Ich habe gelesen http://msdn.microsoft.com/en-us/library/office/dn292552(v=office.15).aspx und in der "Arbeiten mit Listenelementen mit REST" Teil, sie sagen, dass

Das folgende Beispiel zeigt, wie alle der Elemente einer Liste abgerufen werden.

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

method: GET

headers: ...

ich Wort alle markiert haben, denn das ist nicht das, was ich bekomme ...

Bin ich etwas fehlt? Gibt es eine Option, die ich deaktivieren/aktivieren sollte, um wirklich alle Artikel zu bekommen?

Dank

+0

Können Sie Ihren eigenen Code anzeigen? Erhalten Sie Elemente aus der Liste oder aus einer bestimmten Ansicht? – Christophe

+0

Kein Code ist erforderlich, um zu sehen, dass ich nur die ersten 100 Elemente erhalte.Ich erhalte nur diese Menge an Gegenständen, indem ich einfach die URL in meinem Browser besuche (also einfach die Site-URL und den Test in der "http: // site url/_api/web/lists/GetByTitle ('Test')/items" mit ersetzen) meine eigenen Werte und ich bekomme XML mit diesen 100 Punkten) – leopik

+0

kein Code ist notwendig, um das Ergebnis zu sehen, aber Code könnte notwendig sein, um zu verstehen, warum ;-) – Christophe

Antwort

20

Die Einschränkung ist auf Server-Seitenauslagerung zurückzuführen.

Eine Abhilfe ist 100 Elemente zu einem Zeitpunkt abzurufen, oder die Einschränkung außer Kraft setzen, indem eine Anzahl der Elemente eingeben:

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

Beachten Sie, dass es bei 5000.

+0

Für jetzt habe ich nicht mehr Datensätze als 500 so sollte dies tun. Danke für deine Hilfe ^^! – leopik

+0

... aber, aus reiner Neugier, wie würde ich 100 Artikel in Chargen abrufen (damit ich die Kontrolle über die Chargennummer haben könnte, die ich als nächstes bekommen möchte)? – leopik

+1

ist es nicht einfach ... Vielleicht hier http://msdn.microsoft.com/en-us/library/office/fp142385(v=office.15).aspx#sectionSection6 dann durchsuchen Blogs und Foren, um herauszufinden, was eigentlich funktioniert – Christophe

1

auch eine Schwelle Sie kann RowLimit & RowsPerPage in Ruheaufruf verwenden. Unten ist das Beispiel

$.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)); 
} 
1

zu Christophe's Antwort Hinzufügen würde ich sagen alle (möglicherweise 5000) Elemente in einer Liste listing und Parsen sie in Leistungsproblemen führen würde.

Wenn Sie Sharepoint abfragen, um alle Elemente in einer bestimmten Liste anzuzeigen, werden nur die ersten 100 gedruckt. Die XML-Antwort bietet jedoch auch die URL zur Abfrage der nächsten 100 Listenelemente.

Am Ende des XML-Antwort wird Sie ein Tag wie dieser

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

Die URL innerhalb href="...." zu sehen ist, was Sie benötigen.

Die Abfrage des oben genannten würde Ihnen eine Liste der nächsten 100 oder weniger Elemente zur Verfügung stellen. Wenn noch weitere Elemente vorhanden sind, liefert diese XML-Antwort wiederum ein anderes <link rel="next">-Tag, und wenn nicht, wird dieses Tag nicht existieren.

Besser, 5000 Sachen in Sätzen von 100 zu behandeln, anstatt sie alle zusammen meiner Meinung nach.