我目前有一个sharepoint2010列表,其中包含大约200,000条记录。
我想获取每条记录,调整它,按摩它,并将其存储在SQL表中。
截至目前,我正在使用sharepoint 2010网络服务方法GetListItems
,如此......
System.Xml.XmlNode nodeListItems = client.GetListItems("guid", "", query, viewFields, RowNumber, queryOptions, null);
查询200000条记录太多,无法立即查询。我怎么能绕过这个? GetListItems
方法采用CAML查询参数。
有没有办法以增量方式执行此操作,例如一次说5000条记录?如何构建CAML查询来做到这一点?
除非有人有更好的方法来完成这项工作?
答案 0 :(得分:1)
是的,有,您可以对结果进行分页。第五个参数是页面大小,您可以通过RowNumber
设置它。如果您想要大小为5000的页面,请将其设置为5000。
有关访问后续页面的详细信息,请参阅documentation for the GetListItems method
GetListItems方法支持服务器端分页。 XML数据 此方法返回的包括ListItemCollectionPositionNext rs中的属性:包含信息的数据元素 支持分页。此字符串包含排序中字段的数据 以及寻呼所需的其他项目。你应该考虑这个字符串 内部而不是修改;修改它会产生意外 结果。以下示例显示了此返回值的形式 何时支持分页。
<rs:Data ListItemCollectionPositionNext=" Paged=TRUE&p_ID=100&View= %7bC68F4A6A%2d9AFD%2d406C%2dB624%2d2CF8D729901E%7d&PageFirstRow= 101" Count=1000 > <z:row ows_FirstName="Nancy" ows_LastName="Name" ….. /> ... </rs:Data>
要获取下一页数据,请使用queryOption参数 如下例所示。
<QueryOptions> <Paging ListItemCollectionPositionNext=" Paged=TRUE&p_ID=100&View= %7bC68F4A6A%2d9AFD%2d406C%2dB624%2d2CF8D729901E%7d&PageFirstRow= 101" /> </QueryOptions>
所以你需要做的就是从每个页面的结果集中获取该属性中的数据,并将其添加到查询中以获取下一页。