Поделиться через


Удаление типов контента

Дата последнего изменения: 1 ноября 2010 г.

Применимо к: SharePoint Foundation 2010

Доступно на сайте SharePoint Online

Удалить тип контента невозможно, если он используется в качестве основы для другого сайта или типов контента списков. Необходимо сначала удалить этот тип контента из всех списков, в которых он используется, а также удалить все типы контента дочерних сайтов, основанные на нем.

Невозможно удалить тип контента из списка, если этот список содержит элементы данного типа. Однако Microsoft SharePoint Foundation не учитывает элементы, находящиеся в корзине. Если элемент восстановить из корзины после того, как его тип контента был удален из списка, то ему будет назначен тип контента по умолчанию для этого списка.

Использование объектной модели для удаления типа контента

Чтобы удалить тип контента из коллекции типов контента в списке или библиотеке документов, необходимо сначала получить доступ к коллекции в свойстве ContentTypes объекта SPList (сервер) или объекта List (клиент). Затем необходимо вызвать метод Delete, передав структуру SPContentTypeId (на сервере) или ContentTypeId (на клиенте), определяющую тип контента, который требуется удалить.

Чтобы удалить тип контента из коллекции, выполните доступ к коллекции в свойстве ContentTypes объекта SPWeb (на сервере) или объекта Web (на клиенте). Затем вызовите метод Delete.

Предупреждающая заметкаВнимание!

В обоих объектах SPWeb (на сервере) и Web (на клиенте) есть свойство AvailableContentTypes, которое возвращает коллекцию типов контента. Эта коллекция доступна только для чтения. Из нее нельзя удалить объекты из-за того, что она содержит все типы контента, доступные на текущем сайте, а не только типы контента, определенные на текущем сайте.

В обоих случаях следует иметь в виду, что используемый тип контента удалить нельзя. При попытке удалить тип контента из списка сначала следует убедиться, что ни один элемент списка не использует этот тип контента. Это можно сделать, обойдя в цикле все элементы списка и выполнив поиск значения свойства ContentType каждого элемента. При попытке удалить тип контента из семейства веб-сайтов, в котором он определен, следует убедиться, что метод GetUsages возвращает пустой список, т. е. тип контента, не используемый в каком-либо списке и не являющийся родителем какого-либо дочернего типа контента.

Пример

В приведенном ниже примере показано консольное приложение, которое проверяет, используется ли устаревший тип контента на текущем веб-сайте или каком-либо дочернем сайте. Если тип контента не используется, приложение удаляет его.

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

См. также

Ссылка

SPContentTypeUsage

Концепции

Введение в типы контента

Создание типов контента

Обновление дочерних типов контента