Baustein: Spalten und Feldtypen

Letzte Änderung: Donnerstag, 8. Juli 2010

Gilt für: SharePoint Foundation 2010

Inhalt dieses Artikels
Objektmodell für Spalten und Feldtypen
Für Spalten und Feldtypen verwendete XML
Bereiche im Zusammenhang mit der Entwicklung von Spalten und Feldtypen
Weitere Informationen zur Entwicklung von Spalten und Feldtypen

Dieses Thema enthält eine kurze Übersicht über Spalten- und Feldtypen als Entwicklungsbausteine in Microsoft SharePoint Foundation.

TippTipp

Der Begriff "Feld" hat in der SharePoint Foundation-Entwicklung zwei eng verwandte Bedeutungen. Manchmal wird damit eine Spalte in einer Liste bezeichnet; wenn jedoch von einem einzelnen Listenelement gesprochen wird, entspricht die Bedeutung von "Feld" eher der von "Zelle", wobei die Zelle den Schnittpunkt einer Spalte und einer Zeile in einer Tabelle darstellt. Teilweise aus diesem Grund werden die Begriffe "Spalte" und "Feld" im Kontext der SharePoint Foundation-Entwicklung praktisch als Synonyme verwendet. Ein Objekt, das eine Spalte darstellt, ist beispielsweise ein Objekt der SPField-Klasse oder einer von dieser abgeleiteten Klasse.

In SharePoint Foundation enthalten Spalten nicht nur Daten eines bestimmten Datentyps, sondern stellen selbst eine Art von Typ dar, da die gleiche Spalte in mehreren Listen mit verschiedenen Daten verwendet werden kann. Eine Spalte kann dauerhaft in einem Websitespaltenkatalog gespeichert sein. Eine Websitespalte aus dem Katalog kann programmatisch oder über die Benutzeroberfläche einer beliebigen Liste auf der Website hinzugefügt werden. Eine Spalte kann auch programmatisch oder über die Benutzeroberfläche, beispielsweise mithilfe eines Inhaltstypdesigners, einem Inhaltstyp hinzugefügt werden.

Zu den in SharePoint Foundation integrierten Websitespalten gehören Adresse, Geburtstag, Name Assistent und URL. Jede Spalte gehört zu einem Satz von Typen, die manchmal als "Typenarten" aber häufiger als "Feldtypen" bezeichnet werden. Die Feldtypen von Adresse, Geburtstag, Name Assistent und URL sind Multiline Text, Date and Time, Single line of text und Hyperlink. Die vollständige Liste der Feldtypen wird durch die Werte der SPFieldType-Aufzählung angegeben. Zu den wichtigsten Werten gehören folgende:

  • Boolean: Ein Feld, in dem nur die Werte true oder false akzeptiert werden.

  • Calculated: Ein Feld, dessen Wert zur Laufzeit über eine mathematische Formel berechnet wird.

  • Choice: Ein Feld, das nur einen Wert haben kann, der in einer begrenzten aufgezählten Liste mit Werten enthalten sein muss. Es gibt außerdem den Feldtyp Multichoice, bei dem mehrere Werte aus der Liste zulässig sind.

  • Computed: Ein Feld, dessen Wert vom Wert eines anderen Felds in der gleichen Liste abhängt. Dabei handelt es sich normalerweise um den Wert eines logischen Vorgangs, der für mindestens ein anderes Feld ausgeführt wird.

  • Lookup: Ein Feld, das einem Choice-Feld ähnlich ist, wobei die Liste der möglichen Werte jedoch aus einer Spalte einer anderen Liste kommt.

  • Text: Ein Feld, in dem eine einzelne Textzeile akzeptiert wird. Es gibt außerdem den Feldtyp Multiline Text.

Beispiele für interessante Vorgänge, die Sie (programmatisch oder mit XML-Markup) mit Feldern ausführen können:

  • Lesen und Schreiben des Werts eines bestimmten Felds in einem bestimmten Listenelement

  • Hinzufügen und Löschen von Spalten in Listen

  • Hinzufügen und Löschen von Spalten in Websitespaltenkatalogen

  • Ändern der Art und Weise, auf die Felder in den Formularen Neues Listenelement, Listenelemente bearbeiten und Listenelement anzeigen gerendert werden

  • Ändern der Art und Weise, auf die Spalten in Listenansichten gerendert werden

  • Erstellen eines benutzerdefinierten Feldtyps

  • Erstellen eines oder mehrerer benutzerdefinierter Renderingsteuerelemente zum Rendern des Felds verschiedener Seiten- und Formulartypen

  • Erstellen eines oder mehrerer Steuerelemente für mobiles Rendering zum Rendern des Felds auf mobilen Geräten

  • Ausschließen nicht erwünschter Spalten aus Abfrageergebnissen

  • Ausführen einer Verknüpfung von zwei Tabellen in einer Abfrage, wenn eine Tabelle eine Nachschlagespalte enthält, mit der in der anderen Tabelle nachgeschlagen wird

Objektmodell für Spalten und Feldtypen

HinweisHinweis

Dieses Thema bezieht sich explizit nur auf Klassen im SharePoint Foundation-Serverobjektmodell. Das Clientobjektmodell enthält für die meisten dieser Serverklassen parallele Klassen. Als allgemeine, aber nicht universelle Regel gilt: Wenn der Serverklassenname mit "SP" beginnt, hat die parallele Objektklasse den gleichen Namen, jedoch ohne das Präfix "SP".

SPListItem-Indexerstellungen

Eine der gängigsten Codierungsaufgaben bei der SharePoint Foundation-Entwicklung ist das Lesen und Schreiben in einem Feld in einem Listenelement. Hierzu rufen Sie einen Verweis auf das SPListItem-Objekt ab, das das Listenelement darstellt, und verwenden dann eine der zugehörigen Indexerstellungen (Item), um auf ein bestimmtes Feld zu verweisen. Es gibt eine Indexerstellung, von der ein Int32-Objekt akzeptiert wird, eine weitere Indexerstellung, von der ein String-Objekt akzeptiert wird, und eine dritte Indexerstellung, für die ein Guid-Objekt verwendet werden kann. Das letzte Objekt kann zum Abrufen des Felds anhand der Id-Eigenschaft verwendet werden. Sie können mit der String-Indexerstellung entweder den internen Namen des Felds oder den Anzeigenamen übergeben.

"SPField" und zugehörige Ableitungen

Jeder Feldtyp wird durch eine Klasse dargestellt, die von SPField abgeleitet wird. SPFieldBoolean beispielsweise stellt Boolean-Felder dar, und SPFieldChoice stellt Choice-Felder dar. Jede angegebene Spalte im Websitespaltenkatalog einer Website ist ein Objekt einer dieser Klassen. Die verschiedenen Spalten eines angegebenen Feldtyps werden anhand der Eigenschaften der Klasse unterschieden. Die Spalten Geburtstag und Fälligkeitsdatum beispielsweise sind beide Objekte der SPFieldDateTime-Klasse, unterscheiden sich jedoch unter anderem beim Wert der Title-Eigenschaft. Zu den Membern der SPField-Klasse gehört eine ListsFieldUsedIn()-Eigenschaft, mit der gemeldet wird, in welchen Listen die Spalte enthalten ist. Außerdem hat diese Klasse eine EnforceUniqueValues-Methode, mit der sichergestellt wird, dass nicht zwei Zellen in der Spalte den gleichen Wert oder die gleichen Eigenschaften Filterable und Sortable haben.

Ein wichtiger Member der SPField-Klasse ist die Update()-Methode. Diese Methode muss aufgerufen werden, um an einer Spalte vorgenommene Änderungen zu speichern.

TippTipp

Es gibt Member der einzelnen von SPField abgeleiteten Klassen, die darauf schließen lassen, dass die jeweiligen Objekte ein bestimmtes Feld in einem Listenelement darstellen, das heißt eine Entität, die in einer Listenansicht einer bestimmten Zelle in der Spalte entspricht. Beispielsweise gibt es eine GetFieldValue(String)-Methode und eine HasValue(Object)-Methode. Außerdem gibt es eine FieldRenderingControl-Eigenschaft, mit der bestimmt wird, wie das Feld gerendert wird, wenn ein einzelnes Listenelement in einem Formular gerendert wird, beispielsweise im Formular Neu oder Bearbeiten. Es kann zwar hilfreich sein, ein von SPField abgeleitetes Objekt auf diese Weise zu betrachten, aber Sie sollten beim Arbeiten mit diesen Membern berücksichtigen, dass das Objekt keine Eigenschaft hat, die den Wert eines Felds in einem bestimmten Listenelement enthält, und dass an einem solchen Wert vorgenommene Änderungen durch Aufrufen der SPField.Update()-Methode nicht gespeichert werden. (Das Objekt in der FieldRenderingControl-Eigenschaft hat einen solchen Member, nämlich die ItemFieldValue-Eigenschaft.) Analog wird mit GetFieldValue(String) nicht tatsächlich ein Wert abgerufen, sondern ein als Parameter übergebener Wert wird konvertiert. Mit HasValue(Object) wird lediglich gemeldet, ob ein übergebenes Objekt null entspricht. Die Absicht ist dabei, dass der einer der Methoden übergebene Wert dem Wert des Felds in einem bestimmten Listenelement entspricht; es ist jedoch die Aufgabe des Programmierers die Methoden auf diese Weise zu verwenden. Die primäre Methode zum Lesen und Schreiben der Daten eines bestimmten Felds in einem bestimmten Listenelement ist die Verwendung einer Indexerstellung mit einem SPListItem-Objekt.

Sie können eigene benutzerdefinierte Feldtypen erstellen, indem Sie eine neue Klasse von SPField ableiten oder von einer Klasse, die von dieser erbt. Weitere Informationen finden Sie unter Gewusst wie: Erstellen einer benutzerdefinierten Feldklasse.

HinweisHinweis

Nicht jede Klasse, die von SPField erbt, kann als Basisklasse für eine benutzerdefinierte Feldtypenklasse verwendet werden. Eine Liste der Klassen, für die von Microsoft die Ableitung unterstützt wird, finden Sie unter Gewusst wie: Erstellen einer benutzerdefinierten Feldklasse.

"BaseFieldControl" und zugehörige Ableitungen

Das Rendering eines Felds in einem bestimmten Listenelement in den Formularen Neues Element und Element bearbeiten (und manchmal im Formular Element anzeigen) wird normalerweise durch ein Objekt einer von BaseFieldControl abgeleiteten Klasse verwaltet. Beispielsweise wird ein SPFieldBoolean-Objekt von einem Objekt der BooleanField-Klasse gerendert, und das SPFieldUrl-Objekt wird von einem Objekt der UrlField-Klasse gerendert.

Ein Objekt, von dem ein Renderingsteuerelement instanziiert wird, enthält in der Field-Eigenschaft einen Verweis auf das gerenderte Feldobjekt. Dieses enthält einen Verweis auf das zugehörige Renderingsteuerelement in der FieldRenderingControl-Eigenschaft. Wie aus diesen reziproken Verweisen hervorgeht, sind die beiden Objekte Partner. Mit dem von SPField abgeleiteten Objekt wird die Spaltenkonfiguration behandelt, während mit dem von BaseFieldControlabgeleiteten Renderingsteuerelement die Interaktion mit Benutzern und das Rendering der Felder von Listenelementen auf der Benutzeroberfläche behandelt wird.

Ein Renderingsteuerelementobjekt wird durch die Eigenschaften Value und ItemFieldValue, die UpdateFieldValueInItem()-Methode und den OnLoad(EventArgs)-Handler mit dem Feld in der Inhaltsdatenbank synchron gehalten. Im Formular Bearbeiten hat die ItemFieldValue-Eigenschaft den Wert des Felds in der Inhaltsdatenbank in dem Listenelement, das im Formular gerendert wird. Im Formular Neu hat ItemFieldValue einen Standardwert. Der Value-Eigenschaft wird vom OnLoad(EventArgs)-Handler der Wert der ItemFieldValue-Eigenschaft zugewiesen. Wenn Benutzer den Wert im Formular festlegen oder ändern, wird der ItemFieldValue-Eigenschaft von der UpdateFieldValueInItem()-Methode der Wert der Value-Eigenschaft zugewiesen.

Sie können ein benutzerdefiniertes Feldrenderingsteuerelement erstellen, indem Sie eine neue Klasse von der BaseFieldControl-Klasse ableiten oder von einer Klasse, die von dieser erbt. Weitere Informationen finden Sie unter Gewusst wie: Erstellen eines Feldrendering-Steuerelements.

Renderingvorlagen

Der größte Teil der Arbeit bei der Erstellung und beim Aufbau eines Feldrenderingsteuerelements, einschließlich der Erstellung der untergeordneten Steuerelemente, wird von einer Renderingvorlage erledigt. Jedem Renderingsteuerelement ist mindestens eine Renderingvorlage zugeordnet. Ein RenderingTemplate-Objekt ist definiert als RenderingTemplate-Element in einer ascx-Datei im Ordner %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES. Auf die Renderingvorlage wird anhand des ID-Werts in der TemplateName-Eigenschaft des Renderingsteuerelementobjekts verwiesen. Da die Renderingvorlage für den größten Teil des Renderings zuständig ist, müssen von der CreateChildControls()-Methode weniger Aktionen ausgeführt werden als bei einer klassischen Microsoft ASP.NET-Steuerelementklasse. Normalerweise erhalten die untergeordneten Steuerelemente durch diese Methode nur den letzten Schliff. Beispielsweise kann von der Methode einem untergeordneten Steuerelement ein Standardwert zugewiesen werden, wenn das Feld im Formular Neues Element gerendert wird, oder einem untergeordneten Steuerelement wird im Formular Element bearbeiten der aktuelle Wert des Felds zugewiesen.

Sie können benutzerdefinierte Renderingvorlagen erstellen, um diese für benutzerdefinierte Renderingsteuerelemente zu verwenden. Weitere Informationen finden Sie unter Gewusst wie: Erstellen von Feldrenderingvorlagen.

"SPMobileBaseFieldControl" und zugehörige Ableitungen

Das Rendering von Feldern in den Versionen für mobile Geräte von SharePoint Foundation-Seiten wird von Klassen verwaltet, die von SPMobileBaseFieldControl abgeleitet werden. Beispielsweise wird ein SPFieldBoolean-Objekt von einem Objekt der SPMobileBooleanField-Klasse gerendert. Sie können eigene von einer dieser Klassen abgeleitete Renderingsteuerelemente für mobile Felder erstellen.

Generell bieten diese Klassen die gleiche Funktionalität für mobile Formulare wie die von BaseFieldControl abgeleiteten Klassen für nicht mobile Formulare. Es bestehen jedoch einige Unterschiede in der Architektur:

  • Die Vererbungsstruktur der von SPMobileBaseFieldControl abgeleiteten Klassen geht auf die Control-Klasse von ASP.NET zurück, nicht auf die Control-Klasse. Außerdem sind im SharePoint Foundation-Teil der Struktur die Funktionen, die von den Klassen TemplateBasedControl und FormComponent in nicht mobilen Renderingsteuerelementen geerbt werden, in der SPMobileComponent-Klasse für mobile Renderingsteuerelemente kombiniert.

  • Die mobilen Renderingsteuerelemente verfügen über einen eigenen Satz von Renderingvorlagen, und wenn Sie eine benutzerdefinierte Renderingvorlage zur Verwendung auf nicht mobilen Seiten erstellt haben, müssen Sie wahrscheinlich für die Verwendung auf einer mobilen Seite eine andere Vorlage erstellen.

  • Benutzerdefinierte Feldrenderingsteuerelemente, die Sie für mobile Kontexte erstellen, basieren beim Rendern eines Felds mehr auf der CreateChildControls()-Methode des Steuerelements und entsprechend weniger auf der Renderingvorlage als benutzerdefinierte Feldrenderingsteuerelemente, die Sie für nicht mobile Kontexte erstellen. Außerdem setzten Sie beim Erstellen benutzerdefinierter mobiler Renderingsteuerelemente nicht oft die CreateChildControls()-Methode selbst außer Kraft. Stattdessen setzen Sie typischerweise eine oder mehr der vier anderen Methoden außer Kraft, die von CreateChildControls(): CreateControlForDisplay(), CreateControlForEdit(), CreateControlForNew() und CreateControlForView() aufgerufen werden.

  • Ein Objekt, mit dem ein mobiles Renderingsteuerelement instanziiert wird, enthält in der Field-Eigenschaft einen Verweis auf das gerenderte Feldobjekt. Dieses enthält in der FieldRenderingMobileControl-Eigenschaft einen Verweis auf das mobile Renderingsteuerelement. Die an der Synchronisierung der Inhaltsdatenbank und des Renderingsteuerelements beteiligten Member unterscheiden sich hinsichtlich der von SPMobileBaseFieldControl abgeleiteten Klassen geringfügig von den oben beschriebenen von BaseFieldControl abgeleiteten Klassen.

    Weitere Informationen zum Feldrendering auf mobilen Seiten finden Sie unter Vorgehensweise: Anpassen des Renderns von Feldern auf mobilen Seiten.

Benutzerdefinierte Feldwertklassen

Wenn Sie einen benutzerdefinierten Feldtyp erstellen, der komplexe Daten enthält, müssen Sie möglicherweise eine benutzerdefinierte Feldwertklasse erstellen. Für einige der integrierten Feldtypen sind spezielle komplexe Werttypen erforderlich. Für Objekte des SPFieldLookup-Feldtyps beispielsweise werden Werte eines speziellen Typs verwendet, der durch die SPFieldLookupValue-Klasse dargestellt wird. Weitere Informationen zum Erstellen benutzerdefinierter Feldwertklassen finden Sie unter Vorgehensweise: Erstellen einer benutzerdefinierten Feldwertklasse.

"ViewFieldsOnly" und Verknüpfungen

Wenn Sie ein SPQuery-Objekt verwenden, um eine Collaborative Application Markup Language (CAML)-Abfrage darzustellen, können Sie mithilfe der Eigenschaften ViewFields und ViewFieldsOnly sicherstellen, dass von der Abfrage keine nicht benötigten Felder aus der Inhaltsdatenbank abgerufen werden müssen. Wenn Sie zum Abfragen von Listendaten den LINQ to SharePoint-Anbieter verwenden, kann zum gleichen Zweck das LINQ-Schlüsselwort select verwendet werden. Es gibt außerdem eine Joins-Eigenschaft, mit der zwei oder mehr Listen in der Abfrage verknüpft werden können. Alternativ wird vom LINQ to SharePoint-Anbieter das join-Schlüsselwort unterstützt. Weitere Informationen finden Sie unter Listenverknüpfungen und Projektionen.

Für Spalten und Feldtypen verwendete XML

Bei der Definition von Spalten und Feldtypen ist eine große Menge von XML-Markup beteiligt.

Feldtypdefinitionen

Die genaue Definition eines Feldtyps wird vom Field-Element bereitgestellt, das Teil des grundlegenden Listenschemas ist. Weitere Informationen finden Sie unter Field-Element (Liste). Wird ein Feld als Teil eines Features bereitgestellt, wird dasselbe Element in der Manifestdatei für das Feature verwendet. Weitere Informationen finden Sie unter Felddefinitionen.

Feldtyp-XML und XSLT-Stylesheets

Für das Rendering müssen Felder in SharePoint Foundation in Dateien registriert werden, deren Namen dem Muster fldtypes*.xml folgen und die in %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\XML gespeichert sind. Das Format der Datei ist Feldtyp-XML. Das Markup in diesen Registrierungen stellt eine einfache Art von Feldtypdefinition dar. Damit werden bestimmte Basismerkmale eines Feldtyps gemeldet und die Assembly und die verwaltete Klasse des Feldtyps identifiziert. (Schreibgeschützter Zugriff auf eine Feldtypdefinition ist über die SPFieldTypeDefinition-Klasse im Objektmodell verfügbar.)

In Listenansichten werden die Feldwerte durch ein XSLT-Styleheet gerendert. Die Kopfzeilen jeder Spalte werden ebenfalls durch ein XSLT-Stylesheet gerendert. Sie können XSLT-Stylesheets für benutzerdefinierte Felder oder zum Überschreiben des Standardrenderings vorhandener Felder erstellen. Alle Stylesheets werden in %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS\XSL dauerhaft gespeichert.

ASP.NET-Benutzersteuerelemente

ASP.NET-Benutzersteuerelemente, die in ascx-Dateien definiert werden, können bei der Entwicklung von Feldtypen zu zwei Zwecken verwendet werden: Erstens zum Feldrendering in den Formularen Anzeigen, Neu und Bearbeiten mit einem als Renderingsteuerelement bezeichneten Benutzersteuerelement (siehe "BaseFieldControl" und zugehörige Ableitungen weiter oben) und einer Renderingvorlage. Eine Renderingvorlage wird mit dem <RenderingTemplate>-Element in einer ascx-Datei im Ordner %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\ControlTemplates definiert. Die Vorlage wird im Objektmodell durch die RenderingTemplate-Klasse dargestellt. Mit dieser Klasse wird eine benutzerfreundliche Abstraktionsschicht über dem ASP.NET-System der Benutzersteuerelemente mit Vorlagen bereitgestellt. Weitere Informationen zu Renderingvorlagen und deren Beziehung zu Renderingsteuerelementen finden Sie unter Renderingvorlagen. Zweitens: Wenn ein Feldtyp selbst variable Eigenschaften aufweist, die in den verschiedenen Listen, die das Feld enthalten, unterschiedliche Werte haben, müssen Sie ein Eigenschaftsbearbeitungssteuerelement als Benutzersteuerelement in einer ascx-Datei erstellen. Weitere Informationen zu dieser Aufgabe finden Sie unter Rendern der Eigenschaften von benutzerdefinierten Feldtypen.

Verknüpfungstypen im Abfrageschema

Das Collaborative Application Markup Language (CAML) Abfrageschema enthält ein Join-Element (View), mit dem Sie Verknüpfungen mit Listen in einer CAML-Abfrage herstellen können, sofern diese Liste eine Nachschlagespalte enthält, mit der in der anderen Tabelle nachgeschlagen wird. Dieses Element ermöglicht außerdem die Verwendung impliziter und expliziter Verknüpfungen in einer LINQ-Abfrage, in der der LINQ to SharePoint-Anbieter verwendet wird.

Bereiche im Zusammenhang mit der Entwicklung von Spalten und Feldtypen

Baustein: Listen und Dokumentbibliotheken

Baustein: Inhaltstypen

Weitere Informationen zur Entwicklung von Spalten und Feldtypen

Umfangreiche und detaillierte Informationen zur Verwendung von Spalten und Feldtypen in Entwicklungsprojekten finden Sie im Abschnitt SharePoint Foundation-Entwicklung im Detail in den Knoten für Listenformulare, Spalten und Benutzerdefinierte Feldtypen. Weitere Informationen zur Entwicklung von Renderingfeldern für das Rendering auf mobilen Geräten finden Sie unter Vorgehensweise: Anpassen des Renderns von Feldern auf mobilen Seiten.

Das Lesen des Werts eines bestimmten Felds in einem bestimmten Listenelement ist eine der Wichtige Aufgaben bei der SharePoint-Programmierung. Weitere Informationen finden Sie unter Gewusst wie: Lesen des Werts eines Felds in einem Listenelement.

Detaillierte Informationen zum Abfragen von Daten in SharePoint Foundation finden Sie unter Abfragen und Datenabruf.