Sandra Erb

 

Um eigene Assemblies (z.B. Webparts, Web Controls oder User Controls) im SharePoint verwenden zu können, müssen diese als sogenanntes “SafeControl” registriert werden. Die Registrierung des SafeControl muss in der web.config Datei der Webapplikation erfolgen, in welcher die Assembly verwendet werden soll.

Der Eintrag in der web.config setzt sich mindestens wie folgt zusammen:


Assembly: Name der Assembly, in welcher die eigentliche Funktionalität implementiert ist. Es wird empfohlen, an dieser Stelle den “$SharePoint.Project.AssemblyFullName$”-Parameter zu verwenden. Dies ist ein ersetzbarer Parameter, welcher den “strong Name” der Assemby darstellt. Mehr Informationen zu ersetzbaren Parametern können der MSDN entnommen werden: http://msdn.microsoft.com/de-de/library/ee231545.aspx.

Namespace: Der Namespace, in welchem sich die Controls oder der Webpart befindet. Sollten sich die eigenen Controls in mehreren Namespaces befinden, so muss pro Namespace ein SafeControl Eintrag erstellt werden.

TypeName: Der Name des Controls, welchem es erlaubt werden soll im SharePoint ausgeführt zu werden. Sollten in einem Namespace mehrere Controls vorhanden sein, so muss nicht für jedes Control ein SafeControl registriert werden. Stattdessen kann als TypeName ein Sternchen (*) verwendet werden, um die gesamte DLL zu registrieren.

Safe: Boolean-Wert, welcher angibt, ob das Control sicher (true) oder nicht sicher (false) ist.

Um ein SafeControl zu registrieren gibt es verschiedene Möglichkeiten:

  • Manuelles Hinzufügen des SafeControls zur web.config Datei (schlecht, dieses Vorgehen sollte nur zu Entwicklungs- und Testzwecken verwendet werden und niemals in einem Produktivsystem zum Einsatz kommen)
  • Hinzufügen des SafeControls via Code (besser)
  • Veröffentlichen einer Assembly als Solution Package (.wsp Datei) (empfohlen)

 

Manuelles Hinzufügen des SafeControls

Das manuelle Hinzufügen eines SafeControls zur web.config Datei erscheint auf den ersten Blick als einfachster und schnellster Weg. Es ist jedoch ausdrücklich nicht zu empfehlen, die web.config Datei selbst anzupassen.

Warum ist dieses Vorgehen nicht empfehlenswert? Was zu Beginn als einfach und schnell umzusetzen erscheint verursacht schnell einen enormen Pflege- und Administrationsaufwand. Solange man sich auf einem einzelnen SharePoint Server bewegt muss man den SafeControl Eintrag nur in die web.config Datei der gewünschten Applikation eintragen. Befindet man sich nun jedoch in einer kleinen Server Farm mit zwei Servern und möchte seine Assembly für fünf verschiedene Applikationen zur Verfügung stellen, so muss man bereits zehn web.config Dateien anpassen. Wenn nun noch ein weiterer Server zur Farm hinzugefügt wird, dann muss daran gedacht werden, die Änderung der web.config auch auf dem neuen Server durchzuführen.

Unterm Strich ist dies die aufwändigste und vor allem fehleranfälligste Variante. Sie eignet sich nur zu Entwicklungs- und Testzwecken.

Hinzufügen des SafeControls via Code

Das SharePoint Objekt Modell stellt die Klasse “SPWebConfigModification” zur Verfügung. Mit Hilfe dieser Klasse können aus dem Code heraus Änderungen an der web.config Datei einer Applikation vorgenommen werden.

Die so vorgenommenen Änderungen werden auf allen Servern der Farm ausgeführt und wirken sich auch auf neu hinzugefügte Server aus.

Um den Code zu verwenden kann z.B. die Methode “FeatureActivated” überschrieben werden. Dazu ist es jedoch erforderlich, dass die eigene Assembly über ein Feature deployed wird.

Folgender Code kann zur Anpassung der web.config Datei verwendet werden:

SPWebApplication webApp = site.WebApplication;

 

Veröffentlichen einer Assembly als Solution Package

Die empfohlene Vorgehensweise, um eigene Webparts, Features, Assemblies etc. zu veröffentlichen ist die Erstellung eines Solution Packages (.wsp Datei). Gerade mit SharePoint 2010 sollte dies der einzigste noch verwendete Weg sein, da nun auch SharePoint selbst alle Features als wsp zur Verfügung stellt. Selbst über die Oberfläche gespeicherte List- oder Sitetemplates werden nun als .wsp Datei zur Verfügung gestellt.

Während früher für die Registrierung des SafeControls noch die Manifest Datei des Solution Packages angepasst werden musste, bietet Visual Studio 2010 heute eine einfache Oberfläche für diese Aufgabe. In den meisten Fällen wird diese Aufgabe sogar automatisch von Visual Studio 2010 durchgeführt (z.B. wenn ein Webpart zu einem SharePoint Projekt hinzugefügt wird).

Sollte Visual Studio die Einstellung nicht automatisch vorgenommen haben (dies passiert z.B. beim Erstellen einer Custom Action, welche zusammen mit einem User Control verwendet wird), so kann diese mit wenigen Klicks nachgeholt werden:

  1. Im Visual Studio die gewünschte Datei (z.B. das Modul, in welchem die eigene Assembly liegt) markieren und im Properties Fenster den Eintrag “Safe Controls Entries” öffnen.

    PropertiesBox

  2. Es wird ein neues Fenster geöffnet, in welchem die erforderlichen SafeControl Einträge gesetzt werden können. Visual Studio 2010 füllt diese Maske bereits mit Standardwerten und verweist dabei auf die Assembly des aktuellen Projektes. Wenn diese Maske wieder geschlossen wird, werden die vorgenommenen Änderungen automatisch in das Solution Manifest eingetragen, mehr muss nicht getan werden.

    SafeControlEntries

Die auf diese Weise registrierten SafeControls werden beim Deployment des Solution Packages automatisch allen Servern hinzugefügt und gelten auch für alle zukünftig hinzugefügten Server.