Question

J'ai un site racinaire avec des sites à différents niveaux (la profondeur est inconnue).Comment puis-je trouver tous les objets SPWeb itération jusqu'au niveau le plus profond.

Le code ci-dessous me donnera-t-il le résultat souhaité

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

Était-ce utile?

La solution

oui, avec SPWEBApplication.Sites Vous obtenez toutes les collections de site dans une application Web et avec SPSITE.Allwebs Vous obtenez tous les sites dans une collection de sites, quel que soit le niveau.

La meilleure pratique consiste à éliminer explicitement de sites Web individuels extraits de la collection renvoyée à travers la propriété Allwebs.

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

Vous devez également disposer des collections de site.

Autres conseils

Pour construire sur la réponse de @ Naim, vous devez disposer à la fois des collections de sites et des sites Web et d'utiliser Essayer / attraper autour du dispositif d'éliminer ou d'utiliser des déclarations.

Collection de sites éliminer l'exemple

de Meilleures pratiques: Utilisation de Windows SharePointObjets de services

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.
}

Exemple d'élimination du Web

de Meilleures pratiques: Utilisation de Windows SharePointObjets de services

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. 
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top