Per EventReceiver in einer Dokumentbibliothek auf das Feld Titel zugreifen

Wenn man in einem synchronen EventReceiver (-ing) einer Dokumentbibliothek auf die Standard-Titelspalte (Title) zugreifen möchte, wird man beim ersten Versuch sehr wahrscheinlich eine Überraschung erleben. Man bekommt weder einen neu eingegebenen Wert, noch kann man dieses Feld ändern. Die Lösung für dieses Problem ist ganz einfach (wenn man es weiß): man muß dort das Feld "vti_title" verwenden.

Der Effekt tritt nur in synchronen Ereignissen wie ItemAdding oder ItemUpdating und nur in Dokumentbibliotheken auf. Normalerweise kann man bei diesen Ereignissen über

properties.AfterProperties["InternerFeldname"]

auf die neuen Werte zugreifen. Ebenso kann man die Werte setzen, indem man den gewünschten Wert als string in die AfterProperties schreibt:

properties.AfterProperties["InternerFeldname"] = "Neuer Wert"

Wenn man das mit dem Standardfeld Titel versucht, dessen interner Name immer Title ist, wird man feststellen, daß man falsche Werte erhält und daß Änderungen nicht übernommen werden. Lösung: bei den genannten Umständen (synchrones Ereignis einer Dokumentbibliothek) muß als Feldname immer "vti_title" verwendet werden.

Falls jemand eine Begründung für dieses mehr als seltsame Verhalten kennt, möge er mir diese bitte mitteilen. Würde mich brennend interessieren.

Fehler 5586 im EventLog nach SP1

Nach der Installation von Service Pack 1 haben wir haben auf mehreren Servern einen regelmäßig wiederkehrenden Fehler 5586 "Could not find stored procedure ‚proc_UpdateStatisticsNVP‘." in der Windows Ereignisanzeige. Eine Suche im Web ergab, daß zwar viele dasselbe Problem haben, daß es aber offenbar keine offizielle Lösung dafür gibt.

Wenn man im Datenbankserver nachschaut, stellt man fest, daß es die Stored Procedure proc_UpdateStatisticsNVP zwar in allen Inhaltsdatenbanken (auch in der Admin_Content_<GUID>) gibt, aber nicht in der Konfigurationsdatenbank. Kopiert man diese Stored Procedure in die Konfigurationsdatenbank erscheint der Fehler nicht mehr.

Ich möchte hier ausdrücklich darauf hinweisen, daß diese Lösung Änderungen an der Konfigurationsdatenbank erfordert. Derartige Änderungen werden von Microsoft nicht unterstützt und können deshalb zum Verlust von Supportansprüchen führen. Eine offizielle Lösung für das Problem habe ich allerdings nicht gefunden. Der Fehler scheint auch keine Auswirkungen zu haben – zumindest habe ich nichts gefunden, dessen Funktion dadurch beeinträchtigt werden würde. Es gibt also auch die Möglichkeit, mit der regelmäßig erscheinenden Fehlermeldung zu leben und auf eine offizielle Lösung von Microsoft zu warten.

Für alle, die die Fehlermeldung stört und die Änderungen an der Datenbank machen wollen, hier die Vorgehensweise:

Man öffnet mit dem SQL Server Management Studio den SharePoint-Datenbankserver. In einer beliebigen Inhaltsdatenbank (Standardname WSS_Content) findet man unter Programmability Stored Procedures die Prozedur proc_UpdateStatisticsNVP. Mit Rechtsklick Script Stored Procedure asCREATE to New Query Editor window läßt man sich ein Script zur Erstellung der Prozedur erzeugen. Im Erzeugten Script gibt es ganz oben eine Zeile Use <Name der Inhaltsdatenbank>. In dieser Zeile ändert man den Namen der Inhaltsdatenbank in den Namen der Konfigurationsdatenbank (Standard ist SharePoint_Config) und führt das Script aus, z.B. durch Drücken von F5. Dadurch wird die Stored Procedure auch in der Konfigurationsdatenbank angelegt und die Fehlermeldungen erscheinen in Zukunft nicht mehr.