Vorgehensweise: Erstellen eines benutzerdefinierten Feldtyps

Letzte Änderung: Donnerstag, 3. März 2011

Gilt für: SharePoint Foundation 2010

Inhalt dieses Artikels
1. Erstellen einer Feldtypdefinition
2. Erstellen einer Feldklasse
3. (Optional) Erstellen eines benutzerdefinierten XSLT-Stylesheets
4. Erstellen einer Renderingsteuerelement-Klasse
5. Erstellen einer oder mehrerer Renderingvorlagen
6. (Optional) Erstellen eines Feldwerttyps
7. (Optional) Erstellen eines Bearbeitungssteuerelements
8. Bereitstellen der Elemente
Unterschiede zwischen dem Feldrendering für mobile Geräte und dem Feldrendering für Computer

Dieses Thema bietet einen Überblick über das Verfahren zum Erstellen eines benutzerdefinierten Feldtyps und zum Definieren des Feldrenderings in Listenansichten und auf den Formularen Anzeigen, Neu und Bearbeiten.

Ein konkretes Beispiel für das Erstellen eines benutzerdefinierten Felds und das Definieren des Feldrenderings finden Sie unter Exemplarische Vorgehensweise: Erstellen eines benutzerdefinierten Feldtyps.

1. Erstellen einer Feldtypdefinition

Eine Feldtypdefinition ist eine XML-Datei mit den Informationen, die von Microsoft SharePoint Foundation zum Registrieren des Feldtyps und zum richtigen Rendern des Felds benötigt werden. Vor allem enthält die Datei jedoch Informationen zur Assembly, die den kompilierten Feldtyp einschließt.

Weitere Informationen zu Feldtypdefinitionen finden Sie unter Vorgehensweise: Erstellen einer benutzerdefinierten Feldtypdefinition.

2. Erstellen einer Feldklasse

Eine Feldklasse ist eine Klasse, deren Instanzen bestimmte, auf dem benutzerdefinierten Feldtyp basierende Felder darstellen. Diese Klasse muss von SPField oder einer der Klassen in SharePoint Foundation erben, die davon abgeleitet wurden. Die Klasse wird zu einer Assembly mit starkem Namen kompiliert, die Sie im globalen Assemblycache bereitstellen. Im Kontext einer Listenansicht repräsentiert ein SPField-Objekt eine Spalte und ihre Eigenschaften, die z. B. angeben, ob das Sortieren möglich ist. Im Kontext der Modi Anzeigen, Neu und Bearbeiten stellt ein SPField-Objekt ein bestimmtes Feld eines Listenelements dar - eine Zelle in der Tabelle, die die Liste bildet - und den Wert dieser Zelle in der Inhaltsdatenbank.

Diese Klasse kann optional benutzerdefinierte Datenüberprüfungen für den Feldtyp enthalten. Weitere Informationen zur benutzerdefinierten Überprüfung finden Sie unter Überprüfung von benutzerdefinierten Felddaten.

Weitere Informationen zu benutzerdefinierten Feldklassen finden Sie unter Gewusst wie: Erstellen einer benutzerdefinierten Feldklasse.

3. (Optional) Erstellen eines benutzerdefinierten XSLT-Stylesheets

Üblicherweise werden in SharePoint Foundation XSLT-Stylesheets verwendet, um Felder in einer Listenansicht zu rendern. Standardmäßig rendern die integrierten Stylesheets von SharePoint Foundation den Wert des Felds als Nur-Text. Wenn Sie eine andere Art des Renderings für Listenansichten wünschen, gehört ein benutzerdefiniertes XSLT-Stylesheet zu den grundlegenden Bestandteilen des Systems zum Rendern des benutzerdefinierten Felds. Die Benennung erfolgt nach dem Muster fldtypes_*.xsl; bereitgestellt wird es im Verzeichnis %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS\XSL. Das benutzerdefinierte Stylesheet hat Vorrang vor dem Standardstylesheet.

Die Überschrift einer Spalte in Listenansichten wird ebenfalls durch ein XSLT-Stylesheet gerendert, und auch hier können Sie ein neues Stylesheet erstellen, um das integrierte Stylesheet außer Kraft zu setzen, falls ein nicht standardmäßiges Rendering der Spaltenüberschrift für den benutzerdefinierten Feldtyp notwendig ist.

Weitere Informationen zum Erstellen eines XSLT-Stylesheets für ein benutzerdefiniertes Feld finden Sie unter Gewusst wie: Anpassen des Renderings eines Felds in einer Listenansicht.

HinweisHinweis

Falls Sie einen benutzerdefinierten Vorversionsfeldtyp verwenden, der mit einer früheren Version von SharePoint Foundation entwickelt wurde, und sich dessen Rendering in Listenansichten von dem durch die XSLT-Renderinginfrastruktur definierten Standardrendering unterschied, besteht die Möglichkeit, das XSLT-Rendering des Felds zu deaktivieren. Fügen Sie hierfür <Field Name="CAMLRendering">TRUE</Field> als untergeordnetes Element des FieldType-Elements in der fldtypes*.xml-Datei hinzu, die die Collaborative Application Markup Language (CAML)-Definition des benutzerdefinierten Legacyfelds enthält. Diese Vorgehensweise bewirkt, dass das Feld (und die Spaltenüberschrift) in Listenansichten gemäß den RenderPattern-Definitionen gerendert wird. Weitere Informationen finden Sie unter RenderPattern-Element (Feldtypen).

4. Erstellen einer Renderingsteuerelement-Klasse

Eine Renderingsteuerelement-Klasse wird in Verbindung mit einer Renderingvorlage (siehe nachfolgender Abschnitt) verwendet, um die Felder im Modus Neu, Bearbeiten oder Anzeigen zu rendern. Diese Klasse muss von BaseFieldControl oder einer der Klassen in SharePoint Foundation erben, die davon abgeleitet wurden. Diese Klasse wird zu derselben Assembly wie die benutzerdefinierte Feldklasse kompiliert.

Die Überprüfungslogik wird von den Membern Validate, IsValid und ErrorMessage des Feldrendering-Steuerelements sowie von der GetValidatedString-Methode des zugrunde liegenden Feldtyps implementiert. (Validate kann von CreateChildControls aufgerufen werden.)

Weitere Informationen zu Renderingsteuerelementen finden Sie unter Gewusst wie: Erstellen eines Feldrendering-Steuerelements.

5. Erstellen einer oder mehrerer Renderingvorlagen

Jedem Feldrendering-Steuerelement ist mindestens eine Feldrendering-Vorlage zugeordnet, um ein Feld im Modus Neu, Bearbeiten oder Anzeigen zu rendern. Die Zuordnung erfolgt, indem in einer der Eigenschaften des Feldrendering-Steuerelements ein Verweis auf die ID der Feldrendering-Vorlage festgelegt wird. Zum Zeitpunkt des Renderns sucht SharePoint Foundation die erforderliche Vorlage, indem die IDs aller Renderingvorlagen durchsucht werden, die in ASCX-Dateien unter %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES deklariert sind (diese werden alle beim Start der Webanwendung geladen). Die CreateChildControls-Methode des Renderingsteuerelements sorgt häufig für den "letzten Schliff" beim Feldrendering, aber der größte Teil der Renderingarbeit wird von der Vorlage geleistet. Üblicherweise weist die CreateChildControls-Methode im Modus Neu den untergeordneten Steuerelementen des Renderingsteuerelements Standardwerte zu. In den Modi Bearbeiten und Anzeigen werden die aktuellen Werte des Felds den untergeordneten Steuerelementen zugewiesen. Diese Methode kann außerdem abschließende Feinarbeiten wie das Zuweisen einer CSS-Klasse zu einem untergeordneten Label-Steuerelement durchführen.

Normalerweise benötigen Sie zwei Renderingvorlagen: Eine Vorlage rendert das Feld in bearbeitbarer Form in den Modi Neu und Bearbeiten, und die andere Vorlage rendert das Feld in schreibgeschützter Form im Anzeigemodus. Es ist jedoch auch möglich, dass alle drei Modi dieselbe Renderingvorlage gemeinsam verwenden oder dass in jedem Modus eine eigene Vorlage verwendet wird. Sie können sogar mehrere Vorlagen für einen bestimmten Modus verwenden und hierfür Logik nutzen, die die eine oder die andere Vorlage in Abhängigkeit von Kontextaspekten aufruft, z. B. in Abhängigkeit vom jeweiligen Benutzerkontext oder vom Typ der Liste oder Website, in bzw. auf der das Feld angezeigt wird.

Weitere Informationen zu Renderingvorlagen finden Sie unter Gewusst wie: Erstellen von Feldrenderingvorlagen.

Für eine Renderingvorlage für die Modi Neu und Bearbeiten sind normalerweise interaktive Steuerelemente wie bearbeitbare Textfeld-, Kontrollkästchen-, Optionsfeld- und Dropdownlisten-Steuerelemente als untergeordnete Steuerelemente erforderlich. Im Anzeigemodus werden hingegen normalerweise nur Label- oder Literal-Steuerelemente oder andere statische Anzeigesteuerelemente benötigt. Aus diesem Grund müssen Sie für den Anzeigemodus in der Regel eine andere Renderingvorlage erstellen. Sie geben diese Vorlage (anhand der ID) in der DisplayTemplateName-Eigenschaft an. Die Hauptvorlage, die jenseits des Anzeigemodus verwendet wird, wird durch die TemplateName()-Eigenschaft angegeben.

Die Renderingvorlage, die in einem bestimmten Kontext tatsächlich zum Rendern des Felds verwendet wird, ist die Vorlage, die von der ControlTemplate-Eigenschaft des Renderingsteuerelements zurückgegeben wird. Der get-Accessor dieser Eigenschaft wählt eine Vorlage aus den Renderingvorlagen aus, die dem Renderingsteuerelement zugeordnet sind. Für die Entscheidung werden folgende Kriterien herangezogen:

  • Der aktuelle HTTP-Kontext.

  • Der Steuerelementmodus.

  • Ist das Feld erforderlich oder nicht?

  • Soll das Feld, falls es sich um ein numerisches Feld handelt, als Prozentwert gerendert werden?

  • Ist das Listenelement ein Ordner?

Sie können diese Eigenschaft außer Kraft setzen und festlegen dass ihr get-Accessor den Steuerelementmodus prüft und DisplayTemplate zurückgibt, wenn der Anzeigemodus festgestellt wird. (Sofern nicht explizit eine andere Vorlage festgelegt wurde, gibt DisplayTemplate die Vorlage zurück, die durch DisplayTemplateName angegeben wird.) Falls keine andere Entscheidungslogik im get-Accessor für ControlTemplate benötigt wird, können Sie festlegen, dass er den get-Accessor der Basiseigenschaft im Modus Neu oder Bearbeiten aufruft.

HinweisHinweis

Eine andere Methode zum Angeben einer Renderingvorlage im Anzeigemodus besteht darin, die CreateChildControls-Methode zu verwenden, um DisplayTemplateName im Anzeigemodus zu TemplateName zuzuweisen. (Sofern dies nicht außer Kraft gesetzt wurde, gibt ControlTemplateTemplate zurück, und falls der entsprechende get-Accessor nicht außer Kraft gesetzt ist, gibt er die Vorlage zurück, die durch TemplateName angegeben wird.) Eine mögliche Schwäche dieser Verwendung der CreateChildControls-Methode besteht darin, dass die Methode nicht in einem Kontext ausgeführt wird, in dem das Feld nicht gerendert wird, z. B. wenn Sie zu Debuggingzwecken den Wert von ControlTemplate im Objektmodell prüfen.

6. (Optional) Erstellen eines Feldwerttyps

Wenn Sie eine benutzerdefinierte Feldklasse erstellen, für deren Felddaten eine bestimmte Datenstruktur erforderlich ist, können Sie eine Wertklasse (oder Struktur) erstellen, die die Felddaten aufnimmt.

Weitere Informationen zum Erstellen benutzerdefinierter Wertklassen finden Sie unter Vorgehensweise: Erstellen einer benutzerdefinierten Feldwertklasse.

7. (Optional) Erstellen eines Bearbeitungssteuerelements

Für alle Feldtypen sind ein Name, ein Datentyp, eine Beschreibung und andere gängige Eigenschaften erforderlich. Viele Feldtypen weisen jedoch auch Eigenschaften auf, die nur für Felder dieses speziellen Typs relevant sind. Benutzer legen diese variablen Eigenschaften über die Benutzeroberfläche fest, wenn sie eine neue Spalte erstellen, die auf dem Feldtyp basiert. Normalerweise bestimmt ein Element in der Feldtypdefinition (siehe oben in diesem Thema), wie diese Steuerelemente für Eigenschafteneinstellungen gerendert werden. Mitunter ist jedoch ein besonderes Bearbeitungssteuerelement erforderlich. Ein derartiges Steuerelement wird im Benutzersteuerelement definiert, d. h. in einer ASCX-Datei, die normalerweise über eine Code-Behind-Datei verfügt, die die zugehörige Logik enthält. Das Erstellen eines speziellen Bearbeitungssteuerelements empfiehlt sich, wenn Sie benutzerdefinierte Funktionen ausführen müssen, z. B. komplexe Berechnungslogik, das Nachschlagen von Werten in Datenquellen oder benutzerdefinierte Datenüberprüfungen der Werte, die ein Benutzer beim Konfigurieren einer neuen Spalte möglicherweise auswählt.

HinweisHinweis

Ein Bearbeitungssteuerelement für variable Eigenschaften darf nicht mit den zuvor beschriebenen ASCX-Dateien der Renderingvorlage verwechselt werden. Die Renderingvorlage rendert ein Feld und seinen Wert auf einer Seite zum Erstellen, Bearbeiten oder Anzeigen eines bestimmten Listenelements einer vorhandenen Liste, deren Spalten normalerweise bereits definiert sind. Im Gegensatz dazu rendert das Bearbeitungssteuerelement für variable Eigenschaften bestimmte Eigenschaften des Feldtyps, wenn eine Spalte auf der Basis dieses Typs erstellt wird.

Weitere Informationen zum Rendering benutzerdefinierter Feldtypen und zu Bearbeitungssteuerelementen für variable Eigenschaften finden Sie unter Rendern der Eigenschaften von benutzerdefinierten Feldtypen und Editor-Steuerelemente für Feldtypeigenschaften.

8. Bereitstellen der Elemente

Ausführliche Informationen dazu, wo die verschiedenen Klassen und Dateien, die Sie erstellt haben, bereitgestellt werden, finden Sie unter Bereitstellen benutzerdefinierter Feldtypen.

Unterschiede zwischen dem Feldrendering für mobile Geräte und dem Feldrendering für Computer

In SharePoint Foundation erfolgt das Feldrendering mit benutzerdefinierten Feldrendering-Steuerelementen für mobile Geräte ähnlich wie das Feldrendering mit benutzerdefinierten Feldrendering-Steuerelementen für Computer. Beachten Sie jedoch die folgenden Unterschiede:

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Erstellen eines benutzerdefinierten Feldtyps

Exemplarische Vorgehensweise: Erstellen eines benutzerdefinierten Feldrendering-Steuerelements für mobile Seiten

Konzepte

Benutzerdefinierte Feldtypen

Gewusst wie: Erstellen einer benutzerdefinierten Feldklasse

Überprüfung von benutzerdefinierten Felddaten

Vorgehensweise: Erstellen einer benutzerdefinierten Feldwertklasse

Vorgehensweise: Erstellen einer benutzerdefinierten Feldtypdefinition

Rendern der Eigenschaften von benutzerdefinierten Feldtypen

Editor-Steuerelemente für Feldtypeigenschaften

Gewusst wie: Erstellen eines Feldrendering-Steuerelements

Gewusst wie: Erstellen von Feldrenderingvorlagen

System zum Rendern mobiler Seiten