Pytanie Za pomocą $ skip z interfejsem API REST programu SharePoint 2013


Wybacz mi, jestem bardzo nowy w używaniu REST.

Obecnie używam SP2013 Odata (_api/web/lists/getbytitle('<list_name>')/items?) aby uzyskać zawartość listy. Lista zawiera 199 elementów, więc muszę wywołać ją dwukrotnie i za każdym razem poprosić o inny zestaw przedmiotów. Pomyślałem, że mogę to zrobić, dzwoniąc:

_api/web/lists/getbytitle('<list_name>')/items?$skip=100&$top=100

za każdym razem zmieniając jakkolwiek wiele muszę pominąć. Problem polega tylko na tym, że zwraca tylko pierwsze 100 przedmiotów. Czy jest coś, co robię źle lub jest $skip zepsuty w usłudze OData?

Czy istnieje lepszy sposób na iterowanie wywołań REST, zakładając, że ten sposób nie działa lub jest niepraktyczny?

Używam protokołu JSon z Accept Nagłówek równy application/json;odata=verbose

Przypuszczam, że $top=100 naprawdę nie jest konieczne

Edycja: sprawdziłem to jeszcze bardziej i nie jestem do końca pewien na temat warunków tutaj, ale za pomocą $skip działa dobrze, jeśli używasz metody wprowadzonej w programie SharePoint 2010, tzn. _vti_bin/ListData.svc/<list_name>?$skip=100

Właściwie zabawne, stary sposób nie ustawia limitu 100 przedmiotów na zwroty. Więc pominięcie nie jest nawet konieczne. Jeśli jednak chcesz zwrócić tylko określony segment danych, musisz wykonać następujące czynności:

_vti_bin/ListData.svc/<list_name>?$skip=x&$top=(x+y)

gdzie za każdym razem przez pętlę miałbyś coś takiego x+=y

Możesz użyć starej metody, którą opisałem powyżej, lub sprawdzić moją odpowiedź poniżej, aby uzyskać wyjaśnienie, jak to zrobić, używając dodatku SP2013.


11
2017-09-23 17:04


pochodzenie




Odpowiedzi:


W porządku, wymyśliłem to. $skip nie jest poleceniem, które ma być używane w items? poziom. Działa tylko na lists? poziom. Ale jest sposób, aby to zrobić, w rzeczywistości znacznie łatwiej niż to, co chciałem zrobić.

Jeśli chcesz tylko wszystkie dane

W zwróconych danych, zakładając, że lista, do której dzwonisz, zawiera więcej niż 100 pozycji, pojawi się __next w d/__next (zakładając, że używasz json). To __next (Jest to podwójny underscorce, miej to na uwadze, na początku miałem kilka problemów, ponieważ próbowałem dostać d/_next który nigdy nie zwrócił niczego) jest właściwym adresem URL, aby uzyskać następny zestaw elementów. __next będzie zawsze wartością, jeśli dostępny jest inny zestaw przedmiotów do zdobycia.

W końcu stworzyłem RequestURL zmienna, która początkowo była ustawiona na oryginalne żądanie, ale zmieniono ją na d/__next na końcu pętli. Potem pętla poszła i sprawdziła, czy RequestURL nie był pusty przed wejściem do pętli.

Wybacz mój brak kodu, używam SharePoint Designer 2013, aby to zrobić, a składnia nie jest strasznie opisowa.

Jeśli chcesz tylko mały zestaw danych

Prawdopodobnie istnieje kilka sytuacji, w których chcesz tylko x ilość wierszy z listy za każdym razem, gdy przechodzisz przez pętlę i to naprawdę jest łatwe.

jeśli po prostu dodasz $top=x parametr do twojego żądania, __next Adres URL, który wraca z odpowiedzią, da ci następną x wiersze z twojej listy. Ostatecznie, gdy nie ma już wierszy do zwrócenia __next nie zostanie zwrócony z odpowiedzią.


11
2017-09-23 19:12



Jeśli chcę zrobić poprzednią funkcjonalność, jak mogę to osiągnąć? Jakieś sugestie? - Rahul Gokani
Ponieważ $ skiptoken jest oparty na identyfikatorze, zalecam ostrożność podczas przeprowadzania filtrowania po stronie serwera i stronicowania. - Kode


Nie zapominaj, że aby użyć __next, musisz mieć

$skiptoken=Paged=TRUE 

również w adresie URL.


-2
2018-03-05 23:31