質問

私は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

ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top