#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«, в котором далее обсуждается правильное написание запросов.