2013-12-19 4 views
0

현재 약 200,000 개의 레코드가 들어있는 sharepoint2010 목록이 있습니다.증가하는 CAML 쿼리 항목

각 레코드를 가져 와서 조정하고 마사지 한 다음 SQL 테이블에 저장하고 싶습니다.

지금 현재로

, 나는 200000 개 기록을 조회 ...과 같이

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

를 SharePoint 2010의 웹 서비스 메서드 GetListItems을 사용하고하는 것은 한 번에 조회 할 너무 많은 것입니다. 이 문제를 어떻게 해결할 수 있습니까? GetListItems 메서드는 CAML 쿼리 매개 변수를 사용합니다.

한 번에 5000 개의 레코드를 말하는 것과 같은 방법으로이 작업을 수행 할 수 있습니까? CAML 쿼리를 어떻게 구성 할 것입니까?

누군가가이 모든 작업을 수행하는 더 좋은 방법이 없다면?

답변

1

예, 결과에 페이지 매김을 할 수 있습니다. 다섯 번째 매개 변수는 페이지 크기이며, RowNumber을 통해 설정했습니다. 당신이 다음 페이지에 액세스하는 5000

자세한 사항은 documentation for the GetListItems method

GetListItems 방법에서 볼 수있는 크기의 페이지를 원하는 경우 5000로 설정 서버 측 페이징을 지원합니다. 이 메서드에 의해 반환 된 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> 

그래서 당신이 할 필요가 설정 한 각 페이지의 결과에서 해당 속성의 데이터를 잡고 다음 페이지를 얻기 위해 쿼리에 추가됩니다.