質問

小さなアプリケーションには、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'属性を使用します。

ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top