SPQuery и RowLimit

#sharepoint #sharepoint-2010 #object-model #splistitem #spquery

#sharepoint #sharepoint-2010 #объектная модель #разделяемый #spquery

Вопрос:

У меня более 10000 строк (Listitems) в списке, который я хочу запросить.

Я хочу повторить каждый элемент в задании времени — но я не могу использовать их все одновременно, поскольку: Переопределение объектной модели — НЕТ, пороговое значение ListView — 1000 — на уровне ФЕРМЫ, и я, мы не можем это изменить.

Каков способ для меня повторить все 10000 (например, пакет)??

Ответ №1:

Вы должны использовать ContentIterator. Это позволит вам перебирать содержимое очень больших списков, не вызывая SPQueryThrottledException .

Например:

 SPList list = SPContext.Current.Web.Lists["MyList"];

// Build query using an iterator-defined WHERE clause
string query = string.Format("<Where><Eq><FieldRef Name='MyFieldName'/><Value Type='Text'>MyFieldValue</Value></Eq></Where>{0}", ContentIterator.ItemEnumerationOrderByNVPField);

// Instantiate iterator and use it to process the list
ContentIterator iterator = new ContentIterator();
iterator.ProcessListItems(list, query, ProcessListItem, ProcessListItemError);
  

Затем вы бы определили свой ProcessListItem и ProcessListItemError таким образом:

 static void ProcessListItem(SPListItem item) {
    Console.WriteLine("ProcessListItem: Name {0}", item.Title);
}

static bool ProcessListItemError(SPListItem item, Exception e) {
    Console.WriteLine("ERROR: message {0}", e.Message);
    return true;
}
  

Я бы также рекомендовал вам ознакомиться со передовыми практиками Microsoft в статьях о SharePoint Server, в частности «Написание эффективного кода в SharePoint Server«, в котором далее обсуждается правильное написание запросов.