Wyzerowanie (czyszczenie) witryny sharepoint
Czyli… coś czego… niemal nigdy nie powinno się robić, jednak moja wyobraźnia jest na tyle pojęta, że… jednak jestem w stanie sobie wyobrazić syt. w której trzeba programistycznie wyczyścić całą witrynę sharepoint. Można to zrobić za pomocą przedstawionej poniżej metody, którą można podpiąć pod kod deaktywujący feature.
Uwaga: ta metoda jest niczym “broń atomowa” dla witryny sharepoint, więc jej ewentualne użycie powinno być wcześniej 10-krotnie przemyślane.
private void ClearAll(SPFeatureReceiverProperties properties)
{
SPWeb baseWeb = (SPWeb)properties.Feature.Parent;
Guid siteId = baseWeb.Site.ID;
Guid webId = baseWeb.ID;
SPSecurity.RunWithElevatedPrivileges(
delegate()
{
using (SPSite adminSite = new SPSite(siteId))
{
try
{
SPWeb web = adminSite.AllWebs[webId];
if (web.Exists)
{
int listIndex = 0;
while (web.Lists.Count > listIndex)
{
try
{
web.Lists[listIndex].Delete();
}
catch (Exception ex) { listIndex++; };
}
while (web.ContentTypes.Count > 0)
{
int errorCount = 0;
while (web.ContentTypes[0].FieldLinks.Count > errorCount)
{
try
{
web.ContentTypes[0].FieldLinks
.Delete(web.ContentTypes[0].FieldLinks[errorCount].Id);
}
catch (Exception ex)
{
errorCount++;
}
}
web.ContentTypes[0].Delete();
}
while (web.Fields.Count > 0)
{
int fieldIndex = 0;
while (fieldIndex < web.Fields.Count)
{
try
{
web.Fields.Delete(web.Fields[fieldIndex].InternalName);
}
catch (Exception ex) {
fieldIndex++;
};
}
}
web.Update();
web.ResetRoleInheritance();
if (Helpers.checkGroup(SolutionResourcesAccessor.RMUAHRGroupName, web.SiteGroups))
web.SiteGroups.Remove(SolutionResourcesAccessor.RMUAHRGroupName);
if (Helpers.checkGroup(SolutionResourcesAccessor.RMUAUsersGroupName, web.SiteGroups))
web.SiteGroups.Remove(SolutionResourcesAccessor.RMUAUsersGroupName);
if (Helpers.checkGroup(SolutionResourcesAccessor.RMUAAdminGroupName, web.SiteGroups))
web.SiteGroups.Remove(SolutionResourcesAccessor.RMUAAdminGroupName);
while (web.Navigation.QuickLaunch.Count > 0)
{
web.Navigation.QuickLaunch.Delete(web.Navigation.QuickLaunch[0]);
web.Update();
}
while (web.Navigation.TopNavigationBar.Count > 0)
{
web.Navigation.TopNavigationBar.Delete(web.Navigation.TopNavigationBar[0]);
web.Update();
}
}
SPLimitedWebPartManager mainLWPM =
web.GetLimitedWebPartManager(SPUrlUtility.CombineUrl(web.Url, “default.aspx”)
, System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);
while (mainLWPM.WebParts.Count != 0)
mainLWPM.DeleteWebPart(mainLWPM.WebParts[0]);
web.ResetRoleInheritance();
}
catch (Exception ex)
{
}
}
}
);
}