Pregunta

Estoy intentando paginar en una biblioteca de documentos (también intento esto en una lista) con SP 2013 usando REST/OData pero parece que no puedo obtener el salto a la comba de elementos funcionando.

A continuación se muestran algunos ejemplos de URL que estoy probando en mi propia granja de SP 2013 y que tampoco funcionan en mi granja de Office 365 2013 Dev Preview.Se devuelven resultados y $top y $orderby funcionan bien, pero nunca omite ningún elemento.es decir.Puedo quitar $skip de la URL y obtengo el mismo resultado.

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

etc.

¿Alguna idea sobre lo que estoy haciendo mal?

¿Fue útil?

Solución

No estoy tan familiarizado con el descanso, pero prueba la antigua sintaxis: Ejemplo: * http://sp15/_vti_bin/listdata.svc/faq? $ Skip= 4 & $ top= 2 *

Otros consejos

Actualmente $skip la opción de consulta es no compatible con SharePoint 2013/Online.

De acuerdo a Utilice operaciones de consulta de OData en solicitudes REST de SharePoint:

El $skip La opción de consulta no funciona con consultas para SharePoint enumerar elementos.

Pero podrías utilizar $skiptoken opción de consulta para devolver resultados paginados como se muestra a continuación.

Formato: $skiptoken=Paged=TRUE&p_ID=<last item id to skip>&$top=<items count>

Ejemplo

El ejemplo demuestra cómo recuperar el recuento limitado de elementos (2 elementos) con una identificación igual o mayor 2 de Pages biblioteca:

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);
    }   
});

dónde

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);
}

Veo el mismo problema en SP2013 en línea con el nuevo punto final Odata V3 _API.Para la operación CRUD, podría ser mejor utilizar el punto final de ODATA V2 LISTDATA.SVC por el momento.

La respuesta de Vadim es muy cercana, pero su cadena de consulta está apagada un poco.El problema no es realmente suyo, sus Microsoft, ya que no están siendo consistentes con su URI que escapa.

Utilicé la extensión de Postman para Chrome y al examinar el valor __Next que se devuelve cuando se usa $ TOP (que es un enfoque alternativo que vale la pena considerar) noté que hay un ampers y que no se escapa correctamente en los valores __next.Usando ese enfoque que pude obtener una paginación con el resto de las llamadas de Odata de descanso.Aquí está el código relevante para usar junto con la respuesta de Vadim.

var queryString = "?%24skiptoken=Paged%3DTRUE%26p_ID%3D" + (startItemId - 1) + '&%24top=' + itemCount;

En mi experiencia, ninguna de las soluciones anteriores funciona, esto podría ser porque estaba intentando que esto usaba una lista externa.Para implementar la paginación, agregué? $ Skipken= Page= True & $ Top= 100 hasta el final del URI.El URI para la página siguiente se incluirá en JSON.D .__ Siguiente.Una vez que se alcanza la última página __next no estará presente

El parámetro $ SKIP no funciona en SharePoint 2013 para los elementos de la lista.Solo funciona para la recopilación de datos (como colecciones de listas, ECC ..). Vea mi comentario al final de este artículo: http://msdn.microsoft.com/library/d4b5c277-ed50-420C-8A9B-860342284B72.ASPX

Licenciado bajo: CC-BY-SA con atribución
scroll top