Le titre énonce mon problème assez exactement. Si j'essaie de rassembler les 400+ éléments d'une liste à l'aide de l'API REST REST sharepoint, j'obtiens seulement les 100 premiers.
J'ai lu http://msdn.Microsoft.com/en-us/library/office/dn292552 (v = office.15) .aspx et dans "Travailler avec des éléments de liste en utilisant REST" partie, ils déclarent que
L'exemple suivant montre comment récupérer tous les éléments d'une liste.
url: http://site url/_api/web/lists/GetByTitle(‘Test')/items
method: GET
headers: ...
J'ai mis en surbrillance Word tout, parce que ce n'est pas ce que je reçois ...
Suis-je en train de manquer quelque chose? Existe-t-il une option que je devrais désactiver/activer pour obtenir vraiment tous les éléments?
Merci
La limitation est due à la pagination côté serveur.
Une solution de contournement consiste à récupérer 100 éléments à la fois ou à remplacer la limitation en saisissant un nombre d'éléments:
https://$DOMAIN/$SITE/_api/web/Lists/getByTitle('$LIST')/Items?$top=1000
Notez qu'il existe également un seuil à 5000.
Ajouter à Christophe réponse, je dirais que répertorier tous les éléments (potentiellement 5000) dans une liste et les analyser entraînerait des problèmes de performances.
Si vous interrogez sharepoint pour afficher tous les éléments d'une liste particulière, il n'imprimera que les 100 premiers. Mais la réponse xml fournit également l'URL pour interroger les 100 éléments de liste suivants.
À la toute fin de la réponse xml, vous verrez une balise comme celle-ci
<link rel="next" href="https://xxxxx.sharepoint.com/_api/web/lists/GetByTitle('list')/items?%24skiptoken=Paged%3dTRUE%26p_ID%3d100" />
L'URL à l'intérieur href="...."
est ce dont vous aurez besoin.
En interrogeant ce qui précède, vous obtiendrez une liste des 100 éléments suivants ou moins. S'il reste encore plus d'éléments, cette réponse xml fournirait à son tour un autre <link rel="next">
tag et sinon ce tag n'existera pas.
Mieux vaut manipuler 5000 articles dans des ensembles de 100 plutôt que tous ensemble à mon avis.
Vous pouvez utiliser RowLimit & RowsPerPage dans l'appel de repos. Voici l'exemple
$.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) {
$('#oDataFilter').append("<table>");
$.each(data.d.results, function(index, item){
$('#oDataFilter').append("<tr><td class="+styleClass+">" + item.ID + "</td><td class="+styleClass+">"+ item.Title + "</td></tr>");
});
$('#oDataFilter').append("</table>");
},
error: function (error) {
alert('Error getListItems :: '+JSON.stringify(error));
}
Pour tous ceux qui voient maintenant cela, vous pouvez utiliser data.d.__next
pour obtenir les 100 éléments suivants. En utilisant une bonne vieille récursivité, vous pouvez obtenir tous les éléments comme ça
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);
}
});
}