none
CAML Query. Buscar archivos dentro de carpetas de una biblioteca de documentos RRS feed

  • Pregunta

  • Hola

    Necesito buscar un documento que se encuentra dentro de una carpeta en una biblioteca de documentos 

    Si utilizo esta query puedo buscar dentro de una biblioteca:

    <Query><Where><Eq><FieldRef Name="FileLeafRef" /><Value Type="File">imgPrueba.jpg</Value></Eq></Where></Query>

    pero que consulta debería utilizar si el documento que quiero buscar esta dentro de una carpeta? Necesito ubicar este documento y cambiarle el nombre.

    Por otro lado cuando el documento no esta dentro de una carpeta la consulta funciona en U2U CAML Query Builder, me trae un registro, pero no trae nada si utilizo la consulta en C# a través del siguiente código:

    SPSecurity.RunWithElevatedPrivileges(delegate()
                                        {
                                            using (SPSite subSite = new SPSite(SPContext.Current.Site.ID))
                                            {
                                                using (SPWeb subWeb = site.OpenWeb(SPContext.Current.Web.ID))
                                                {
                                                    SPList list = subWeb.Lists["ImagenesActa"];
                                                    subWeb.AllowUnsafeUpdates = true;
    
                                                    SPQuery subquery = new SPQuery();
    
                                                    string strQuery = "<Where><Eq><FieldRef Name='FileLeafRef' /><Value Type='File'>" + hfNombreImagen.Value + "</Value></Eq></Where>";
                                                    query.Query = strQuery;
    
                                                    SPListItemCollection subSPlistItems = list.GetItems(query);
                                                    SPListItem subitem;
    
                                                    if (subSPlistItems.Count > 0) subitem = subSPlistItems[0];
                                                    
                                                    subitem["FileLeafRef"] = "ImagenActa_" + txtNumeroActaCargar.Text + ".jpg";
                                                    subitem.Update();
                                                }
                                            }
                                        });

    Este código funciona correctamente si busco un registro en una lista, pero quizás sea diferente para una biblioteca de documentos y por eso no me devuelve nada. 

    Espero me puedan ayudar. Desde ya muchas gracias, Saludos

    viernes, 1 de febrero de 2013 0:55

Respuestas

Todas las respuestas

  • Hola,

    En este thread tienes varios ejemplos para trabajar con carpetas mediante CAML: http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/35e799a1-9360-46e5-8719-dd35fdace7ea

    Saludos


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------

    viernes, 1 de febrero de 2013 7:12
  • Buen dia:

    El siguiente ejemplo podria servirte de orientacion:

    SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite subSite = new SPSite(SPContext.Current.Site.ID)) { using (SPWeb subWeb = site.OpenWeb(SPContext.Current.Web.ID)) { SPList list = subWeb.Lists["ImagenesActa"]; subWeb.AllowUnsafeUpdates = true; SPQuery subquery = new SPQuery(); string strQuery = "<Where><Eq><FieldRef Name='FileLeafRef' /><Value Type='File'>" + hfNombreImagen.Value + "</Value></Eq></Where>";

    						Query .FolderServerRelativeUrl = "/lists/cleantasks/folder";

    query.Query = strQuery;

    				           	SPListItemCollection subSPlistItems = list.GetItems(query);

    SPListItem subitem; if (subSPlistItems.Count > 0) subitem = subSPlistItems[0]; subitem["FileLeafRef"] = "ImagenActa_" + txtNumeroActaCargar.Text + ".jpg"; subitem.Update(); } } });

                
                
    lunes, 11 de febrero de 2013 3:23