0

Web インターフェイスを使用してドキュメントを SharePoint ライブラリにアップロードするシステムがあります。クライアント API を使用してこれを実現しています。具体的には、SaveBinaryDirect を使用してドキュメントをアップロードした後、CAML クエリを使用してドキュメントを取得し、メタデータ列を設定できるようにします。CAML クエリは、アップロードされたドキュメントのファイル名が取り込まれた FileLeafRef フィールドに基づいてドキュメントを取得します。

問題は、SharePoint が任意のクエリから返されるアイテムの最大数を 5000 に制限しているため、ドキュメント ライブラリが 5000 アイテムに達すると、CAML クエリが機能しなくなることです。(単一のドキュメントしか返されませんが、明らかにライブラリ全体のスキャンが必要です)

私はすでに列の索引付けを調査しましたが、明らかに FileLeafRef の索引付けはできず、アップロード直後にドキュメント名が入力される唯一のフィールドのようです。アイテムの制限を 5000 から 10000 に増やして問題を先延ばしにしましたが、この新しい制限に近づきつつあり、断続的なパフォーマンスの問題が報告され始めています。

クライアント API を介してドキュメントをアップロードし、アイテムの最大制限に達することなくメタデータを設定する方法はありますか?

4

2 に答える 2

0

FileLeafRef の単純なコピーとなる別のフィールド (テキスト フィールド) を作成し、この新しいフィールドにインデックスを付けることができますか?

于 2013-04-13T13:59:42.990 に答える
0

ファイルの検索に CAML を使用しないことで問題を解決しました。代わりに、項目制限の影響を受けない GetFileByServerRelativeUrl を使用しています。ファイル オブジェクトには ListItemAllFields というメソッドがあり、メタデータのクエリと設定を行うことができます。

ファイル名以外の条件でアイテムを返す必要がある場合、上記のメソッドを使用すると、メタデータを最初に設定できるため、クエリを満たすために必要な条件を格納してインデックスを作成できます。

インデックス化されていない、またはインデックス化できない基準に基づいて大きなリストをクエリする必要がある場合、ソリューションには ContentIterator オブジェクトを使用して小さなバッチでリストを吐き出すことが含まれているようです。しかし、これはクライアント API では利用できないようです。そのため、プログラムで大きなリストをどのように操作すればよいかわかりません。

于 2013-04-17T14:48:42.323 に答える