Freigeben über


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.

VorsichtVorsicht

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

Siehe auch

Referenz

SPContentTypeUsage

Konzepte

Einführung zu Inhaltstypen

Erstellen von Inhaltstypen

Aktualisieren untergeordneter Inhaltstypen