Löschen von Inhaltstypen
Letzte Änderung: Montag, 1. November 2010
Gilt für: SharePoint Foundation 2010
Verfügbar in SharePoint Online
Sie können einen Websiteinhaltstyp nicht löschen, wenn andere Website- oder Listeninhaltstypen auf ihm basieren. Sie sollten den Inhaltstyp zunächst aus allen Listen entfernen, die diesen Inhaltstyp verwenden, und alle untergeordneten Websiteinhaltstypen löschen, die auf dem Inhaltstyp basieren.
Sie können einen Inhaltstyp nicht aus einer Liste löschen, wenn die Liste Elemente des entsprechenden Inhaltstyps enthält. Dabei werden von Microsoft SharePoint Foundation jedoch Elemente im Papierkorb nicht berücksichtigt. Wenn diese Elemente wiederhergestellt werden, nachdem ihr Inhaltstyp aus der Liste gelöscht wurde, wird den Elementen der standardmäßige Inhaltstyp für diese Liste zugewiesen.
Verwenden des Objektmodells zum Löschen eines Inhaltstyps
Sie sollten zunächst auf die Auflistung in der ContentTypes-Eigenschaft des SPList-Objekts (Server) oder des List-Objekts (Client) zugreifen, um einen Inhaltstyp aus der Auflistung der Inhaltstypen einer Liste oder Dokumentbibliothek zu entfernen. Rufen Sie dann die Delete-Methode auf, und geben Sie dabei eine SPContentTypeId-Struktur (Server) oder eine ContentTypeId-Struktur (Client) weiter, durch die der Inhaltstyp identifiziert werden kann, den Sie löschen möchten.
Sie können einen Inhaltstyp aus einer Websitesammlung entfernen, indem Sie auf die Sammlung in der ContentTypes-Eigenschaft des SPWeb-Objekts (Server) oder des Web-Objekts (Client) zugreifen. Rufen Sie dann die Delete-Methode auf.
![]() |
---|
Sowohl das SPWeb-Objekt (Server) als auch das Web-Objekt (Client) verfügen über eine AvailableContentTypes-Eigenschaft, durch die eine Inhaltstypauflistung zurückgegeben wird. Diese Auflistung ist schreibgeschützt. Sie können keine Objekte aus der Auflistung löschen. Das liegt daran, dass die Auflistung alle Inhaltstypen enthält, die in der aktuellen Website verfügbar sind, und nicht nur die Inhaltstypen, die für die aktuelle Website definiert sind. |
In beiden Fällen sollten Sie daran denken, dass Sie einen Inhaltstyp, der gerade verwendet wird, nicht löschen können. Wenn Sie einen Inhaltstyp aus einer Liste entfernen möchten, sollten Sie zunächst sicherstellen, dass der Inhaltstyp aktuell nicht von einem Listenelement verwendet wird. Eine Möglichkeit dies zu prüfen besteht darin, die Elemente in einer Liste zu durchlaufen und den Wert der ContentType-Eigenschaft jedes Elements anzuschauen. Wenn Sie einen Inhaltstyp aus der Websitesammlung entfernen möchten, in der er definiert ist, sollten Sie sicher sein, dass die GetUsages-Methode eine leere Liste zurückgibt, d. h. dass der Inhaltstyp in keiner der Listen verwendet wird und dass er nicht als übergeordneter Inhaltstyp eines untergeordneten Inhaltstyps fungiert.
Beispiel
Im folgenden Beispiel wird eine Konsolenanwendung gezeigt, mit der geprüft werden kann, ob in der aktuellen Website oder in den untergeordneten Websites ein überflüssiger Inhaltstyp verwendet wird. Wenn der Inhaltstyp nicht verwendet wird, wird er von der Anwendung gelöscht.
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