2014-09-26 14 views
8

Il titolo indica esattamente il mio problema. Se provo a raccogliere tutti gli oltre 400 elementi da un elenco utilizzando l'API REST di sharepoint, ottengo solo i primi 100.API REST di Sharepoint 2013 che non restituisce tutti gli articoli per un elenco

Ho letto http://msdn.microsoft.com/en-us/library/office/dn292552(v=office.15).aspx e nella parte "Lavorare con voci di elenco utilizzando REST", affermano che

L'esempio seguente mostra come recuperare tutti di elementi di una lista.

url: http://site url/_api/web/lists/GetByTitle(‘Test')/items

method: GET

headers: ...

ho evidenziato parola tutto, perché non è quello che sto ricevendo ...

mi sto perdendo qualcosa? C'è qualche opzione che dovrei disabilitare/abilitare per ottenere veramente tutti gli elementi?

Grazie

+0

Potresti mostrare il tuo codice? Stai recuperando oggetti dalla lista o da una vista specifica? – Christophe

+0

Nessun codice è necessario per vedere che sto ricevendo solo i primi 100 articoli.Ottengo solo questa quantità di elementi semplicemente visitando l'URL nel mio browser (quindi sostituendo semplicemente l'url del sito e Test nel 'http: // sito url/_api/web/lists/GetByTitle ('Test')/items' con i miei valori e ottengo XML con questi 100 articoli) – leopik

+0

non è necessario il codice per vedere il risultato, ma il codice potrebbe essere necessario per capire perché ;-) – Christophe

risposta

20

Il limite è dovuto al paging lato server.

Una soluzione è quella di recuperare i 100 oggetti in un momento, o trascendere il limite inserendo un conteggio di oggetti:

https://$DOMAIN/$SITE/_api/web/Lists/getByTitle('$LIST')/Items?$top=1000

Nota che c'è anche una soglia al 5000.

+0

Per ora non ho più record di 500, quindi questo dovrebbe essere fatto. Grazie per il tuo aiuto ^^! – leopik

+0

... tuttavia, solo per curiosità, come posso recuperare 100 articoli in lotti (in modo da poter controllare il numero di lotto che desidero ottenere successivamente)? – leopik

+1

non è facile ... Forse iniziare qui http://msdn.microsoft.com/en-us/library/office/fp142385(v=office.15).aspx#sectionSection6 quindi sfogliare blog e forum per scoprire cosa effettivamente funziona – Christophe

1

È possibile utilizzare RowLimit & RowsPerPage in rest call. Di seguito è riportato l'esempio

$.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) { 
    $.each(data.d.results, function(index, item){ 
$('#oDataFilter').append("<tr>" + "<td class="+styleClass+">" + item.ID + "</td>" + "<td class="+styleClass+">"+ item.Title + "</td>" + "</tr>"); 
}); 
}, 
    error: function (error) { 
alert('Error getListItems :: '+JSON.stringify(error)); 
} 
1

Aggiungendo a Christophe's risposta direi che elenca tutti (potenzialmente 5000) elementi in un elenco e analisi li si tradurrebbe in problemi di prestazioni.

Se si esegue una query su sharepoint per mostrare tutti gli elementi in un determinato elenco, verranno stampati solo i primi 100. Tuttavia, la risposta xml fornisce anche l'url per la query per i successivi 100 elementi di elenco.

Alla fine della risposta XML si vedrà un tag come questo

<link rel="next" href="https://xxxxx.sharepoint.com/_api/web/lists/GetByTitle('list')/items?%24skiptoken=Paged%3dTRUE%26p_ID%3d100" /> 

L'url all'interno href="...." è quello che vi serve.

La ricerca di quanto sopra potrebbe fornire un elenco dei prossimi 100 elementi o meno. Se ci sono ancora più elementi lasciati questa risposta xml fornirebbe a sua volta un altro tag <link rel="next"> e se non questo tag non esiste.

Meglio gestire 5000 elementi in gruppi di 100 anziché tutti insieme a mio parere.

Problemi correlati