SharePoint Client ObjectModelで返された誤った結果
-
16-10-2019 - |
質問
小さなアプリケーションには、SharePointクライアントオブジェクトモデルを使用しています。 「共有ドキュメント」からすべてのフォルダーとアイテムを取得しようとすると、すべてのフォルダーとファイルを返すわけではありません。
コード:
private void SearchFolder(ClientContext context, SP.Folder folder, SP.List list, int niveau)
{
SP.FolderCollection collection = folder.Folders;
context.Load(collection);
context.ExecuteQuery();
//Search subfolders
foreach (SP.Folder tempFolder in collection)
{
string tempFolderNaam = tempFolder.Name;
SearchFolder(context, tempFolder, list, ++niveau);
}
//Search this folder
SearchFiles(context, folder, list, niveau);
}
私は次の方法でこの方法を呼び出します:
searchFolder(context、list.Rootfolder、list、0)
そのため、ルートフォルダーから始まり、すべての(サブ)ファイルと(サブ)フォルダーを取得する必要があります
ルートフォルダーに10個のフォルダーと、最初のサブフォルダー1個があります。それは5しか返されません(4は大丈夫、1つは「フォーム」フォルダーです)
私が足りない/間違ったものはありますか?それともこれはバグですか?
前もって感謝します!
解決
クライアントOMの知識ではなく、コードを見ることに基づいて、同じクライアントコンテキストオブジェクトでSearchFolderを再帰的に呼び出していることに気付きます。コレクションオブジェクトを繰り返している間、別のコレクションをロードして呼び出して実行します。これにより、コールスタックのより高いレベルで定義されたコレクションが再ロードされます。問題を引き起こしていないことを確認するために、既存のオブジェクトをコール階層に渡すのではなく、メソッドに新しいコンテキストオブジェクトを作成する価値があります。
すべてのドキュメントを処理する別の方法は、説明されているようにCAMLを使用しています MSDN scope = 'recursive'属性を使用します。
所属していません sharepoint.stackexchange