2

クエリしたいリストに約10000行以上の行(Listitems)があります。

timerJob の各項目を反復処理したいのですが、オブジェクト モデルのオーバーライド - いいえ、ListView のしきい値 - 1000 - FARM レベルで、一度にすべてを取得することはできません。これを変更することはできません。

10000以上を(バッチのように)すべて繰り返す方法は何ですか??

4

1 に答える 1

5

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);

次に、あなたはあなたを定義しProcessListItemProcessListItemErrorこうして:

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での効率的なコードの記述」を確認することをお勧めします。この記事では、クエリの適切な記述について詳しく説明しています。

于 2011-04-28T19:33:46.000 に答える