SharePoint 2010 REST顶部,跳过在大型列表上失败

时间:2013-12-13 02:11:48

标签: sharepoint sharepoint-2010

我在SharePoint 2010网站中创建了两个列表。一个有10个项目,其他有10000个项目。

在小名单上我可以说

http://mysharepoint.com/sites/testsite/_vti_bin/listdata.svc/SmallList $顶部= 1&安培; $跳过= 1

没问题,它完美无缺。

当我说

时 ?

http://mysharepoint.com/sites/testsite/_vti_bin/listdata.svc/LargeList $顶部= 1&安培; $跳过= 1

它会抛出错误“处理此请求时出错”

互联网充满了混乱,因为大多数博客/文章等都在谈论“SP2013”​​,我猜在你从SP获得的XML体中有一个__next。

但是我使用的是SP2010,这是一个PURE客户端解决方案,根本没有服务器端对象模型。

任何人都可以告诉我如何在SP2010上“专门”对大型列表进行分页。

请发布一些带有休息命令的工作网址....您已经针对大型列表进行了测试(如果您需要我提供代码,请为您创建大量10K项目列表,请告诉我。)

2 个答案:

答案 0 :(得分:0)

您可以使用JavaScript和WebServices来完成。使用我创建的JavaScript API库,名为SharepointPlus,您必须这样做(使用版本3.0.7):

$SP().list("Name of your list").get({fields:"ID,Title",rowlimit:5000,paging:true},function(data) {
  console.log(data.length)
})

您将把所有项目都放入'data'数组中。例如,当您在JavaScript循环中到达X元素时,您可以通过数组并停止。就像那样,由于列表的大小,你不应该有错误信息。

答案 1 :(得分:0)

$ skip query选项不受支持,但$ top是。

解决方法,在ID上使用$ orderby,在ID和$ top x项上使用$ filter,然后循环。

您的查询变为 http://mysharepoint.com/sites/testsite/_vti_bin/listdata.svc/LargeList()?$ orderby = Id& $ filter = Id gt {lastId}& $ top = 100

第一次运行时

{lastId} = 0。

循环找到的项目,跟踪“上次ID”并将其传递给下一个查询。

http://mysharepoint.com/sites/testsite/_vti_bin/listdata.svc/LargeList()?$ orderby = Id& $ filter = Id gt 0& $ top = 100

http://mysharepoint.com/sites/testsite/_vti_bin/listdata.svc/LargeList()?$ orderby = Id& $ filter = Id gt 123& $ top = 100

http://mysharepoint.com/sites/testsite/_vti_bin/listdata.svc/LargeList()?$ orderby = Id& $ filter = Id gt 34​​5& $ top = 100

重复。

注1:ID是一个始终被索引的列,其他

注意2:此模式也适用于REST API(LINQ查询)