Obtenez SPWEB à tous les niveaux
-
28-09-2020 - |
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
}
}
}
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.
}