タイトルは私の問題をかなり正確に述べています。 SharepointのREST APIを使用してリストから400以上のアイテムをすべて収集しようとすると、最初の100しか取得できません。
http://msdn.Microsoft.com/en-us/library/office/dn292552(v = office.15).aspx を読み、「RESTを使用してリストアイテムを操作する」で一部、彼らはそれを述べています
次の例は、リストのアイテムのallを取得する方法を示しています。
url: http://site url/_api/web/lists/GetByTitle(‘Test')/items
method: GET
headers: ...
私はWordをすべて強調表示しましたが、それは私が得ているものではないためです...
何か不足していますか?本当にすべてのアイテムを取得するために無効/有効にする必要があるオプションはありますか?
ありがとう
制限はサーバー側のページングによるものです。
回避策は、一度に100アイテムを取得するか、アイテムの数を入力して制限を上書きすることです。
https://$DOMAIN/$SITE/_api/web/Lists/getByTitle('$LIST')/Items?$top=1000
5000にもしきい値があることに注意してください。
Christophe's 回答に追加するすべての(潜在的に5000の)アイテムをリストにリストし、それらを解析すると、パフォーマンスの問題が発生すると言います。
特定のリスト内のすべてのアイテムを表示するためにSharePointにクエリを実行すると、最初の100のみが出力されます。ただし、xml応答は、次の100のリストアイテムをクエリするためのURLも提供します。
Xml応答の最後に、次のようなタグが表示されます
<link rel="next" href="https://xxxxx.sharepoint.com/_api/web/lists/GetByTitle('list')/items?%24skiptoken=Paged%3dTRUE%26p_ID%3d100" />
href="...."
内のURLが必要になります。
上記のクエリを実行すると、次の100個以下のアイテムのリストが提供されます。まだアイテムが残っている場合、このxml応答は別の<link rel="next">
タグを提供し、存在しない場合、このタグは存在しません。
私の意見では、5000個のアイテムをまとめて処理するよりも、100個のセットで処理する方が良いでしょう。
RestLimitでRowLimitとRowsPerPageを使用できます。以下は例です
$.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));
}
今これを見ている人なら誰でもdata.d.__next
次の100アイテムを取得します。古き良き再帰を使用すると、すべてのアイテムをそのように取得できます
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);
}
});
}