Procédure : ajouter un type de contenu à une liste

Dernière modification : vendredi 27 mai 2011

S’applique à : SharePoint Foundation 2010

Disponible dans SharePoint Online

Vous pouvez référencer les types de contenu dans le XML pour une définition de liste, de sorte que chaque fois qu’un utilisateur crée une liste de ce type, Microsoft SharePoint Foundation 2010 inclut le type de contenu dans la liste par défaut. Vous pouvez également ajouter des types de contenu à une liste existante en écrivant de code qui utilise le modèle objet SharePoint Foundation.

Spécification des types de contenu dans une définition de liste

Avant d’ajouter un type de contenu à une définition de liste, vous devez vous assurer que la liste est configurée de manière à prendre en charge les types de contenu. Le premier point à vérifier est le modèle à partir duquel l’instance de liste est créée. Si l’élément ListTemplate possède un attribut nommé DisallowContentTypes et que l’attribut est défini sur TRUE, la liste ne prend pas en charge les types de contenu. Par contre, si l’attribut est défini sur FALSE ou qu’il est manquant, la liste prend en charge les types de contenu.

Vous devez ensuite vérifier si les types de contenu sont activés sur l’instance de liste. Le fichier Schema.xml qui définit l’instance de liste possède un élément List. Cet élément doit comprendre un attribut nommé EnableContentTypes, qui doit être défini sur TRUE. Définir l’attribut sur TRUE équivaut à sélectionner Oui sous Autoriser la gestion des types de contenu ? dans la section Paramètres avancés de Paramètres de la liste.

Pour ajouter un type de contenu à une définition de liste, vous devez ajouter un élément ContentTypes au schéma de la liste. L’élément ContentTypes contient une collection d’éléments ContentTypeRef. Chaque élément ContentTypeRef spécifie un type de contenu de site que SharePoint Foundation doit copier localement dans la liste, en tant que type de contenu de liste, chaque fois qu’un utilisateur crée une nouvelle liste du type spécifié. L’élément ContentTypeRef contient un seul attribut, ID, que vous définissez en fonction de l’ID du type de contenu.

Le type de contenu de site que vous référencez doit être dans la portée de la liste (c’est-à-dire qu’il doit être déclaré au même niveau ou à un niveau plus élevé dans la hiérarchie du site). Pour plus d’informations sur la portée du type de contenu, voir Étendue du type de contenu.

Notes

Lorsque SharePoint Foundation crée une instance de liste, il inclut uniquement les colonnes qui sont déclarées dans le schéma du type de base de la liste ou dans le schéma de la liste. Si vous faites référence à un type de contenu de site dans le schéma de la liste, et si ce type de contenu fait référence à des colonnes de site non incluses dans le schéma du type de base de la liste ou dans le schéma de la liste, ces colonnes ne sont pas incluses. Vous devez déclarer ces colonnes dans le schéma de la liste afin que SharePoint Foundation les inclue dans la liste.

Pour plus d'informations sur les colonnes de site, voir Présentation des colonnes.

Pour ajouter un type de contenu à une définition de liste

  1. Dans le code XML de la définition de liste, ajoutez un élément ContentTypeRef à l’élément ContentTypes.

  2. Définissez l’attribut ID de l’élément ContentTypeRef en fonction de l’ID du type de contenu à inclure dans la liste.

L’exemple suivant montre le marquage partiel d’un schéma de définition de liste qui comprend un élément ContentTypeRef.

<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>

Pour plus d’informations sur l’élément ContentTypes dans le schéma de définition de liste, voir ContentTypes, élément (List).

Ajout de types de contenu à une liste existante

Vous pouvez utiliser le modèle objet SharePoint Foundation pour ajouter des types de contenu à une liste existante.

Pour ajouter un type de contenu à une liste

  1. Utilisez la propriété Lists pour obtenir une collection de listes pour le site sur lequel se trouve la liste.

  2. Déclarez une variable de type SPList et assignez-lui une valeur égale à celle de l’objet qui représente la liste dans la collection de listes de site.

  3. Activez les types de contenu pour la liste en définissant la valeur de la propriété ContentTypesEnabled de la liste sur true.

  4. Utilisez la propriété AvailableContentTypes afin d’accéder aux types de contenu disponibles pour le site où se trouve la liste. Cette méthode renvoie un objet SPContentTypeCollection.

  5. Déclarez une variable de type SPContentType, et assignez-lui une valeur égale à celle de l’objet SPContentType dans la collection qui représente le type de contenu de site à ajouter à la liste.

  6. Pour vérifier que la liste peut accepter le type de contenu que vous avez sélectionné, appelez la méthode IsContentTypeAllowed(SPContentType).

  7. Utilisez la propriété ContentTypes pour accéder à la collection des types de contenu de liste correspondant à la liste spécifiée. Cette méthode renvoie un objet SPContentTypeCollection.

  8. Utilisez la méthode Add pour ajouter l'objet SPContentType à la collection des types de contenu de liste.

Lorsque vous ajoutez un type de contenu de site à une liste à l’aide du modèle objet, SharePoint Foundation ajoute automatiquement les colonnes que le type de contenu comporte et qui ne figurent pas déjà dans la liste. Ceci diffère du référencement de types de contenu dans un schéma de liste ; dans ce cas, vous devez explicitement ajouter les colonnes au schéma de la liste afin que SharePoint Foundation puisse les inclure dans des instances de liste.

Exemple

L’exemple suivant est une application console qui ajoute un type de contenu de site à la liste Documents partagés dans un site. Le type de contenu utilisé dans cet exemple est le même que celui créé par l’exemple fourni dans Procédure : ajouter un type de contenu à un site.

Les applications console se prêtent aux expérimentations dans un environnement de développement. Dans un environnement de production, le code de cet exemple aurait plus probablement sa place en tant que composante de la méthode FeatureActivated d’un objet SPFeatureReceiver.

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

Voir aussi

Concepts

Types de contenu de liste et de site

Étendue du type de contenu

Définitions de type de contenu