2013-09-23 84 views
10

請原諒我,我對使用REST很陌生。

目前我使用SP2013的OData (_api/web/lists/getbytitle('<list_name>')/items?)得到一個列表的內容。該列表中有199個項目,所以我需要調用它兩次,每次都要求一組不同的項目。我想我可以通過調用做到這一點:每次

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

改變然而,許多我需要跳過。問題是這隻能返回前100個項目。有沒有什麼我做錯了或在OData服務中破壞了$skip

是否有更好的方式,通過REST調用迭代,假定這種方式不工作或不實用?

我使用JSON協議與Accept頭等於application/json;odata=verbose

我猜想$top=100是不是真的有必要

編輯:我更看它和我這裏沒有完全確定這些條款,但如果您使用SharePoint 2010中引入的方法,則使用$skip可以正常工作,即,_vti_bin/ListData.svc/<list_name>?$skip=100

其實,有趣的是,舊的方式並沒有設置回報100個項目的限制。所以跳過甚至是不必要的。但是,如果你想只返回數據的某一部分,你必須做一些事情,如:

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

,其中通過每一次循環中,你會碰到這樣的x+=y

你可以使用我上面描述的舊方法,或者查看我的答案,下面是關於如何使用SP2013 OData的解釋如何使用SP2013 OData

回答

10

好吧,我已經想通了。 $skip不是一個旨在用於items?級別的命令。它僅適用於lists?級別。但是,有一種方法可以做到這一點,實際上比我想要做的要容易得多。

如果你只是希望所有的數據

在返回的數據,假設您呼叫的列表擁有超過100個項目,將有一個__nextd/__next(假設你使用JSON)。這__next(這是一個雙重的缺點,記住這一點,起初我有一些問題,因爲我試圖得到d/_next,它從來沒有返回任何東西)是獲取下一組項目的正確URL。如果有另外一組物品可以獲得,__next只會是一個值。

我最終創建了一個RequestURL變量,該變量初始設置爲原始請求,但在循環結束時更改爲d/__next。然後循環進行並檢查在進入循環之前RequestURL是否爲空。

原諒我缺乏的代碼中,我使用SharePoint Designer 2013,使這一點,語法不可怕的描述。

如果你只喜歡小數據集

有可能每次經過循環,這就是真正的輕鬆時間少數情況下,你只會想從你的列表x量行也一樣。

如果您只是將$top=x參數添加到您的請求中,則返回響應的__next網址將爲您提供列表中的下一行x行。最終當沒有剩餘的行返回__next將不會返回響應。

+1

如果我想做以前的功能,我怎麼能做到這一點?任何建議? –

+1

由於$ skiptoken是基於ID的,所以在執行服務器端過濾和分頁時,我也要小心。 – Kode

-2

不要忘記,爲了使用__next你需要有一個

$skiptoken=Paged=TRUE 
在URL

爲好。

相關問題