Добавление типа контента в список

Дата последнего изменения: 27 мая 2011 г.

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

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

Можно ссылаться на типы контента в XML-коде для определения списка, чтобы при каждом создании пользователем списка этого типа службы Microsoft SharePoint Foundation 2010 включали тип контента в список по умолчанию. Также типы контента можно добавить в существующий список, написав код, в котором используется объектная модель SharePoint Foundation.

Определение типов контента в определении списка

Перед тем, как добавить тип контента в определение списка, следует убедиться, что этот список поддерживает типы контента. Сначала необходимо проверить шаблон, на основе которого был создан экземпляр списка. Если в элементе ListTemplate есть атрибут с именем DisallowContentTypes и его значение равно TRUE, список не поддерживает типы контента. Если значение атрибута равно FALSE или он отсутствует, список поддерживает типы контента.

Затем необходимо проверить, включены ли типы контента в экземпляре списка. В файле Schema.xml, который определяет экземпляр списка, содержится элемент List. Он должен содержать атрибут EnableContentTypes, значение которого должно быть равно TRUE. Установка значения TRUE эквивалентна выбору ответа Да для вопроса Разрешить управление типами контента? в разделе Дополнительные параметры области Параметры списка.

Чтобы добавить тип контента в определение списка, добавьте элемент ContentTypes в схему списка. Элемент ContentTypes содержит коллекцию элементов ContentTypeRef. Каждый элемент ContentTypeRef определяет тип контента сайта, который SharePoint Foundation должен быть локально скопирован в список как тип контента списка при каждом создании пользователем нового списка определенного типа. Элемент ContentTypeRef содержит один атрибут, ID, который задает идентификатор типа контента.

Тип контента сайта, на который указывает ссылка, должен быть в области для списка — он должен быть объявлен на том же уровне иерархии сайта или выше. Дополнительные сведения об области типа контента см. в статье Область определения типа контента.

ПримечаниеПримечание

Если службы SharePoint Foundation создают экземпляр списка, они включает только те столбцы, которые объявлены в схеме базового типа списка или в схеме списка. Если ссылка указывает на тип контента сайта в схеме списка, и этот тип контента ссылается на столбцы сайта, которые не включены в схему базового типа списка или в схему списка, то эти столбцы не добавляются в список. Эти столбцы также следует объявить в схеме списка, чтобы службы SharePoint Foundation могли включить их в список.

Дополнительные сведения о столбцах сайта см. в разделе Введение в столбцы.

Чтобы добавить тип контента в определение списка:

  1. В XML-определении списка добавьте элемент ContentTypeRef в элемент ContentTypes.

  2. Присвойте атрибуту ID элемента ContentTypeRef идентификатор типа контента, который необходимо включить в список.

В следующем примере показана частичная разметка для схемы определения списка, которая включает элемент ContentTypeRef.

<List xmlns:ows="Microsoft SharePoint" Title="The List" Direction="$Resources:Direction;" FolderCreation="FALSE" Url="Lists/TheList" BaseType="0" xmlns="https://schemas.microsoft.com/sharepoint/">
  <MetaData>
    <ContentTypes>
      <ContentTypeRef ID="0x01060062efcfca3f4d4036a0c54ed20108fa2e" />
    </ContentTypes>
    ...
  </MetaData>
</List>

Дополнительные сведения об элементе ContentTypes в схеме определения списка см. в статье Элемент ContentTypes (List).

Добавление типов контента в существующий список

Можно использовать объектную модель SharePoint Foundation для добавления типов контента в существующий список.

Добавление типа контента в список

  1. Используйте свойство Lists для получения коллекции списков для сайта, на котором размещен список.

  2. Объявите переменную типа SPList и присвойте ей объект в коллекции списков сайта, которая представляет этот список.

  3. Включите типы контента для списка, задав для свойства ContentTypesEnabled списка значение true.

  4. Используйте свойство AvailableContentTypes для доступа к типам контента, доступным для сайта, на котором расположен список. Этот метод возвращает объект SPContentTypeCollection.

  5. Объявите переменную типа SPContentType и задайте ей значение объекта SPContentType в коллекции, представляющей тип контента сайта, который требуется добавить к списку.

  6. Убедитесь, что список может принимать выбранный тип контента, вызвав метод IsContentTypeAllowed(SPContentType).

  7. Используйте свойство ContentTypes для доступа к коллекции типов контента списка в указанном списке. Этот метод возвращает объект SPContentTypeCollection.

  8. Используйте метод Add, чтобы добавить объект SPContentType в коллекцию типов контента списка.

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

Пример

Следующий пример — это консольное приложение, которое добавляет тип контента сайта в список Общие документы на сайте. Тип контента, используемый в этом примере, — тот же тип контента, что был создан в примере в статье Практическое руководство. Добавление типа контента на сайт.

Консольные приложения полезны для экспериментов в среде разработки. В рабочей среде код для этого примера будет скорее всего включен как часть метода FeatureActivated объекта SPFeatureReceiver.

using System;
using Microsoft.SharePoint;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite siteCollection = new SPSite("https://localhost"))
            {
                using (SPWeb site = siteCollection.OpenWeb())
                {

                    // Get a content type.
                    SPContentType ct = site.AvailableContentTypes["Financial Document"];

                    // The content type was found.
                    if (ct != null) 
                    {

                        // Get a list.
                        try 
                        {
                            SPList list = site.Lists["Shared Documents"]; // Throws exception if does not exist.

                            // Make sure the list accepts content types.
                            list.ContentTypesEnabled = true;

                            // Add the content type to the list.
                            if (!list.IsContentTypeAllowed(ct))
                                Console.WriteLine("The {0} content type is not allowed on the {1} list",
                                                   ct.Name, list.Title);
                            else if (list.ContentTypes[ct.Name] != null)
                                Console.WriteLine("The content type name {0} is already in use on the {1} list",
                                                   ct.Name, list.Title);
                            else
                                list.ContentTypes.Add(ct);
                        }
                        catch (ArgumentException ex) // No list is found.
                        {
                            Console.WriteLine("The list does not exist.");
                        }
                    }
                    else // No content type is found.
                    {
                        Console.WriteLine("The content type is not available in this site.");
                    }
                }
            }
            Console.Write("\nPress ENTER to continue...");
            Console.ReadLine();
        }
    }
}
Imports System
Imports Microsoft.SharePoint

Module Test
   Sub Main()
      Using siteCollection As SPSite = New SPSite("https://localhost")
         Using site As SPWeb = siteCollection.OpenWeb()

            ' Get a content type.
            Dim ct As SPContentType = site.AvailableContentTypes("Financial Document")

            If ct IsNot Nothing Then

                ' The content type was found.
                Try

                    ' Get a list.
                    Dim list As SPList = site.Lists("Shared Documents")

                    ' Make sure the list accepts content types.
                    list.ContentTypesEnabled = True

                    ' Add the content type to the list.
                    If Not list.IsContentTypeAllowed(ct) Then
                        Console.WriteLine("The {0} content type is not allowed on the {1} list", ct.Name, list.Title)
                    ElseIf list.ContentTypes(ct.Name) IsNot Nothing Then
                        Console.WriteLine("The content type name {0} is already in use on the {1} list", ct.Name, list.Title)
                    Else
                        list.ContentTypes.Add(ct)
                    End If
                Catch ex As ArgumentException

                    ' No list is found.
                    Console.WriteLine("The list does not exist.")
                End Try
            Else

                ' No content type is found.
                Console.WriteLine("The content type is not available in this site.")
            End If
         End Using
      End Using
      Console.Write(vbCrLf + "Press ENTER to continue...")
      Console.ReadLine()
   End Sub
End Module

См. также

Концепции

Типы контента сайта и списка

Область определения типа контента

Определения типов контента