Erstellen von Inhaltstypen

Letzte Änderung: Montag, 1. November 2010

Gilt für: SharePoint Foundation 2010

Inhalt dieses Artikels
Inhaltstypvererbung
Entwerfen von Inhaltstypen
Erstellen eines Inhaltstyps mithilfe von deklarativem XML-Code
Erstellen eines Inhaltstyps mithilfe von Code

Verfügbar in SharePoint Online

Als Entwickler erstellen Sie einen Inhaltstyp durch Schreiben von deklarativem XML-Code oder ggf. Servercode. Dies ist eine Aufgabe, die in der Regel beim Erstellen eines Features anfällt, das von einer anderen Person installiert und wiederum von einer anderen Person aktiviert wird. Deshalb erstellen Sie im Grunde keinen Inhaltstyp, sondern definieren ihn.

Nachdem das Feature installiert wurde, wird es von jemandem aktiviert. Microsoft SharePoint Foundation führt Ihren Code aus oder liest Ihren deklarativen XML-Code und stellt den Inhaltstyp zur Verfügung. Ein Benutzer mit Administratorrechten und der Berechtigung zum Verwalten von Listen ordnet den neuen Inhaltstyp einer Liste oder Dokumentbibliothek zu, woraufhin er zur Verfügung steht. Benutzer, die der Liste Elemente hinzufügen dürfen, können mithilfe dieses Inhaltstyps Inhalte erstellen. Benutzer mit Administratorrechten können den Inhaltstyp an ihre Anforderungen anpassen, Spalten hinzufügen oder entfernen und andere Attribute ändern, wofür Sie nun nicht mehr verantwortlich sind.

Der Kernpunkt ist, dass das "Erstellen" eines Inhaltstyps eigentlich dessen Definition bedeutet. Eine gute Inhaltstypdefinition antizipiert, wie der Inhaltstyp letztlich verwendet wird.

Inhaltstypvererbung

Inhaltstypen werden nicht von Grund auf neu erstellt. Stattdessen wählen Sie stets einen vorhandenen Inhaltstyp als Basis für alle neuen Inhaltstypen, die Sie erstellen. Genau diese Aufgabe erledigt Microsoft SharePoint Foundation für seine vordefinierten Inhaltstypen. Informationen zur Hierarchie der Inhaltstypen, die mit SharePoint Foundation bereitgestellt werden, finden Sie unter Hierarchie der Basisinhaltstypen.

Die Website, auf der ein neuer Inhaltstyp erstellt wird, muss sich im Gültigkeitsbereich des Inhaltstyps befinden, von dem dieser abgeleitet ist. Dies sollten Sie berücksichtigen, wenn Sie die Definition des Inhaltstyps schreiben. Weitere Informationen finden Sie unter Inhaltstypbereich.

SharePoint Foundation unterstützt eine eingeschränkte Form der Inhaltstypvererbung. Wenn das Feature aktiviert wird, das einen neuen Inhaltstyp definiert, werden die für den übergeordneten Inhaltstyp definierten Spalten und anderen Metadaten an den untergeordneten Inhaltstyp übergeben. Dies ist der einzige Teil der Vererbung, der automatisch erfolgt.

HinweisHinweis

In früheren Versionen von SharePoint Foundation wurden Spalten und Metadaten, die einem Inhaltstyp nach seiner Bereitstellung hinzugefügt wurden, nicht von untergeordneten Inhaltstypen geerbt. In SharePoint Foundation 2010 wurde dieses Verhalten geändert. Sie haben nun die Möglichkeit, Spalten und Metadaten einzubeziehen, die Benutzer dem übergeordneten Inhaltstyp hinzugefügt haben. Weitere Informationen finden Sie in der Beschreibung des Inherits-Attributs für das ContentType-Element.

Nachdem ein Inhaltstyp zur Verfügung gestellt wurde und verwendet wird, können Sie oder ein anderer Benutzer die Definition des übergeordneten Inhaltstyps ändern, doch die Änderung wird nicht automatisch von abgeleiteten Inhaltstypen übernommen. Dieser Aspekt der Vererbung muss manuell auf der Benutzeroberfläche oder in benutzerdefiniertem Code ausgelöst werden. Weitere Informationen finden Sie unter Aktualisieren untergeordneter Inhaltstypen.

Die Inhaltstypvererbung lässt jedoch zu, dass Sie mit Inhaltstypen ähnlich wie mit abgeleiteten Klassen arbeiten können. So wie Sie z. B. die Eigenschaften einer Basisklasse außer Kraft setzen können, können Sie Attribute ändern, die Ihr Inhaltstyp von seinem übergeordneten Inhaltstyp geerbt hat. Sie können Spalten hinzufügen, ändern oder entfernen, verschiedene Formulare vom Typ Neu, Bearbeiten oder Anzeigen angeben, eine andere Dokumentvorlage bestimmen usw. Dies bedeutet, dass Sie bei der Entwicklung eines Anwendungsframeworks Basisinhaltstypen ebenso wie Basisklassen erstellen können. Sie können beispielsweise einen Inhaltstyp mit dem Namen Financial Document mit Eigenschaften erstellen, die alle Finanzdokumente in Ihrer Organisation gemeinsam haben. Anschließend können Sie Financial Document als Basis für neue Inhaltstypen wie Invoice und Purchase Order verwenden. Die neuen Inhaltstypen übernehmen Spalten und andere Metadaten von Financial Document, sodass Sie gemeinsame Elemente nur einmal (für den übergeordneten Inhaltstyp) definieren müssen.

Sie finden Anregungen zum Erstellen Ihrer eigenen Inhaltstyphierarchie, indem Sie untersuchen, wie SharePoint Foundation von Basisinhaltstypen geerbte Attribute verwendet und diese ändert. Ein guter Ausgangspunkt ist der Inhaltstypkatalog auf der Benutzeroberfläche. Klicken Sie im Menü Websiteaktionen auf Websiteeinstellungen. Klicken Sie auf der Seite Websiteeinstellungen unter Galerien auf Websiteinhaltstypen. Klicken Sie auf der Seite Websiteinhaltstypen auf den Link des gewünschten Inhaltstyps.

Eine weitere gute Informationsquelle ist die Datei ctypewss.xml im Ordner %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\FEATURES\ctype, die die Definitionen vieler vordefinierter Inhaltstypen enthält. Weiterführende Informationen zu den Definitionen finden Sie unter Inhaltstypdefinitionen.

Entwerfen von Inhaltstypen

Eine umfassende Anleitung zur Planung von Inhaltstypen finden Sie unter Planen von Inhaltstypen und Workflows. Es folgen einige allgemeine Aspekte:

  • Gültigkeitsbereich. An welcher Stelle in der Websitehierarchie soll der Inhaltstyp zur Verfügung gestellt werden?

    Wenn der Inhaltstyp in einer gesamten Websitesammlung verfügbar sein soll, sollten Sie ihn in einem Feature mit dem Gültigkeitsbereich "Websitesammlung" bereitstellen und Code in der FeatureActivated-Methode einer Featureempfängerklasse schreiben, die den Inhaltstyp der Inhaltstypsammlung der Stammwebsite hinzufügt.

  • Übergeordneter Inhaltstyp. Von welchem vorhandenen Inhaltstyp im Gültigkeitsbereich soll Ihr Inhaltstyp abgeleitet werden?

    Ihr Inhaltstyp wird nicht korrekt aktiviert, wenn der übergeordnete Inhaltstyp nicht in der Website verfügbar ist, in der der Inhaltstyp erstellt wird.

  • Spalten. Welche vorhandenen Websitespalten stehen Ihnen zur Verfügung?

    Spalten, die nicht vom übergeordneten Inhaltstyp geerbt werden, müssen hinzugefügt werden. Spalten, die nicht vorhanden sind, müssen erstellt werden.

  • Weitere Ressourcen. Benötigt der Inhaltstyp Sprachressourcen, Dokumentvorlagen oder Formulare?

    Wenn der Inhaltstyp beliebige dieser Ressourcen benötigt, müssen Sie wissen, wie diese bereitgestellt werden und wie der Inhaltstyp darauf zugreift.

Erstellen eines Inhaltstyps mithilfe von deklarativem XML-Code

Eine Möglichkeit zum Erstellen eines Inhaltstyps ist das Definieren des Inhaltstyps in der Elementmanifestdatei eines Features mithilfe von deklarativem XML-Code. Sobald das Feature aktiviert ist, wird der Inhaltstyp erstellt. Weitere Informationen finden Sie unter Inhaltstypdefinitionen und Verwenden von Features.

Sie können mehrere Inhaltstypen in derselben Elementmanifestdatei definieren. Schließen Sie ein ContentType-Element für jeden Inhaltstyp ein, den Sie definieren. Das ID-Attribut ist erforderlich, und der von Ihnen angegebene Wert muss ein sehr spezifisches Format einhalten. Eine ordnungsgemäß formatierte Inhaltstyp-ID bestimmt nicht nur den neuen Inhaltstyp, sondern auch seinen übergeordneten Inhaltstyp. Weitere Informationen finden Sie unter Inhaltstyp-IDs.

Zum Erstellen einer ID für einen Inhaltstyp, der von einem vordefinierten Inhaltstyp abgeleitet ist, beginnen Sie mit der hexadezimalen Zeichenfolge, die den vordefinierten Inhaltstyp bestimmt. Fügen Sie zwei Nullen an und dann eine GUID hinzu, aus der sämtliche Interpunktion entfernt wurde. Beispielsweise lautet die hexadezimale Zeichenfolge, die den Inhaltstyp Item bestimmt, "0x01". Die ID eines Inhaltstyps, der von Item abgeleitet ist, sollte ungefähr wie folgt aussehen:

0x0100A33D9AD9805788419BDAAC2CCB37509F

Zum Erstellen von IDs für zusätzliche Inhaltstypen, die Informationen von Ihrem Inhaltstyp erben, fügen Sie "01", "02" usw. an.

Ein weiteres erforderliches Attribut des ContentType-Elements ist Name, das einen Anzeigenamen angibt. Der Wert kann ein Verweis auf eine Ressource im Format $Resources:String sein. Weitere Informationen finden Sie unter Lokalisieren von SharePoint-Lösungen. Der Name selbst darf nicht länger als 128 Zeichen sein und nicht die Zeichen \ / : * ? " # % < > { } | ~ &, zwei aufeinander folgende Punkte (..) oder Sonderzeichen wie Tabulatoren enthalten.

Wenn Sie einem Inhaltstyp Spalten hinzufügen, dürfen diese nicht in der Inhaltstypdefinition erstellt werden. Stattdessen verweisen Sie auf Spalten, die an anderer Stelle erstellt wurden. Zum Hinzufügen eines Spaltenverweises fügen Sie ein FieldRef-Element als untergeordnetes Element des ContentType-Elements hinzu. Die Spalte, auf die verwiesen wird, kann eine sein, die bereits als Websitespalte vorhanden ist, oder eine neue Spalte sein, die mithilfe desselben Features erstellt wurde, mit dem der Inhaltstyp erstellt wurde. Weitere Informationen zum Erstellen von Websitespalten finden Sie unter Felddefinitionen.

Sie können auch das FieldRef-Element zum Verweisen auf eine Spalte verwenden, die der Inhaltstyp von seinem übergeordneten Inhaltstyp erbt. In diesem Fall ist der Grund für das Verweisen auf die Spalte nicht das Hinzufügen der Spalte, sondern das Ändern einiger ihrer Merkmale, wenn sie im Inhaltstyp verwendet wird.

Das ID-Attribut des FieldRef-Elements identifiziert die Spalte, auf die Sie verweisen. Der Wert, bei dem zwischen Groß- und Kleinschreibung unterschieden wird, muss die Zeichenfolgendarstellung einer GUID einschließlich geschweifter Klammern sein.

TippTipp

Sie finden die IDs vordefinierter Felder in der Datei fieldswss.xml, die sich im folgenden Pfad befindet: %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\FEATURES\fields.

Wenn Ihr Inhaltstyp eine Dokumentvorlage für neue Inhalte verwendet, können Sie diese in einem DocumentTemplate-Element innerhalb des ContentType-Elements identifizieren. Die Datei muss separat bereitgestellt werden. Eine Möglichkeit hierzu ist das Hinzufügen eines Module-Elements zum Manifest und das Einbeziehen der Datei in das Feature. Weitere Informationen finden Sie unter Gewusst wie: Bereitstellen einer Datei.

Die Inhaltstypdefinition kann auch über ein XMLDocuments-Element Definitionen benutzerdefinierter Formulare enthalten. Weitere Informationen finden Sie unter Benutzerdefinierte Informationen in Inhaltstypen.

Beispiel

Das folgende Beispiel zeigt das Elementmanifest eines Features, das vier Websitespalten und drei Websiteinhaltstypen erstellt. Der erste Inhaltstyp, Financial Document, ist ein untergeordnetes Element des vordefinierten Inhaltstyps Document. Die beiden anderen neuen Inhaltstypen, Invoice und Purchase Order, sind beide von Financial Document abgeleitet.

Die Definition von Financial Document verweist auf zwei der neuen Websitespalten, DateOpened und Amount. Das FieldRef-Element, das auf die Spalte DateOpened verweist, legt das DisplayName-Attribut so fest, dass der Spaltenname als Date anstelle von DateOpened, wie in der Websitespalte definiert, gerendert wird.

Invoice ist der erste von zwei neuen Inhaltstypen, die von Financial Document abgeleitet sind. Die Definition des Inhaltstyp verweist auf eine dritte neue Websitespalte, Client, und legt das Required-Attribut auf TRUE fest, sodass ein Eintrag für dieses Feld erforderlich ist, wenn ein neues Element erstellt wird. Der Typ Invoice enthält das FieldRef-Element für die Spalte Title, obwohl es vererbt ist, um den Wert des DisplayName-Attributs von Title in Service zu ändern.

Der zweite Inhaltstyp, der von Financial Document abgeleitet ist, heißt Purchase Order. Die Definition des Inhaltstyps verweist auf eine vierte neue Websitespalte, CostCenter, und legt das DisplayName-Attribut so fest, dass der Spaltenname als Department anstelle von Cost Center gerendert wird, wie in der Websitespalte definiert.

Purchase Order erbt die Spaltenverweise vom übergeordneten Inhaltstyp Financial Document, sodass kein erneuter Verweis erfolgen muss. Der Inhaltstyp erbt auch einen Verweis auf die Spalte Title von Financial Document, der die Spalte vom übergeordneten Inhaltstyp Document erbt. Der Typ Purchase Order enthält ein FieldRef-Element für die Spalte Title, um das geerbte DisplayName-Attribut mit einem eigenen Wert zu überschreiben.

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="https://schemas.microsoft.com/sharepoint/">

  <!-- Document Templates -->
  
  <Module Name="InvoiceDocumentTemplate"
          Path="FinancialDocuments"
          Url="_cts/Invoice" RootWebOnly="TRUE">
    <File Url="Invoice.docx" Type="Ghostable" />
  </Module>
  
  <Module Name="PurchaseOrderDocumentTemplate"
          Path="FinancialDocuments"
          Url="_cts/PurchaseOrder" RootWebOnly="TRUE">
    <File Url="PurchaseOrder.docx" Type="Ghostable" />
  </Module>


  <!-- Site Columns -->
 
  <Field ID="{060E50AC-E9C1-4D3C-B1F9-DE0BCAC300F6}"
         Name="Amount"
         DisplayName="Amount"
         Type="Currency"
         Decimals="2"
         Min="0"
         Required="FALSE"
         Group="Financial Columns" />

   <Field ID="{86811853-7E52-4515-A88D-A8FA9D450905}"
         Name="Client"
         DisplayName="Client Name"
         Type="Text"
         Required="FALSE"
         Group="Financial Columns"/>

    <Field ID="{1511BF28-A787-4061-B2E1-71F64CC93FD5}"
         Name="DateOpened"
         DisplayName="Date Opened"
         Type="DateTime"
         Format="DateOnly"
         Required="FALSE"
         Group="Financial Columns">
    <Default>[today]</Default>
  </Field>
  
 <Field ID="{943E7530-5E2B-4C02-8259-CCD93A9ECB18}"
         Name="CostCenter"
         DisplayName="Department"
         Type="Choice"
         Required="FALSE"
         Group="Financial Columns">
    <CHOICES>
      <CHOICE>Administration</CHOICE>
      <CHOICE>Information</CHOICE>
      <CHOICE>Facilities</CHOICE>
      <CHOICE>Operations</CHOICE>
      <CHOICE>Sales</CHOICE>
      <CHOICE>Marketing</CHOICE>
    </CHOICES>
  </Field>

  <!-- Site Content Types -->
  
  <!-- Parent ContentType: Document (0x0101) -->
  <ContentType ID="0x0101000728167cd9c94899925ba69c4af6743e"
               Name="Financial Document"
               Group="Financial Content Types"
               Description="Base financial content type"
               Version="0">
    <FieldRefs>
      <FieldRef ID="{1511BF28-A787-4061-B2E1-71F64CC93FD5}" Name="DateOpened" DisplayName="Date" Required="TRUE"/>
      <FieldRef ID="{060E50AC-E9C1-4D3C-B1F9-DE0BCAC300F6}" Name="Amount" DisplayName="Amount" Required="FALSE"/>
    </FieldRefs>
  </ContentType>

  <!-- Parent ContentType: Financial Document -->
  <ContentType ID="0x0101000728167cd9c94899925ba69c4af6743e01"
                Name="Invoice"
                Group="Financial Content Types"
                Description="Used for creating customer invoices"
                Inherits="TRUE"
                Version="0">
    <FieldRefs>
      <FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" Name="Title" DisplayName="Service" Required="TRUE" Sealed="TRUE"/>
      <FieldRef ID="{86811853-7E52-4515-A88D-A8FA9D450905}" Name="Client" DisplayName="Client Name" Required="TRUE"/>
    </FieldRefs>
    <DocumentTemplate TargetName="Invoice.docx" />
  </ContentType>
  
  <!-- Parent ContentType: Financial Document -->
  <ContentType ID="0x0101000728167cd9c94899925ba69c4af6743e02"
               Name="PurchaseOrder"
               Group="Financial Content Types"
               Description="Used for creating purchase orders"
               Inherits="TRUE"
               Version="0">
    <FieldRefs>
      <FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" Name="Title" DisplayName="Item" Required="TRUE" Sealed="TRUE"/>
      <FieldRef ID="{943E7530-5E2B-4C02-8259-CCD93A9ECB18}" Name="CostCenter" DisplayName="Department" Required="TRUE"/>
    </FieldRefs>
    <DocumentTemplate TargetName="PurchaseOrder.docx"/>
  </ContentType>

</Elements>

Erstellen eines Inhaltstyps mithilfe von Code

Als Alternative zur Verwendung von deklarativem XML-Code zum Erstellen eines Inhaltstyps können Sie das SharePoint Foundation-Objektmodell verwenden. Deklarativer XML-Code ist in der Regel einfacher zu schreiben, bietet jedoch im Allgemeinen weniger Flexibilität als das Objektmodell, das Zugriff auf die Funktionen des gesamten Microsoft .NET Framework hat und ein Debugging zur Laufzeit ermöglicht. Beide Ansätze werden mithilfe von Vorlagen unterstützt, die SharePoint-Entwicklungstools in Microsoft Visual Studio 2010 bereitstellt.

Fügen Sie den Code, der Ihren Inhaltstyp definiert, der FeatureActivated-Methode einer Unterklasse der SPFeatureReceiver-Klasse hinzu.

Sie erstellen einen Inhaltstyps durch Aufrufen des Konstruktors der SPContentType-Klasse. Vor Aufruf des Konstruktors müssen Sie drei als Argumente zu übergebende Elemente zusammenstellen:

  • Ein SPContentType-Objekt, das den übergeordneten Inhaltstyp darstellt.

    Sie können dieses Objekt aus der Auflistung abrufen, die in der AvailableContentTypes-Eigenschaft des SPWeb-Objekts zurückgegeben wurde, das die Website darstellt, in der Sie Ihren Inhaltstyp erstellen.

  • Ein SPContentTypeCollection-Objekt, das die Auflistung für die Website darstellt, in der Sie Ihren Inhaltstyp erstellen.

    Sie können dieses Objekt abrufen, indem Sie auf die ContentTypes-Eigenschaft des SPWeb-Objekts zugreifen, das die Website darstellt, in der Sie Ihren Inhaltstyp erstellen.

  • Eine Zeichenfolge, die den Namen enthält, den Sie dem Inhaltstyp zuweisen möchten.

    Der Name, den Sie bereitstellen, wird als Anzeigename für den Inhaltstyp verwendet. Einige Zeichen sind in Inhaltstypnamen nicht zulässig. Sie können den vorgeschlagenen Namen durch Aufrufen der statischen ValidateName(String)-Methode überprüfen. Diese Methode prüft auf unzulässige Zeichen, jedoch nicht auf Namensduplikate.

Nach Aufruf des Konstruktors zum Erstellen eines neuen SPContentType-Objekts müssen Sie es der Inhaltstypauflistung der Website in einem gesonderten Aufruf der Add(SPContentType)-Methode des SPContentTypeCollection-Objekts hinzufügen, das die Auflistung der Website darstellt. Mit diesem Schritt ist die Initialisierung des Inhaltstyps abgeschlossen.

VorsichtVorsicht

Die Add(SPContentType)-Methode löst eine SPException-Ausnahme aus, wenn der Inhaltstyp bereits in der Auflistung vorhanden ist.

Wenn Sie beabsichtigen, Eigenschaften des Inhaltstyps festlegen, müssen Sie das SPContentType-Objekt speichern, das von der Add-Methode zurückgegeben wird.

Sie können dem Inhaltstyp Spalten hinzufügen, indem Sie auf jede Spalte in einem SPFieldLink-Objekt verweisen. Rufen Sie dann die Add(SPFieldLink)-Methode des SPFieldLinkCollectionObjekts auf, das von der FieldLinks-Eigenschaft des Inhaltstyps zurückgegeben wird.

Wenn Sie die Konfiguration des Inhaltstyps abgeschlossen haben, rufen Sie die Update()-Methode auf, um für die Änderungen in der Datenbank einen Commit auszuführen.

Beispiel

Im folgenden Beispiel werden exakt dieselbe Websitespalten und Inhaltstypen wie im vorherigen Beispiel erstellt. Der einzige Unterschied ist, dass anstelle von deklarativer XML in diesem Beispiel Code in der FeatureActivated-Methode eines Featureempfängers verwendet wird.

Der properties-Parameter der FeatureActivated-Methode ist ein SPFeatureReceiverProperties-Objekt. Die Feature-Eigenschaft dieses Objekts gibt ein SPFeature-Objekt mit einer Parent-Eigenschaft zurück, die ein verschachteltes SPSite-Objekt oder ein verschachteltes SPWeb-Objekt enthält. Sie sollten diese Objekte nicht verwerfen. Sie sollten jedoch alle neuen SPWeb- oder SPSite-Objekte verwerfen, die von Ihrem Code erstellt werden. Weitere Informationen finden Sie unter Verwerfen von Objekten.

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    SPWeb web = null;
    if (properties.Feature.Parent is SPSite)
    {
        SPSite sites = (SPSite)properties.Feature.Parent;
        web = sites.RootWeb;
    }
    else
    {
        web = (SPWeb)properties.Feature.Parent;
    }
    if (web == null)
        return;

    /* CREATE SITE COLUMNS */

    string columnGroup = "Financial Columns";

    // Amount
    string amountFieldName = web.Fields.Add("Amount", SPFieldType.Currency, false);
    SPFieldCurrency amountField = (SPFieldCurrency)web.Fields.GetFieldByInternalName(amountFieldName);
    amountField.Group = columnGroup;
    amountField.DisplayFormat = SPNumberFormatTypes.TwoDecimals;
    amountField.MinimumValue = 0;
    amountField.Update();

    // Client Name
    string clientFieldName = web.Fields.Add("Client Name", SPFieldType.Text, false);
    SPFieldText clientField = (SPFieldText)web.Fields.GetFieldByInternalName(clientFieldName);
    clientField.Group = columnGroup;
    clientField.Update();

    // Date Opened
    string dateOpenedFieldName = web.Fields.Add("Date Opened", SPFieldType.DateTime, false);
    SPFieldDateTime dateOpenedField = (SPFieldDateTime)web.Fields.GetFieldByInternalName(dateOpenedFieldName);
    dateOpenedField.Group = columnGroup;
    dateOpenedField.DisplayFormat = SPDateTimeFieldFormatType.DateOnly;
    dateOpenedField.DefaultValue = "[today]";
    dateOpenedField.Update();

    // Cost Center Name
    string costCenterFieldName = web.Fields.Add("Cost Center", SPFieldType.Choice, false);
    SPFieldChoice costCenterField = (SPFieldChoice)web.Fields.GetFieldByInternalName(costCenterFieldName);
    costCenterField.Choices.Add("Administration");
    costCenterField.Choices.Add("Information Services");
    costCenterField.Choices.Add("Facilities");
    costCenterField.Choices.Add("Operations");
    costCenterField.Choices.Add("Sales");
    costCenterField.Choices.Add("Marketing");
    costCenterField.Group = columnGroup;
    costCenterField.Update();

    /* CREATE SITE CONTENT TYPES */

    string contentTypeGroup = "Financial Content Types";

    // Get a content type to be the parent of a new Financial Document content type.
    SPContentType documentCType = web.AvailableContentTypes[SPBuiltInContentTypeId.Document];

    // Create the Financial Document content type.
    SPContentType financialDocumentCType = new SPContentType(documentCType, web.ContentTypes, "Financial Document");

    // Note: A content type is not initialized until after it is added.
    financialDocumentCType = web.ContentTypes.Add(financialDocumentCType);
    financialDocumentCType.Group = contentTypeGroup;

    // Add the Date Opened column. Child content types inherit the column.
    SPFieldLink dateOpenedFieldRef = new SPFieldLink(dateOpenedField);
    dateOpenedFieldRef.Required = true;
    financialDocumentCType.FieldLinks.Add(dateOpenedFieldRef);

    // Add the Amount column. Child content types inherit the column.
    SPFieldLink amountFieldRef = new SPFieldLink(amountField);
    financialDocumentCType.FieldLinks.Add(amountFieldRef);

    // Commit changes.
    financialDocumentCType.Update();

    // Create the Invoice content type.
    SPContentType invoiceCType = new SPContentType(financialDocumentCType, web.ContentTypes, "Invoice");
    invoiceCType = web.ContentTypes.Add(invoiceCType);
    invoiceCType.Group = contentTypeGroup;

    // Modify the Title column inherited from the parent.
    SPFieldLink serviceFieldRef = invoiceCType.FieldLinks[SPBuiltInFieldId.Title];
    serviceFieldRef.DisplayName = "Service";
    serviceFieldRef.Required = true;

    // Add the Client column.
    SPFieldLink clientFieldRef = new SPFieldLink(clientField);
    clientFieldRef.Required = true;
    invoiceCType.FieldLinks.Add(clientFieldRef);

    // Specify a document template.
    invoiceCType.DocumentTemplate = "Invoice.docx";

    // Commit changes.
    invoiceCType.Update();

    // Create the Purchase Order content type.
    SPContentType purchaseOrderCType = new SPContentType(financialDocumentCType, web.ContentTypes, "Purchase Order");
    purchaseOrderCType = web.ContentTypes.Add(purchaseOrderCType);
    purchaseOrderCType.Group = contentTypeGroup;

    // Modify the Title column inherited from the parent.
    SPFieldLink itemFieldRef = purchaseOrderCType.FieldLinks[SPBuiltInFieldId.Title];
    itemFieldRef.DisplayName = "Item";
    itemFieldRef.Required = true;

    // Add the Department column.
    SPFieldLink departmentFieldRef = new SPFieldLink(costCenterField);
    departmentFieldRef.DisplayName = "Department";
    departmentFieldRef.Required = true;
    purchaseOrderCType.FieldLinks.Add(departmentFieldRef);

    // Specify a document template.
    purchaseOrderCType.DocumentTemplate = "PurchaseOrder.docx";

    // Commit changes.
    purchaseOrderCType.Update();

}
Public Overrides Sub FeatureActivated(ByVal properties As Microsoft.SharePoint.SPFeatureReceiverProperties)
    Dim web As SPWeb = Nothing
    If TypeOf properties.Feature.Parent Is SPSite Then
        Dim sites As SPSite = DirectCast(properties.Feature.Parent, SPSite)
        web = sites.RootWeb
    Else
        web = DirectCast(properties.Feature.Parent, SPWeb)
    End If
    If web Is Nothing Then
        Return
    End If

    ' CREATE SITE COLUMNS 

    Dim columnGroup As String = "Financial Columns"

    ' Amount
    Dim amountFieldName As String = web.Fields.Add("Amount", SPFieldType.Currency, False)
    Dim amountField As SPFieldCurrency = DirectCast(web.Fields.GetFieldByInternalName(amountFieldName), SPFieldCurrency)
    amountField.Group = columnGroup
    amountField.DisplayFormat = SPNumberFormatTypes.TwoDecimals
    amountField.MinimumValue = 0
    amountField.Update()

    ' Client Name
    Dim clientFieldName As String = web.Fields.Add("Client Name", SPFieldType.Text, False)
    Dim clientField As SPFieldText = DirectCast(web.Fields.GetFieldByInternalName(clientFieldName), SPFieldText)
    clientField.Group = columnGroup
    clientField.Update()

    ' Date Opened
    Dim dateOpenedFieldName As String = web.Fields.Add("Date Opened", SPFieldType.DateTime, False)
    Dim dateOpenedField As SPFieldDateTime = DirectCast(web.Fields.GetFieldByInternalName(dateOpenedFieldName), SPFieldDateTime)
    dateOpenedField.Group = columnGroup
    dateOpenedField.DisplayFormat = SPDateTimeFieldFormatType.DateOnly
    dateOpenedField.DefaultValue = "[today]"
    dateOpenedField.Update()

    ' Cost Center Name
    Dim costCenterFieldName As String = web.Fields.Add("Cost Center", SPFieldType.Choice, False)
    Dim costCenterField As SPFieldChoice = DirectCast(web.Fields.GetFieldByInternalName(costCenterFieldName), SPFieldChoice)
    costCenterField.Choices.Add("Administration")
    costCenterField.Choices.Add("Information Services")
    costCenterField.Choices.Add("Facilities")
    costCenterField.Choices.Add("Operations")
    costCenterField.Choices.Add("Sales")
    costCenterField.Choices.Add("Marketing")
    costCenterField.Group = columnGroup
    costCenterField.Update()

    ' CREATE SITE CONTENT TYPES 

    Dim contentTypeGroup As String = "Financial Content Types"

    ' Get a content type to be the parent of a new Financial Document content type.
    Dim documentCType As SPContentType = web.AvailableContentTypes(SPBuiltInContentTypeId.Document)

    ' Create the Financial Document content type.
    Dim financialDocumentCType As New SPContentType(documentCType, web.ContentTypes, "Financial Document")

    ' Note: A content type is not initialized until after it is added.
    financialDocumentCType = web.ContentTypes.Add(financialDocumentCType)
    financialDocumentCType.Group = contentTypeGroup

    ' Add the Date Opened column. Child content types inherit the column.
    Dim dateOpenedFieldRef As New SPFieldLink(dateOpenedField)
    dateOpenedFieldRef.Required = True
    financialDocumentCType.FieldLinks.Add(dateOpenedFieldRef)

    ' Add the Amount column. Child content types inherit the column.
    Dim amountFieldRef As New SPFieldLink(amountField)
    financialDocumentCType.FieldLinks.Add(amountFieldRef)

    ' Commit changes.
    financialDocumentCType.Update()

    ' Create the Invoice content type.
    Dim invoiceCType As New SPContentType(financialDocumentCType, web.ContentTypes, "Invoice")
    invoiceCType = web.ContentTypes.Add(invoiceCType)
    invoiceCType.Group = contentTypeGroup

    ' Modify the Title column inherited from the parent.
    Dim serviceFieldRef As SPFieldLink = invoiceCType.FieldLinks(SPBuiltInFieldId.Title)
    serviceFieldRef.DisplayName = "Service"
    serviceFieldRef.Required = True

    ' Add the Client column.
    Dim clientFieldRef As New SPFieldLink(clientField)
    clientFieldRef.Required = True
    invoiceCType.FieldLinks.Add(clientFieldRef)

    ' Specify a document template.
    invoiceCType.DocumentTemplate = "Invoice.docx"

    ' Commit changes.
    invoiceCType.Update()

    ' Create the Purchase Order content type.
    Dim purchaseOrderCType As New SPContentType(financialDocumentCType, web.ContentTypes, "Purchase Order")
    purchaseOrderCType = web.ContentTypes.Add(purchaseOrderCType)
    purchaseOrderCType.Group = contentTypeGroup

    ' Modify the Title column inherited from the parent.
    Dim itemFieldRef As SPFieldLink = purchaseOrderCType.FieldLinks(SPBuiltInFieldId.Title)
    itemFieldRef.DisplayName = "Item"
    itemFieldRef.Required = True

    ' Add the Department column.
    Dim departmentFieldRef As New SPFieldLink(costCenterField)
    departmentFieldRef.DisplayName = "Department"
    departmentFieldRef.Required = True
    purchaseOrderCType.FieldLinks.Add(departmentFieldRef)

    ' Specify a document template.
    purchaseOrderCType.DocumentTemplate = "PurchaseOrder.docx"

    ' Commit changes.
    purchaseOrderCType.Update()

End Sub

Siehe auch

Aufgaben

Gewusst wie: Verweisen auf eine Spalte in einem Inhaltstyp

Gewusst wie: Hinzufügen eines Inhaltstyps zu einer Website

Vorgehensweise: Hinzufügen eines Inhaltstyps zu einer Liste

Konzepte

Website- und Listeninhaltstypen

Inhaltstypbereich

Inhaltstypdefinitionen

Weitere Ressourcen

Planen von Inhaltstypen und Workflows (SharePoint Server 2010)

Erstellen benutzerdefinierter Inhaltstypen in SharePoint 2010

Exemplarische Vorgehensweise: Erstellen benutzerdefinierter Felder, Inhaltstypen, Listendefinitionen und Listeninstanzen

Vorgehensweise: Programmgesteuertes Erstellen von Inhaltstypen