2013-12-19 2 views
0

В настоящее время у меня есть список sharepoint2010, который содержит примерно 200 000 записей.Элементы запроса CAML с шагом

Я хочу получить каждую запись, настроить ее, массировать и хранить в таблице SQL.

В настоящее время я использую метод GetListItems веб-службы Sharepoint 2010, как так ...

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-данные , возвращаемые этим методом, включают атрибут ListItemCollectionPositionNext внутри элемента rs: Data, который содержит информацию для поддержки поискового вызова . Эта строка содержит данные для полей в сортировке и для других элементов, необходимых для подкачки. Вы должны считать эту строку внутренней и не подлежащей изменению; его модификация может привести к неожиданным результатам . В следующем примере показана форма этого возвращаемого значения при поддержке пейджинга.

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

Так все, что вам нужно сделать, это захватить данные в этом атрибуте от результата каждой страницы набора и добавить его в запрос, чтобы получить следующую страницу.

Смежные вопросы