Vorgehensweise: Hinzufügen eines Inhaltstyps zu einer Liste

Letzte Änderung: Freitag, 27. Mai 2011

Gilt für: SharePoint Foundation 2010

Verfügbar in SharePoint Online

Im Listendefinitions-XML können Sie auf Inhaltstypen verweisen, sodass jedes Mal, wenn ein Benutzer eine Liste eines entsprechenden Typs erstellt, der Inhaltstyp durch Microsoft SharePoint Foundation 2010 standardmäßig in die Liste eingefügt wird. Sie können Inhaltstypen auch einer vorhandenen Liste hinzufügen, indem Sie Code schreiben, der das SharePoint Foundation-Objektmodell verwendet.

Angeben von Inhaltstypen in einer Listendefinition

Sie sollten sicherstellen, dass die Liste für die Unterstützung von Inhaltstypen konfiguriert ist, bevor Sie einer Listendefinition einen Inhaltstyp hinzufügen. Zunächst sollten Sie die Vorlage überprüfen, aus der die Listeninstanz erstellt wird. Wenn das ListTemplate-Element über ein Attribut namens DisallowContentTypes verfügt und dieses Attribut auf TRUE festgelegt ist, werden Inhaltstypen von der Liste nicht unterstützt. Wenn das Attribut auf FALSE festgelegt oder nicht vorhanden ist, werden Inhaltstypen von der Liste unterstützt.

Im nächsten Schritt sollten Sie überprüfen, ob Inhaltstypen für die Listeninstanz aktiviert sind. Die Datei Schema.xml, durch die die Listeninstanz definiert wird, beinhaltet ein List-Element. Dieses Element sollte ein Attribut namens EnableContentTypes enthalten, und dieses Attribut sollte auf TRUE festgelegt sein. Das Festlegen des Attributs auf TRUE hat die gleichen Auswirkungen wie wenn unter Listeneinstellungen im Abschnitt Erweiterte Einstellungen unter Verwaltung von Inhaltstypen zulassen? die Option Ja ausgewählt wird.

Fügen Sie dem Listenschema ein ContentTypes-Element hinzu, um einer Listendefinition einen Inhaltstyp hinzuzufügen. Das ContentTypes-Element enthält eine Auflistung von ContentTypeRef-Elementen. Durch jedes ContentTypeRef-Element wird ein Websiteinhaltstyp angegeben, der von SharePoint Foundation lokal als Listeninhaltstyp zur Liste hinzugefügt werden sollte, sobald ein Benutzer eine neue Liste des angegebenen Typs erstellt. Das ContentTypeRef-Element verfügt nur über ein Attribut, ID, für das Sie die Inhaltstyp-ID festlegen.

Der Websiteinhaltstyp, auf den Sie verweisen, muss zum Bereich der Liste gehören – er muss also innerhalb der Websitehierarchie auf der gleichen oder einer höheren Ebene deklariert sein. Weitere Informationen zum Inhaltstypbereich finden Sie unter Inhaltstypbereich.

HinweisHinweis

Wenn von SharePoint Foundation eine Listeninstanz erstellt wird, enthält diese nur die Spalten, die im Basistypschema der Liste oder im Listenschema deklariert sind. Wenn Sie auf einen Websiteinhaltstyp im Listenschema verweisen und dieser Inhaltstyp wiederum auf Websitespalten verweist, die nicht im Basistypschema der Liste oder im Listenschema enthalten sind, werden diese Spalten nicht eingeschlossen. Sie müssen diese Spalten im Listenschema für SharePoint Foundation deklarieren, um sie in die Liste einzuschließen.

Weitere Informationen zu Websitespalten finden Sie unter Einführung in Spalten.

So fügen Sie einer Listendefinition einen Inhaltstyp hinzu

  1. Fügen Sie in der Listendefinitions-XML dem ContentTypes-Element ein ContentTypeRef-Element hinzu.

  2. Legen Sie für das ID-Attribut des ContentTypeRef-Elements die Inhaltstyp-ID des Inhaltstyps fest, den Sie in die Liste einschließen möchten.

Im folgenden Beispiel wird partielles Markup für ein Listendefinitionsschema mit einem ContentTypeRef-Element gezeigt.

<List xmlns:ows="Microsoft SharePoint" Title="The List" Direction="$Resources:Direction;" FolderCreation="FALSE" Url="Lists/TheList" BaseType="0" xmlns="https://schemas.microsoft.com/sharepoint/">
  <MetaData>
    <ContentTypes>
      <ContentTypeRef ID="0x01060062efcfca3f4d4036a0c54ed20108fa2e" />
    </ContentTypes>
    ...
  </MetaData>
</List>

Weitere Informationen zum ContentTypes-Element im Listendefinitionsschema finden Sie unter ContentTypes-Element (Liste).

Hinzufügen von Inhaltstypen zu einer vorhandenen Liste

Sie können das SharePoint Foundation-Objektmodell verwenden, um einer vorhandenen Liste Inhaltstypen hinzuzufügen.

So fügen Sie einer Liste einen Inhaltstyp hinzu

  1. Verwenden Sie die Lists-Eigenschaft, um eine Listenauflistung für die Website zu erhalten, zu der die Liste gehört.

  2. Deklarieren Sie eine Variable vom Typ SPList, und setzen Sie sie mit dem Objekt in der Websitelistenauflistung gleich, durch das die Liste dargestellt wird.

  3. Aktivieren Sie Inhaltstypen für die Liste, indem Sie den Wert der ContentTypesEnabled-Eigenschaft für die Liste auf true festlegen.

  4. Greifen Sie mithilfe der AvailableContentTypes-Eigenschaft auf die Inhaltstypen zu, die für die Website verfügbar sind, auf der sich die Liste befindet. Durch dieses Vorgehen wird ein SPContentTypeCollection-Objekt zurückgegeben.

  5. Deklarieren Sie eine Variable vom Typ SPContentType, und setzen Sie sie mit dem SPContentType-Objekt in der Auflistung gleich, das den Websiteinhaltstyp darstellt, den Sie zur Liste hinzufügen möchten.

  6. Überprüfen Sie mithilfe der IsContentTypeAllowed(SPContentType)-Methode, ob die Liste den ausgewählten Inhaltstyp akzeptiert.

  7. Greifen Sie mithilfe der ContentTypes-Eigenschaft auf die Auflistung der Listeninhaltstypen für die angegebene Liste zu. Diese Methode gibt ein SPContentTypeCollection-Objekt zurück.

  8. Wenden Sie die Add-Methode an, um das SPContentType-Objekt der Auflistung der Listeninhaltstypen hinzuzufügen.

Wenn Sie einer Liste mithilfe des Objektmodells einen Websiteinhaltstyp hinzufügen, werden von SharePoint Foundation automatisch alle Spalten des Inhaltstyps hinzugefügt, die nicht bereits in der Liste enthalten sind. Dieser Prozess unterscheidet sich vom Erstellen von Verweisen auf Inhaltstypen in einem Listenschema, denn in dem Fall müssen Sie dem Listenschema die Spalten für SharePoint Foundation explizit hinzufügen, um sie in Listeninstanzen einzuschließen.

Beispiel

Im folgenden Beispiel wird eine Konsolenanwendung dargestellt, durch die der Shared Documents-Liste in einer Website ein Websiteinhaltstyp hinzugefügt wird. Der im Beispiel verwendete Inhaltstyp entspricht dem im Beispiel unter Gewusst wie: Hinzufügen eines Inhaltstyps zu einer Website erstellten Inhaltstyp.

Konsolenanwendungen bieten sich für Tests innerhalb einer Entwicklungsumgebung an. In einer Produktionsumgebung würde der Code für dieses Beispiel eher als Teil der FeatureActivated-Methode eines SPFeatureReceiver-Objekts eingeschlossen.

using System;
using Microsoft.SharePoint;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite siteCollection = new SPSite("https://localhost"))
            {
                using (SPWeb site = siteCollection.OpenWeb())
                {

                    // Get a content type.
                    SPContentType ct = site.AvailableContentTypes["Financial Document"];

                    // The content type was found.
                    if (ct != null) 
                    {

                        // Get a list.
                        try 
                        {
                            SPList list = site.Lists["Shared Documents"]; // Throws exception if does not exist.

                            // Make sure the list accepts content types.
                            list.ContentTypesEnabled = true;

                            // Add the content type to the list.
                            if (!list.IsContentTypeAllowed(ct))
                                Console.WriteLine("The {0} content type is not allowed on the {1} list",
                                                   ct.Name, list.Title);
                            else if (list.ContentTypes[ct.Name] != null)
                                Console.WriteLine("The content type name {0} is already in use on the {1} list",
                                                   ct.Name, list.Title);
                            else
                                list.ContentTypes.Add(ct);
                        }
                        catch (ArgumentException ex) // No list is found.
                        {
                            Console.WriteLine("The list does not exist.");
                        }
                    }
                    else // No content type is found.
                    {
                        Console.WriteLine("The content type is not available in this site.");
                    }
                }
            }
            Console.Write("\nPress ENTER to continue...");
            Console.ReadLine();
        }
    }
}
Imports System
Imports Microsoft.SharePoint

Module Test
   Sub Main()
      Using siteCollection As SPSite = New SPSite("https://localhost")
         Using site As SPWeb = siteCollection.OpenWeb()

            ' Get a content type.
            Dim ct As SPContentType = site.AvailableContentTypes("Financial Document")

            If ct IsNot Nothing Then

                ' The content type was found.
                Try

                    ' Get a list.
                    Dim list As SPList = site.Lists("Shared Documents")

                    ' Make sure the list accepts content types.
                    list.ContentTypesEnabled = True

                    ' Add the content type to the list.
                    If Not list.IsContentTypeAllowed(ct) Then
                        Console.WriteLine("The {0} content type is not allowed on the {1} list", ct.Name, list.Title)
                    ElseIf list.ContentTypes(ct.Name) IsNot Nothing Then
                        Console.WriteLine("The content type name {0} is already in use on the {1} list", ct.Name, list.Title)
                    Else
                        list.ContentTypes.Add(ct)
                    End If
                Catch ex As ArgumentException

                    ' No list is found.
                    Console.WriteLine("The list does not exist.")
                End Try
            Else

                ' No content type is found.
                Console.WriteLine("The content type is not available in this site.")
            End If
         End Using
      End Using
      Console.Write(vbCrLf + "Press ENTER to continue...")
      Console.ReadLine()
   End Sub
End Module

Siehe auch

Konzepte

Website- und Listeninhaltstypen

Inhaltstypbereich

Inhaltstypdefinitionen