クエリしたいリストに約10000行以上の行(Listitems)があります。
timerJob の各項目を反復処理したいのですが、オブジェクト モデルのオーバーライド - いいえ、ListView のしきい値 - 1000 - FARM レベルで、一度にすべてを取得することはできません。これを変更することはできません。
10000以上を(バッチのように)すべて繰り返す方法は何ですか??
クエリしたいリストに約10000行以上の行(Listitems)があります。
timerJob の各項目を反復処理したいのですが、オブジェクト モデルのオーバーライド - いいえ、ListView のしきい値 - 1000 - FARM レベルで、一度にすべてを取得することはできません。これを変更することはできません。
10000以上を(バッチのように)すべて繰り返す方法は何ですか??
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;
}
また、SharePoint Serverを使用したMicrosoftのベストプラクティスの記事、特に「SharePoint Serverでの効率的なコードの記述」を確認することをお勧めします。この記事では、クエリの適切な記述について詳しく説明しています。