Resultados incorrectos devueltos con SharePoint Client ObjectModel
-
16-10-2019 - |
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!
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'.