Удаление типов контента
Дата последнего изменения: 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