SharePoint 2010 – XSL error while executing web part

Heute erhielt ich die folgende Fehlermeldung auf SharePoint 2010 Farmen bei einem Kunden:

Unable to display this Web Part. To troubleshoot the problem, open this Web page in a Microsoft SharePoint Foundation-compatible HTML editor such as Microsoft SharePoint Designer. If the problem persists, contact your Web server administrator.

Im ULS Log wurde folgende Fehlermeldung ausgewiesen:

Error while executing web part: System.NullReferenceException: Object reference not set to an instance of an object.
at System.Xml.Xsl.XslCompiledTransform.Load(MethodInfo executeMethod, Byte[] queryData, Type[] earlyBoundTypes)
at Microsoft.Xslt.STransform.GetCompiledTransform()
at Microsoft.SharePoint.WebPartPages.BaseXsltListWebPart.LoadXslCompiledTransform(WSSXmlUrlResolver someXmlResolver)
at Microsoft.SharePoint.WebPartPages.DataFormWebPart.GetXslCompiledTransform()
at Microsoft.SharePoint.WebPartPages.DataFormWebPart.PrepareAndPerformTransform(Boolean bDeferExecuteTransform)

Ursache

Nach einigen Recherchén in Google, konnte ich den Verursacher des Problems schnell herausfinden. Der Übeltäter für das Problem ist das Security Update für .NET Framework 3.5.1 (MS13-052).

Lösung

Um dieses Problem zu beheben, gibt es zwei Möglichkeiten:

Ich habe mich für Lösung 2 entschieden, welches auch das Problem definitiv behoben hat.

Falsche oder fehlende Lookup-Werte im Document Information Panel

Kürzlich kam eine Kunde auf mich zu mit folgendem Problem. Im Document Information Panel (DIP) von Word wurde ein falscher Wert (ID) in einer Lookup-Liste angezeigt bzw. es fehlten sogar Werte in der Liste. Nach einer kurzen Recherché im Internet und Analyse des Problems habe ich die Ursache für das Problem herausgefunden.

dip1

Ursache

Das DIP bezieht die Werte für eine Lookup-Liste über einen SharePoint WebService. Dieser WebService greift nicht direkt auf die Lookup-Liste sondern verwendet für den Datenabruf die Default View der Liste. Wird eine Liste in SharePoint erstellt, wird gleichzeitig eine Default View „All Items“ erstellt, welche alle Listenelemente zurückgibt. Wird nun in der Default View ein Filter oder ein Item Limit definiert, so hat dies Auswirkungen auf die Anzeige der Listenelemente und auch auf die Werte im Document Information Panel.
Ist in der Default View ein Filter gesetzt so wird für den selektierten Wert in der Liste im DIP nur die ID angezeigt. Es werden ausserdem nur die Werte in der Liste angezeigt, die dem Filter entsprechen. Ist das Item Limit kleiner als die Anzahl aller Listenelemente, so werden nur Listenelemente angezeigt gleich der Anzahl des Item Limits, z.B. Gesamtanzahl der Liste = 100; Item Limit = 10 -> so werden nur die ersten Zehn Elemente im Lookup des DIP angezeigt.

Lösung

Eine genaue Lösung gibt es nicht und ist abhängig von den Anforderungen. Mögliche Lösungen wären:

  • Default View auf All Items setzen
  • Custom Document Information Panel mit Info Path erstellen
  • Item Limit erhöhen (Wert >= Anzahl ListItems)

Hier ein paar nützliche Links zum Erstellen von Custom Document Information Panels:

RichText Field in Document und Picture Libraries

Heute bin ich bei einem Kunden auf ein Problem mit Multi Line Textfeldern gestossen. Mein Kunde hat mich gefragt, ob es möglich wäre, Multi Line Textfelder als RichText zu formatieren. Ja klar meinte ich, dies müsse funktionieren, da es ja bei benutzerdefinierten Listen auch funktioniert.

Multi Line Textfelder unterstützen OOB folgende Formate: Plain, RichText und RichText Enhanced.

Multi Line Formate

Ich musste jedoch schnell realisieren, dass die Einstellung für RichText in Document und Picture Libraries fehlt.

Multin Line Formate DocLib

Ich konnte das nicht ganz glauben und nach kurzer Recherche und Analyse bin ich auf den Blog-Eintrag von Henry Ong gestossen.

Multi Line Textfelder besitzen ein Property RichText, welches die RichText-Eigenschaft aktiviert oder deaktiviert. Das RichText Format kann über das Property RichTextMode angegeben werden. Hierzu stehen folgende Einstellungen zur Verfügung: Compatible, FullHtml, HtmlAsXml und ThemeHtml.

Mit Hilfe des folgenden PowerShell Scripts kann z.B. die Eigenschaft für ein bestehendes Multi Line Feld auf einer Document Library geändert werden:

Add-PSSnapin "Microsoft.SharePoint.PowerShell" -EA 0

webUrl = "http://intranet.sps.local"
$web = Get-SPWeb $webUrl
$list = $web.Lists["Shared Documents"]

if ($list -ne $null){
	foreach ($field in $list.Fields) {
		if ($field.Title -eq "RichText") {
			$field.RichText = $true
			$field.RichTextMode = "Compatible"
			$field.Update()
			$list.Update()
		}
	}
}

$web.Dispose()

Das Ergebnis sieht dann wie folg aus:

SP2010RichText3

Ein Nachteil gibt es jedoch. Sobald das Feld bearbeitet und geändert wird, setzt SharePoint das Property RichText wieder auf den Wert False. Falls dies geschieht müssen die beiden Properties nochmals gesetzt werden.

SharePoint 2010 Kerberos Guide

Heute musste ich wieder mal bei einem Kunden SharePoint 2010 im Zusammenspiel mit Kerberos erklären und feststellen, wie mangelhaft die Kenntnisse bei den verantwortlichen SharePoint Admins ist.

Wie auch schon früher in anderen Kundenprojekten, habe ich auch diesem SharePoint Admin nahegelegt, dass SharePoint 2010 Kerberos Guide von der Microsoft zu studieren, um ein besseres Verständnis für die Konfiguration von Kerberos unter SharePoint zu erhalten.

Das SharePoint 2010 Kerberos Guide kann direkt bei Microsoft unter dem folgenden Link bezogen werden:

http://www.microsoft.com/en-us/download/details.aspx?id=23176

Search Administration: „COM class factory“ Error

Bei einem Kunden habe ich heute folgende Fehlermeldung im Search Administration einer SharePoint 2010 Farm erhalten:

Error: Retrieving the COM class factory for component with CLSID {0FF1CE14-0005-0000-0000-000000000000} failed due to the following error: 800703fa​.

COM class factory error

Die Fehlermeldung habe ich erhalten, sobald ich auf den Link Content Sources geklickt habe. Daraufhin habe ich im Search Administration den System Status überprüft und für Crawl Status und Background Activity wurde der Status All Errors ausgewiesen.

Nach kurzer Überlegung habe ich mich entschlossen, ein IISReset auf beiden Search und Query Servern durchzuführen. Und voilá, der Fehler trat seitdem nicht mehr auf. 🙂