Suppression de types de contenu

Dernière modification : lundi 1 novembre 2010

S’applique à : SharePoint Foundation 2010

Disponible dans SharePoint Online

Vous ne pouvez pas supprimer un type de contenu de site s'il est utilisé en tant que base pour d'autres types de contenu de site ou de liste. Vous devez tout d'abord supprimer ce type de contenu de toutes les listes qui l'utilisent, puis supprimer tous les types de contenu de site enfants basés sur celui-ci.

Vous ne pouvez pas supprimer un type de contenu d’une liste qui comporte des éléments provenant de ce type de contenu. Toutefois, Microsoft SharePoint Foundation ne tient pas compte des éléments présents dans la Corbeille. Si ces éléments sont restaurés une fois que leur type de contenu est supprimé de la liste, ils reçoivent le type de contenu par défaut correspondant à cette liste.

Utilisation du modèle objet pour supprimer un type de contenu

Pour supprimer un type de contenu de la collection de types de contenu sur une liste ou sur une bibliothèque de documents, accédez d’abord à la collection dans la propriété ContentTypes de l’objet SPList (serveur) ou de l’objet List (client). Ensuite, appelez la méthode Delete, en transmettant une structure SPContentTypeId (serveur) ou la structure ContentTypeId (client) qui identifie le type de contenu à supprimer.

Pour supprimer un type de contenu d’une collection de sites, accédez à la collection dans la propriété ContentTypes de l’objet SPWeb (serveur) ou de l’objet Web (client). Ensuite, appelez la méthode Delete.

Note AttentionAttention

L’objet SPWeb (serveur) et l’objet Web (client) possèdent tous les deux une propriété AvailableContentTypes qui retourne une collection de types de contenu. Cette collection est accessible en lecture seule. Vous ne pouvez pas supprimer des objets de celle-ci. En effet, la collection contient tous les types de contenu qui sont disponibles dans le site actuel, pas seulement ceux qui sont définis dans celui-ci.

Dans les deux cas, vous devez garder à l’esprit que vous ne pouvez pas supprimer un type de contenu en cours d’utilisation. Avant de supprimer un type de contenu d’une liste, vous devez vous assurer qu’aucun élément de liste n’utilise ce type de contenu. Pour ce faire, vous pouvez passer en revue les éléments de la liste et observer la valeur de la propriété ContentType de chaque élément. Si vous essayez de supprimer un type de contenu de la collection de sites dans laquelle il est défini, vous devez vous assurer que la méthode GetUsages retourne une liste vide, c’est-à-dire, que le type de contenu n’est utilisé sur aucune liste et qu’il n’est le parent d’aucun type de contenu enfant.

Exemple

L’exemple suivant montre une application console qui vérifie si un type de contenu obsolète est en cours d’utilisation dans le site Web actuel ou dans des sites enfants. Si le type de contenu n’est pas en cours d’utilisation, l’application le supprime.

using System;
using System.Collections.Generic;
using Microsoft.SharePoint;

namespace Test
{
   class ConsoleApp
   {
      static void Main(string[] args)
      {
         using (SPSite siteCollection = new SPSite("https://localhost"))
         {
            using (SPWeb webSite = siteCollection.OpenWeb())
            {
               // Get the obsolete content type.
               SPContentType obsolete = webSite.ContentTypes["Test"];

               // We have a content type.
               if (obsolete != null) 
               {
                  IList<SPContentTypeUsage> usages = SPContentTypeUsage.GetUsages(obsolete);

                  // It is in use.
                  if (usages.Count > 0) 
                  {
                     Console.WriteLine("The content type is in use in the following locations:");
                     foreach (SPContentTypeUsage usage in usages)
                        Console.WriteLine(usage.Url);
                  }

                  // The content type is not in use.
                  else 
                  {

                     // Delete it.
                     Console.WriteLine("Deleting content type {0}...", obsolete.Name);
                     webSite.ContentTypes.Delete(obsolete.Id);
                  }
               }

               // No content type found.
               else 
               {
                  Console.WriteLine("The content type does not exist in this site collection.");
               }
            }
         }
         Console.Write("\nPress ENTER to continue...");
         Console.ReadLine();
      }
   }
}
Imports System
Imports System.Collections.Generic
Imports Microsoft.SharePoint

Module ConsoleApp

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

            ' Get the obsolete content type.
            Dim obsolete As SPContentType = webSite.ContentTypes("Test")

            ' We have a content type
            If obsolete IsNot Nothing Then 
               Dim usages As IList(Of SPContentTypeUsage) = SPContentTypeUsage.GetUsages(obsolete)
               If usages.Count > 0 Then ' It is in use

                  Console.WriteLine("The content type is in use in the following locations:")
                  For Each usage As SPContentTypeUsage In usages
                     Console.WriteLine(usage.Url)
                  Next usage

               ' It is not in use.
               Else 

                  ' Delete it.
                  Console.WriteLine("Deleting content type {0}...", obsolete.Name)
                  webSite.ContentTypes.Delete(obsolete.Id)
               End If

            ' No content type found.
            Else 
               Console.WriteLine("The content type does not exist in this site collection.")
            End If

         End Using
      End Using
      Console.Write(vbCrLf + "Press ENTER to continue...")
      Console.ReadLine()
   End Sub

End Module

Voir aussi

Référence

SPContentTypeUsage

Concepts

Introduction aux types de contenu

Création de types de contenu

Mise à jour de types de contenu enfants