Können ein oder mehrere Web Parts beim Öffnen einer SharePoint Seite nicht geladen werden, da z.B. die zugehörige Lösung nicht im SharePoint vorhanden ist, werden diese von SharePoint durch ErrorWebParts ersetzt. Dies war bei einem unserer Kunden der Fall, als bei einem Umstieg von SharePoint 2007 auf 2010 Inhaltsdatenbanken migriert wurden und auf der neuen Umgebung einige Lösungen nicht installiert waren.
Im Fall unseres Kunden wurden diese Lösungen und somit auch die Web Parts nicht mehr benötigt und sollten daher auch nicht in der neuen Umgebung installiert werden. Was also tun?
Eine Möglichkeit ist es, die betroffenen Seiten jeweils mit dem Parameter contents=1 zu öffnen und die ErrorWebParts dann von Hand zu löschen. Also z.B. mit dem Browser auf die URL http://portal/SitePages/Homepage.aspx?contents=1 und dort dann das entsprechende Web Part anhaken und auf Löschen klicken.
Wenn viele Seiten die veralteten Web Parts referenzieren, ist das natürlich aufwändig, daher bietet sich ein PowerShell Skript an. Grundsätzlich funktioniert dies so:
$web = Get-SPWeb $webUrl $webpartmanager = $web.GetLimitedWebPartManager( $pageUrl, [System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared) $toDelete = $webpartmanager.Webparts | where { $_.GetType().FullName -eq "System.Web.UI.WebControls.WebParts.ErrorWebPart" } $toDelete | foreach { webpartmanager.DeleteWebpart($_) } $web.Update() $web.Dispose()
Dabei wird der Web Part Manager der Seite verwendet, die Web Parts nach dem vollqualifizierten Namen gefiltert und die so gefundenen Web Parts dann gelöscht.
Pingback: Aus der Praxis – ErrorWebParts entfernen - SharePoint Blogs in German - Bamboo Nation
Axel Schneider
Jan-Hendrik Röhrs