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