Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hello,
last time i need to identify all Publishing Pages in a site collection and do some actions on all of them. Therefore i wrote a short tool for this.
To do this action you can normally use more than one way to reach the target. But in my case the site collection has a size of 60 GB and the code need to run over more then 26000 Pages.
So it makes a difference to have execution time of 8 hours or less than 2 hours. :-)
My first solution was to identify Publishing pages on their “Pages” Library. Such an implementation runs completely on WSS, so on Microsoft.SharePoint namespace and is not optimized.
using (SPSite site = new SPSite(url)) { foreach (SPWeb web in site.AllWebs) { try { SPList list = web.Lists["Pages"]; foreach(SPListItem item in list) { // do my stuff on each Pages // ... } } catch (exception e) {} } }
Disadvantage of using only WSS namespace
Multi-Languages SPWeb-object have difference Pages-Library names like (Pages, Seiten, Paginas, …), so your code need to be aware of each languages.
It’s more efficient to use the Publishing namespace: Microsoft.SharePoint.Publishing
using (SPSite site = new SPSite(url))
{
foreach (SPWeb web in site.AllWebs)
{
try
{
if (PublishingWeb.IsPublishingWeb(web))
{
PublishingWeb pubweb = PublishingWeb.GetPublishingWeb(web);
PublishingPageCollection pages = pubweb.GetPublishingPages();
foreach (PublishingPage page in pages)
{
// do some stuff
// ...
}
}
}
catch (exception e)
{}
}
}
the second solution is faster & multilingual.
regards
Patrick