我在SharePoint 2010网站中创建了两个列表。一个有10个项目,另一个有10000个项目。
在小名单上,我可以说
http://mysharepoint.com/sites/testsite/_vti_bin/listdata.svc/SmallList?$top=1&跳过=1
没问题,它运行得很完美。
当我说时
http://mysharepoint.com/sites/testsite/_vti_bin/listdata.svc/LargeList?$top=1&跳过=1
它抛出一个错误"处理此请求时发生错误"
互联网上充满了困惑,因为大多数博客/文章等都在谈论"SP2013",我想你从SP得到的XML正文中有一个__next。
然而,我使用的是SP2010,这是一个完全没有服务器端对象模型的PURE客户端解决方案。
有人能告诉我如何在SP2010的大列表中"特别"分页吗。
请发布一些带有rest命令的工作URL。。。。您已经针对一个大列表进行了测试(如果您需要我提供代码,为您创建一个10K项目的大列表,请告诉我)。
您可以使用JavaScript和WebServices来完成此操作。使用我创建的名为SharepointPlus的JavaScriptneneneba API库,您必须这样做(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元素时停止。就像这样,你不应该因为你的列表太大而收到错误消息。
解决方法是,在ID上混合使用$orderby、在ID上使用$filter和$top x项,然后循环。
您的查询变成http://mysharepoint.com/sites/testsite/_vti_bin/listdata.svc/LargeList()$orderby=Id&filter=Id gt{lastId}&顶部=100
{lastId}=0。
循环找到的项,跟踪"Last Id"并将其传递给下一个查询。
http://mysharepoint.com/sites/testsite/_vti_bin/listdata.svc/LargeList()$orderby=Id&filter=Id gt 0&顶部=100
http://mysharepoint.com/sites/testsite/_vti_bin/listdata.svc/LargeList()$orderby=Id&filter=Id gt 123&顶部=100
http://mysharepoint.com/sites/testsite/_vti_bin/listdata.svc/LargeList()$orderby=Id&filter=Id gt 345&顶部=100
重复。
注1:ID是一个总是被索引的列,其他
注2:此模式也适用于REST API(LINQ查询)