2013-09-23 59 views
10

Tha thứ cho tôi, tôi rất mới sử dụng REST.

Hiện tôi đang sử dụng SP2013 Odata (_api/web/lists/getbytitle('<list_name>')/items?) để nhận nội dung của danh sách. Danh sách có 199 mục trong đó vì vậy tôi cần phải gọi nó hai lần và mỗi lần yêu cầu một tập hợp các mục khác nhau. Tôi cho rằng tôi có thể thực hiện điều này bằng cách gọi:

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

mỗi lần thay đổi nhiều lần tôi cần bỏ qua. Vấn đề là điều này chỉ bao giờ trả về 100 vật phẩm đầu tiên. Có điều gì tôi đang làm sai hay là $skip bị hỏng trong dịch vụ OData?

Có cách nào tốt hơn để lặp qua các cuộc gọi REST, giả sử cách này không hoạt động hay không thực tế?

Tôi đang sử dụng giao thức JSON với Accept header bằng application/json;odata=verbose

Tôi cho rằng $top=100 là không thực sự cần thiết

Edit: Tôi đã nhìn nó ngày càng, tôi 'không hoàn toàn chắc chắn về các điều khoản ở đây, nhưng việc sử dụng $skip hoạt động tốt nếu bạn đang sử dụng phương pháp được giới thiệu với SharePoint 2010, tức là, _vti_bin/ListData.svc/<list_name>?$skip=100

Trên thực tế, đủ hài hước, cách cũ không đặt giới hạn 100 mục trên lợi nhuận. Vì vậy, bỏ qua thậm chí không cần thiết. Tuy nhiên, nếu bạn muốn chỉ trả lại một đoạn dữ liệu nhất định, bạn sẽ phải làm một cái gì đó như:

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

nơi mỗi lần thông qua các vòng lặp bạn sẽ có một cái gì đó giống như x+=y

Bạn có thể sử dụng phương pháp cũ mà tôi đã mô tả ở trên hoặc xem câu trả lời của tôi bên dưới để được giải thích cách thực hiện điều này bằng cách sử dụng SP2013 OData

Trả lời

10

Được rồi, tôi đã tìm ra. $skip không phải là lệnh được sử dụng ở cấp độ items?. Nó chỉ hoạt động ở cấp độ lists?. Nhưng, có một cách để làm điều này, thực sự dễ dàng hơn nhiều so với những gì tôi muốn làm.

Nếu bạn chỉ muốn tất cả các dữ liệu

Trong dữ liệu trả về, giả danh bạn đang gọi giữ hơn 100 mặt hàng, sẽ có một __next tại d/__next (giả sử bạn đang sử dụng json). Điều này __next (nó là một đôi underscorce, giữ cho rằng trong tâm trí.Tôi đã có một vài vấn đề lúc đầu tiên bởi vì tôi đã cố gắng để có được d/_next mà không bao giờ trở lại bất cứ điều gì) là URL quyền để có được tập hợp các mục tiếp theo. __next sẽ chỉ bao giờ là một giá trị nếu có một bộ mặt hàng khác có sẵn để nhận.

Tôi đã tạo biến số RequestURL ban đầu được đặt thành yêu cầu ban đầu nhưng đã được đổi thành d/__next ở cuối vòng lặp. Sau đó, vòng lặp đi và kiểm tra nếu RequestURL không rỗng trước khi đi vào vòng lặp.

Xin lỗi vì thiếu mã, tôi đang sử dụng SharePoint Designer 2013 để thực hiện việc này và cú pháp không mô tả khủng khiếp.

Nếu bạn muốn chỉ như một tập nhỏ dữ liệu

Có lẽ một vài tình huống mà bạn chỉ muốn x số lượng hàng ra khỏi danh sách của bạn mỗi khi bạn đi qua vòng lặp và đó là thực sự dễ dàng để cũng vậy.

nếu bạn chỉ thêm thông số $top=x vào yêu cầu của mình, URL __next quay trở lại với câu trả lời sẽ cung cấp cho bạn x hàng tiếp theo từ danh sách của bạn. Cuối cùng khi không còn hàng nào để trả lại __next sẽ không được trả lại với câu trả lời.

+1

Nếu tôi muốn thực hiện chức năng trước đó, làm thế nào tôi có thể đạt được điều đó? Bất kì lời đề nghị nào? –

+1

Vì $ skiptoken là ID, tôi cũng rất thận trọng khi thực hiện lọc và phân trang phía máy chủ. – Kode

-2

Đừng quên rằng để sử dụng __next bạn cần phải có một

$skiptoken=Paged=TRUE 

trong url là tốt.

Các vấn đề liên quan