CAML以增量查询项目

时间:2013-12-19 19:04:48

标签: c# sharepoint asmx caml

我目前有一个sharepoint2010列表,其中包含大约200,000条记录。

我想获取每条记录,调整它,按摩它,并将其存储在SQL表中。

截至目前,我正在使用sharepoint 2010网络服务方法GetListItems,如此......

System.Xml.XmlNode nodeListItems = client.GetListItems("guid", "", query, viewFields, RowNumber, queryOptions, null);

查询200000条记录太多,无法立即查询。我怎么能绕过这个? GetListItems方法采用CAML查询参数。

有没有办法以增量方式执行此操作,例如一次说5000条记录?如何构建CAML查询来做到这一点?

除非有人有更好的方法来完成这项工作?

1 个答案:

答案 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>

所以你需要做的就是从每个页面的结果集中获取该属性中的数据,并将其添加到查询中以获取下一页。