Pregunta

Estoy usando el modelo de objeto Cliente de SharePoint para una pequeña aplicación. Cuando intento obtener todas las carpetas y elementos de la biblioteca "Documentos compartidos", no devuelve todas las carpetas y archivos.

Código:

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

Llamo a este método con:
Searchfolder (context, list.rootfolder, lista, 0)
Por lo tanto, comienza desde Rootfolder y debe obtener todos los (sub) archivos y (sub) carpetas

Tengo 10 carpetas en la reducción de raíz y 1 subcarpeta en la primera. Solo devuelve 5 (4 están bien, uno es "formularios" -folder)

¿Hay algo que me falta/me mal? ¿O es un error?

¡Gracias por adelantado!

¿Fue útil?

Solución

Simplemente basado en mirar su código, en lugar del conocimiento del cliente OM, noto que está llamando recursivamente a Searchfolder en el mismo objeto de contexto del cliente. Mientras está iterando a través de su objeto de recolección, está cargando otra colección y llamadas Ejecutar, lo que podría volver a cargar la colección definida en el nivel superior en la pila de llamadas. Puede valer la pena crear un nuevo objeto de contexto en el método en lugar de pasar el existente a través de la jerarquía de llamadas, solo para asegurarse de que eso no esté causando un problema.

Una forma alternativa de procesar todos los documentos es utilizar CAML como se describe en MSDN Usando el atributo de alcance = 'recursivo'.

Licenciado bajo: CC-BY-SA con atribución
scroll top