как использовать итератор контента в sharepoit 2010 - PullRequest
2 голосов
/ 07 января 2012

в моем списке 7000 наименований. мне нужно отфильтровать список и получить результат я использую следующий код в моей веб-части.

string query = "<Where><BeginsWith><FieldRef Name='Project' /><Value Type='Text'>ab</Value></BeginsWith></Where>"
SPQuery spquery = new SPQuery();
spquery.Query = query;
ContentIterator iterator = new ContentIterator();
iterator.ProcessListItems(list, spquery, ProcessListItem, ProcessListItemError)

, так как я использую ContentIterator, он по-прежнему выдает ошибку «Попытка операции запрещена, поскольку она превышает пороговое значение представления списка, установленное администратором»

Обновление:

string query2 = @"<Where><Eq><FieldRef Name='Project' /><Value Type='Text'>11759</Value></Eq></Where>"; 
SPQuery spquery = new SPQuery(); 
spquery.RowLimit = 10; 
spquery.Query = query2; 
spquery.QueryThrottleMode = SPQueryThrottleOption.Override; 
ContentIterator iterator = new ContentIterator(); 
iterator.ProcessListItems(list, spquery, ProcessListItem, ProcessListItemError); 

В любой погоде я использовал SPCollectionItem или Итератор. когда я прохожу условие where в spquery. приходит та же ошибка.

Ответы [ 5 ]

2 голосов
/ 18 июля 2012

Чтобы эффективно использовать ContentIterator и избежать исключения газа, вы должны явно включить предложения OrderBy.

Попробуйте использовать ContentIterator.ItemEnumerationOrderByNVPField, который фактически позволяет использовать индекс.

Для получения дополнительной информации,проверить это

http://extreme -sharepoint.com / 2012/07/17 / data-access-via-caml-questions /

1 голос
/ 24 июня 2012

Вероятно, потому что поле, с которым вы сравниваете, не проиндексировано: http://msdn.microsoft.com/en-us/library/ff798465

Если бы вы построили запрос, который возвращает первые 100 элементов, отсортированных по полю идентификатора, запросвыполняется без проблем, потому что столбец ID всегда индексируется.Однако если бы вы создали запрос, возвращающий первые 100 элементов, отсортированных по неиндексированному полю «Заголовок», запрос должен был бы отсканировать все 10000 строк в базе данных контента, чтобы определить порядок сортировки по заголовку, прежде чем возвращать первый100 предметов.Из-за этого запрос будет ограничен, и это правильно - это ресурсоемкая операция.

0 голосов
/ 09 января 2012

Вы видели это:

msdn link

hmmz, только что попробовал это, и это все еще дало ошибку.Однако, если я использую это, я могу перебрать более 7k списочных элементов:

private int GetItems(SPList list){
    var query = new SPQuery();
    query.Query = "";
    query.QueryThrottleMode = SPQueryThrottleOption.Override;
    var items = list.GetItems(query);
    return items.Count;

}

, поэтому мой совет - просто использовать list.getitems

0 голосов
/ 23 января 2012

Вам просто нужно изменить свой запрос.

    //Keep your query inside <View></View> tag.
    string query = "<View><Where><BeginsWith><FieldRef Name='Project' /><Value Type='Text'>ab</Value></BeginsWith></Where><View>" 
    SPQuery spquery = new SPQuery(); 
    spquery.Query = query; 
    ContentIterator iterator = new ContentIterator(); 
    iterator.ProcessListItems(list, spquery, ProcessListItem, ProcessListItemError) 

Теперь запустите программу, и она будет работать.

0 голосов
/ 07 января 2012

Вы должны либо ...

  • ... установить RowLimit ниже настроенного порога в вашем запросе.
  • ... или определить запрос, который возвращаетменьше элементов.
  • ... или изменить порог списка.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...