Pregunta

Tengo un sitio de raíz con sitios en diferentes niveles (se desconoce la profundidad).¿Cómo puedo encontrar todos los objetos SPWEB que iteran hasta el nivel más profundo?

¿El código de abajo me dará el resultado deseado

SPWebApplication mySPWebApp = SPWebApplication.Lookup(new Uri("http://test-site"));
{
    foreach (SPSite siteCollection in mySPWebApp.Sites)
    {
        foreach (SPWeb oweb in siteCollection.AllWebs)
        {
            //My Code
        }
    }
}

¿Fue útil?

Solución

Sí, con spwebapplication.sites Obtiene todas las colecciones de sitios en una aplicación web y con >>SPSITE.Allwebs Obtiene todos los sitios en una colección de sitios sin importar el nivel.

La mejor práctica es disponer explícitamente los sitios web individuales que se recuperan de la colección que se devuelve a través de la propiedad Allwebs.

foreach (SPWeb oweb in siteCollection.AllWebs)
{
     try
     {
           //Your code
     }
     finally
     {
          oweb.Dispose();
     }
}

También debe desechar las colecciones del sitio.

Otros consejos

Para construir en la respuesta de @ Naim, debe disponer las colecciones de sitios y las redes y usar. Intentar / capturar alrededor del deseche o use las declaraciones.

Colección del sitio Dispone del ejemplo

de Mejores prácticas: Uso de Windows Window PointObjetos de servicios

void SPSiteCollectionForEachNoLeak()
{
    using (SPSite siteCollectionOuter = new SPSite("http://moss"))
    {
        SPWebApplication webApp = siteCollectionOuter.WebApplication;
        SPSiteCollection siteCollections = webApp.Sites;

        foreach (SPSite siteCollectionInner in siteCollections)
        {
            try
            {
                // ...
            }
            finally
            {
                if(siteCollectionInner != null)
                    siteCollectionInner.Dispose();
            }
        }
    } // SPSite object siteCollectionOuter.Dispose() automatically called.
}

Disposición web Ejemplo

de Mejores prácticas: Uso de Windows Window PointObjetos de servicios

void SPWebCollectionAddNoLeak(string strWebUrl)
{
    using (SPSite siteCollection = new SPSite("http://moss"))
    {
        using (SPWeb outerWeb = siteCollection.OpenWeb())
        {
            SPWebCollection webCollection = siteCollection.AllWebs; // No AllWebs leak just getting reference.
            using (SPWeb innerWeb = webCollection.Add(strWebUrl))
            {
                //...
            }
        } // SPWeb object outerWeb.Dispose() automatically called.
    }  // SPSite object siteCollection.Dispose() automatically called. 
}

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