SP2013でREST/ODataを使用したページング
質問
私はREST/ODataを使用してSP2013でドキュメントライブラリでページングをしようとしています(これもリストで試しています)が、私は得ることができないよ スキップ 働く項目の。
ここでは、自分のSP2013ファームで試しているUrlの例をいくつか示しますが、Office365 2013Dev Previewファームでも機能しません。結果が返され、top topと.orderbyは正常に動作しますが、アイテムをスキップすることはありません。すなわちURLからskip skipを取り出すことができ、同じ結果が得られます。
http://sp15/_api/web/lists/GetByTitle('FAQ')/Items?$skip=2&$top=2&$orderby=ID
http://sp15/_api/web/lists/GetByTitle('FAQ')/Items?$skip=2
http://sp15/_api/web/lists/GetByTitle('FAQ')/Items?$skip=2&$top=2
http://sp15/_api/web/lists/GetByTitle('Documents')/Items?$skip=2&$top=2&$orderby=ID
http://sp15/_api/web/lists/GetByTitle('Documents')/Items?$skip=2&$top=2&$orderby=ID desc
など。
私が間違っていることについてのアイデアはありますか?
解決
残りのようなものではなく、古い構文を試してみてください。 例:* http://sp15/_vti_bin/listdata.svc/faq?$ skip= 4&$ top= 2 *
他のヒント
現在 $skip
クエリオプションは ない SharePoint2013/Onlineでサポートされています。
によると SharePoint REST要求でODataクエリ操作を使用する:
ザ-
$skip
クエリオプションはSharePointのクエリでは機能しません リスト項目.
しかし、あなたは利用することができます $skiptoken
以下に示すように、ページ化された結果を返すクエリオプションクエ
フォーマット: $skiptoken=Paged=TRUE&p_ID=<last item id to skip>&$top=<items count>
例を示します。
この例では、idが等しいかそれ以上のアイテム(2アイテム)の限られた数を取得する方法を示しています 2
から Pages
ライブラリ:
function getPagedItems(webUrl,listTitle,startItemId,itemsCount)
{
var endpointUrl = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/items?$skiptoken=" + encodeURIComponent('Paged=TRUE&p_SortBehavior=0&p_ID=' + (startItemId-1) + '&$top=' + itemsCount);
return executeRequest(endpointUrl,'GET');
}
getPagedItems('https://contoso.sharepoint.com/','Pages',2,2)
.done(function(data){
if(data.d.results.length == 0){
console.log('Items not found');
return;
}
for(var i = 0; i < data.d.results.length; i++){
var item = data.d.results[i];
console.log(item.Title);
}
});
ここで
function executeRequest(url,method,headers,payload)
{
if (typeof headers == 'undefined'){
headers = {};
}
headers["Accept"] = "application/json;odata=verbose";
if(method == "POST") {
headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
}
var ajaxOptions =
{
url: url,
type: method,
contentType: "application/json;odata=verbose",
headers: headers
};
if(method == "POST") {
ajaxOptions.data = JSON.stringify(payload);
}
return $.ajax(ajaxOptions);
}
新しいODATA v3 _APIエンドポイントを使って、SP2013のオンラインで同じ問題を表示します。CRUD操作の場合、時刻にはOData V2 ListData.SVCエンドポイントを使用することをお勧めします。
Vadimの応答は非常に近いですが、彼のクエリ文字列は少しオフです。この問題は実際には彼のマイクロソフトではありません。
私はChromeのPostman拡張を使用し、$ topを使用したときに返された__next値を調べることで、__nextの値に正しくエスケープされていないアンパサンドがあることがわかりました。そのアプローチを使用すると、私は2013 REST ODATA呼び出しとのページ興味を取得することができました。これがVADIMの応答と組み合わせて使用する関連コードです。
var queryString = "?%24skiptoken=Paged%3DTRUE%26p_ID%3D" + (startItemId - 1) + '&%24top=' + itemCount;
. 私の経験では、上記の解決策のどれも機能しません - これは外部リストを使用してこれを試みていたためです。ページングを実装するには、追加しましたか?$ SkipToken= paged= true&$ top= 100 URIの終わりまで。次のページのURIはjson.d .__次の下に含まれます。最後のページに達すると__nextは存在しません
$ SKIPパラメータはSharePoint 2013では、リスト項目では機能しません。データの収集(List Collections、ECCなど)のコレクションのみが機能します。 この記事の最後にある私のコメントを見てください: > http://msdn.microsoft.com/library/d4b5c277-ed50-420C-8A9B-860342284B72.aspx