问题 使用$ skip与SharePoint 2013 REST API


原谅我,我对使用REST非常新。

目前我正在使用SP2013 Odata (_api/web/lists/getbytitle('<list_name>')/items?) 获取列表的内容。该列表中有199个项目,所以我需要调用它两次,每次都要求一组不同的项目。我想我可以通过调用来做到这一点:

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

每次改变,但我需要跳过很多。问题是这只会返回前100个项目。有什么我做错了或是 $skip 在OData服务中打破了吗?

有没有更好的方法来迭代REST调用,假设这种方式不起作用或不实用?

我正在使用JSon协议 Accept 标题等于 application/json;odata=verbose

我想是的 $top=100 没有必要

编辑:我已经查了更多,我不完全确定这里的条款,但使用 $skip 如果您使用SharePoint 2010引入的方法,则可以正常工作,即 _vti_bin/ListData.svc/<list_name>?$skip=100

实际上,有趣的是,旧的方式没有设置100项回报限制。因此,甚至不需要跳过。但是,如果您只想返回某一段数据,则必须执行以下操作:

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

每次通过循环,你会有类似的东西 x+=y

您可以使用我上面描述的旧方法,或者查看下面的答案,了解如何使用SP2013 OData执行此操作


9801
2017-09-23 17:04


起源



答案:


好吧,我已经弄清楚了。 $skip 不是一个意图用于的命令 items? 水平。它只适用于 lists? 水平。但是,有一种方法可以做到这一点,实际上比我想做的容易得多。

如果您只想要所有数据

在返回的数据中,假设您正在调用的列表包含超过100个项目,则会有一个 __next 在 d/__next (假设你使用的是json)。这个 __next (这是一个双重的不足,记住这一点。我起初有一些问题,因为我试图得到 d/_next 它从未返回任何内容)是获取下一组项目的正确URL。 __next 如果有另一组可用的项目,它将只是一个值。

我最终创造了一个 RequestURL 最初设置为原始请求的变量,但更改为 d/__next 在循环结束时。然后循环去检查是否 RequestURL 在进入循环之前不是空的。

原谅我缺少代码,我正在使用SharePoint Designer 2013来实现这一点,并且语法不是非常具有描述性。

如果你只喜欢一小组数据

可能有一些你只想要的情况 x 每次进行循环时列表中的行数量也很容易实现。

如果你只是添加一个 $top=x 你的请求的参数, __next 随响应返回的URL将为您提供下一个 x 列表中的行。最终没有剩下的行返回 __next 不会随着回复而退回。


11
2017-09-23 19:12



如果我想做以前的功能,我怎么能实现呢?有什么建议吗? - Rahul Gokani
由于$ skiptoken是基于ID的,因此我在执行服务器端过滤和分页时也要小心。 - Kode


答案:


好吧,我已经弄清楚了。 $skip 不是一个意图用于的命令 items? 水平。它只适用于 lists? 水平。但是,有一种方法可以做到这一点,实际上比我想做的容易得多。

如果您只想要所有数据

在返回的数据中,假设您正在调用的列表包含超过100个项目,则会有一个 __next 在 d/__next (假设你使用的是json)。这个 __next (这是一个双重的不足,记住这一点。我起初有一些问题,因为我试图得到 d/_next 它从未返回任何内容)是获取下一组项目的正确URL。 __next 如果有另一组可用的项目,它将只是一个值。

我最终创造了一个 RequestURL 最初设置为原始请求的变量,但更改为 d/__next 在循环结束时。然后循环去检查是否 RequestURL 在进入循环之前不是空的。

原谅我缺少代码,我正在使用SharePoint Designer 2013来实现这一点,并且语法不是非常具有描述性。

如果你只喜欢一小组数据

可能有一些你只想要的情况 x 每次进行循环时列表中的行数量也很容易实现。

如果你只是添加一个 $top=x 你的请求的参数, __next 随响应返回的URL将为您提供下一个 x 列表中的行。最终没有剩下的行返回 __next 不会随着回复而退回。


11
2017-09-23 19:12



如果我想做以前的功能,我怎么能实现呢?有什么建议吗? - Rahul Gokani
由于$ skiptoken是基于ID的,因此我在执行服务器端过滤和分页时也要小心。 - Kode


不要忘记,为了使用__next你需要有一个

$skiptoken=Paged=TRUE 

在网址中也是如此。


-2
2018-03-05 23:31