【问题标题】:Using $skip with the SharePoint 2013 REST API将 $skip 与 SharePoint 2013 REST API 一起使用
【发布时间】:2013-09-23 17:04:12
【问题描述】:

请原谅,我对使用 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 引入的方法,即_vti_bin/ListData.svc/&lt;list_name&gt;?$skip=100

实际上,很有趣的是,旧的方式并没有对退货设置 100 件商品的限制。所以跳过甚至没有必要。但是,如果您只想返回某段数据,则必须执行以下操作:

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

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

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

【问题讨论】:

    标签: json rest sharepoint


    【解决方案1】:

    好的,我想通了。 $skip 不是要在 items? 级别使用的命令。它仅适用于lists? 级别。但是,有一种方法可以做到这一点,实际上比我想做的要容易得多。

    如果您只想要所有数据

    在返回的数据中,假设您调用的列表包含超过 100 个项目,那么在 d/__next 处会有一个 __next(假设您使用的是 json)。这个__next(它是一个双下划线,请记住这一点。起初我遇到了一些问题,因为我试图获取从未返回任何内容的d/_next)是获取下一组项目的正确URL。 __next 只有在有另一组可供获取的物品时才会成为一个值。

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

    请原谅我缺少代码,我正在使用 SharePoint Designer 2013 进行此操作,并且语法描述性并不好。

    如果您只需要一小部分数据

    在某些情况下,您可能只希望每次循环时列表中的行数为x,这也很容易做到。

    如果您只是在请求中添加$top=x 参数,则响应返回的__next URL 将为您提供列表中的下一个x 行。最终,当没有行可返回时,__next 将不会与响应一起返回。

    【讨论】:

    • 如果我想做以前的功能,我该如何实现?有什么建议吗?
    • 由于 $skiptoken 是基于 ID 的,所以我在执行服务器端过滤和分页时也要小心。
    【解决方案2】:

    不要忘记,要使用 __next,您需要有一个

    $skiptoken=Paged=TRUE 
    

    在网址中也是如此。

    【讨论】:

    • 虽然这不应该是它自己的答案,但至少在 SP2013 上这是关键信息。我很沮丧为什么在我发现这一点之前它没有返回任何 __next 属性近半小时。
    • 在 SP2016 中似乎不需要它。 __next 没有它也可用
    猜你喜欢
    • 2012-12-04
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2015-11-30
    • 1970-01-01
    相关资源
    最近更新 更多