2013-12-19 26 views
0

我目前有一個包含大約200,000條記錄的sharepoint2010列表。以增量爲單位的CAML查詢項目

我想獲取每條記錄,調整它,按摩它,並將它存儲在SQL表中。

截至目前,我使用SharePoint 2010的Web服務方法GetListItems是這樣的...

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

查詢200000個記錄實在是太多了,一次查詢。我怎樣才能解決這個問題? GetListItems方法採用CAML查詢參數。

有沒有辦法以增量的方式來做到這一點,例如一次說5000條記錄?如何構建CAML查詢來做到這一點?

除非有人有更好的方法完成這一切?

回答

1

是的,有,你可以分頁結果。第五個參數是頁面大小,您可以通過RowNumber進行設置。將它設置爲5000,如果你想大小的頁面上訪問後續頁面5000

詳情可向documentation for the GetListItems method

的GetListItems方法可以看出支持服務器端分頁。通過此方法返回的XML數據 包括rs:Data元素中包含的一個ListItemCollectionPositionNext 屬性,該元素包含支持分頁的信息到 。該字符串包含排序 中的字段的數據以及分頁所需的其他項目。你應該考慮這個字符串 內部和不被修改;修改它會產生意想不到的 結果。以下示例顯示支持分頁時此返回值 的格式。

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

因此,所有你需要做的就是抓住數據,從每個頁面的結果集的屬性,並將其添加到查詢來獲取下一個頁面。