пятница, 17 августа 2012 г.

Получение большого количества данных из SharePoint или использование ContentIterator

Как правило для получения данных из списков SharePoint мы используем SPQuery. Но если количество возвращаемых элементов велико, то мы можем получить SPQueryThrottleException.

Чтобы этого избежать, необходимо использовать появившийся в SharePoint 2010 класс ContentIterator!

Кроме элементов списков, он также умеет перебирать файлы, списки, сайты, коллекции сайтов, а также элементы или файлы в указанной папке.

Использовать данный класс предельно просто!

Пример:

using (var site = new SPSite("http://x33/"))
{
    using (var web = site.OpenWeb())
    {
        var list = web.Lists["TestList"];

        var itemsTitles = new List<string>();
        
        var iterator = new ContentIterator();
        iterator.ProcessListItems(list, spListItem => itemsTitles.Add(spListItem.Title), (spListItem, exception) => true);
    }
}

 

Методу ProceeListItems нужно указать два делегата – для обработки полученного элемента списка и для обработки ошибок при обращении к данным.

Класс находится в Microsoft.Office.Server.Utilites.

При необходимости ему также можно указать SPQuery, чтобы выбирать только нужные элементы.

Методы перебора других сущностей SharePoint аналогичны.

Комментариев нет:

Отправить комментарий