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


Стандартный блок: типы контента

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

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

В этой статье
Объектная модель для типов контента
XML-код для типов контента
Области, связанные с типами контента
Дополнительные сведения о типах контента

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

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

Основное преимущество, предоставляемое типами контента, состоит в том, что они позволяют управлять базовой схемой для конкретной категории сведений централизованным и типовым способом. Типы контента определяются на уровне сайта независимо от каких-либо списков или библиотек документов на сайте. Один тип контента можно использовать во многих разных списках или библиотеках документов на сайте, а в некоторых случаях тип контента можно использовать в списках и библиотеках во всем семействе веб-сайтов. И наоборот, можно использовать несколько разных типов контента в одном списке или библиотеке документов. Если список или библиотека документов поддерживает несколько типов контента, каждый тип отображается в меню кнопки Создать и каждый тип может иметь уникальный набор столбцов, рабочих процессов и реакций на события.

Доступность типа контента называется областью действия. Область действия типа контента всегда включает сайт, на котором определен тип контента, а также все дочерние сайты этого сайта. Например, предположим, существует иерархия сайтов, в которой родительский сайт с именем "Европа" имеет дочерние сайты с именами "Италия", "Франция" и "Германия". Новые типы контента, добавленные к родительскому сайту "Европа", могут применяться к спискам и библиотекам документов на сайтах "Европа", "Италия", "Франция" и "Германия". Поскольку область действия распространяется вниз по иерархии сайтов, добавление типа контента к корневому сайту семейства веб-сайтов делает этот тип доступным для списков и библиотек во всем семействе.

Типы контента определяются на базе принципов наследования. Тип контента никогда не создается с нуля. Напротив, для этого выбирается существующий тип контента, на основании которого создается новый тип. Когда на базе существующего типа контента создается новый, он наследует метаданные, рабочие процессы и реакции на события от родительского типа контента. Это позволяет определять базовые типы контента так же, как определяются базовые классы. Например, можно определить тип контента "Финансовый документ" с характеристиками, общими для всех финансовых документов в организации. Затем "Финансовый документ" можно использовать в качестве базы для двух новых типов контента: "Счет-фактура" и "Заказ на покупку". Новые типы контента унаследуют метаданные и реакции на события у "Финансового документа", поэтому общие элементы потребуется определить только один раз в родительском типе.

Эту схему можно увидеть в действии, если обратиться к галерее Типы контента сайта в Параметрах сайта. Исходный базовый тип контента, который можно применить к списку, называется "Элемент". Типы контента "Объявление", "Контакт", "Задача" и многие другие наследуют от "Элемента". Аналогично, исходный базовый тип контента, который можно применить к библиотеке документов, называется "Документ". Типы контента "Изображение", "Форма" и "Вики-страница" наследуют от "Документа".

Обратите внимание, что при создании нового типа контента необходимо решить, будет ли он использоваться для списков или для библиотек документов. К библиотеке документов могут применяться только типы контента, наследующие от типа "Документ". А к списку могут применяться только типы контента, наследующие от типа "Элемент", но не "Документ".

Одним важным исключением из принципов наследования является то, что изменения в родительских типах контента не распространяются на производные типы автоматически. Распространение изменений напоминает распространение разрешений безопасности вниз по иерархии файловой системы в NTFS. Дополнительные сведения см. в разделе Обновление дочерних типов контента.

Объектная модель для типов контента

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

Поиск типов контента

Выяснить, какие типы контента можно использовать в заданной области действия, можно, обратившись к свойству AvailableContentTypes объекта SPWeb (сервер) или объекта Web (клиент). Оба свойства возвращают коллекцию только для чтения из объектов SPContentType (сервер) или ContentType (клиент). Коллекция является перечисляемой и содержит несколько индексаторов, включая имя типа контента.

Выяснить, какие типы контента были применены к списку или библиотеке документов, можно, обратившись к свойству ContentTypes объекта SPList в серверном коде или к тому же свойству объекта List в клиентском коде. Это свойство возвращает перечислимую, индексированную коллекцию, но в этом случае коллекция является изменяемой.

Необходимо помнить, что когда тип контента сайта применяется к списку или библиотеке документов, фактически добавляется не сам тип контента сайта, а его копия. Более того, копия типа контента для списка имеет другой идентификатор типа контента. Он является производным от идентификатора для типа контента сайта, но отличается от него. Это означает, что, возможно, не удастся извлечь необходимый тип контента с помощью идентификатора типа контента в качестве индекса для коллекции. Вместо этого нужно использовать метод коллекции BestMatch. Дополнительные сведения см. в разделах Типы контента сайта и списка и Идентификаторы типов контента.

Узнать, используется ли тип контента сайта для списка или в качестве родительского типа для другого типа контента сайта, можно с помощью статического метода GetUsages(SPContentType), являющегося членом класса SPContentTypeUsage.

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

Можно создать и развернуть пользовательский тип контента в виде части компонента. Дополнительные сведения о компонентах см. в разделе Базовые элементы разработки: компоненты.

Разместите код, создающий новый тип контента, в методе FeatureActivated(SPFeatureReceiverProperties) объекта SPFeatureReceiver. Если в этом типе контента используются новые столбцы сайта, сначала необходимо создать и инициализировать столбцы и только потом ссылаться на них в типе контента. Дополнительные сведения о столбцах см. в разделе Базовый элемент разработки: типы столбцов и полей.

Для создания объекта типа контента нужно вызвать один из конструкторов класса SPContentType. Параметром обоих конструкторов является объект SPContentTypeCollection. Это объект, возвращаемый в свойстве ContentTypes объекта SPWeb для сайта, где будет создан тип контента. Хотя в конструкторе указывается коллекция типов контента сайта, конструктор не добавляет тип в коллекцию. Это делается в отдельном вызове метода Add этой же коллекции.

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

Чтобы применить тип контента к списку или библиотеке документов, сначала необходимо присвоить свойству списка AllowContentTypes значение true и затем вызвать метод коллекции Add, возвращаемой в свойстве ContentTypes объекта SPList (сервер) или List (клиент).

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

Чтобы удалить тип контента из списка или библиотеки документов, можно вызвать метод Delete, передав в качестве параметра структуру SPContentTypeId (сервер) или ContentTypeId (клиент), которая определяет удаляемый тип контента. Однако нельзя удалить используемый тип контента. При удалении типа контента из списка сначала необходимо убедиться, что никакие элементы списка не используют этот тип. Один из способов сделать это — выполнить перебор всех элементов списка и у каждого из них проверить значение свойства ContentType. При удалении типа контента из семейства веб-сайтов, где он определен, необходимо убедиться, что метод GetUsages возвращает пустой список, то есть что этот тип контента не используется ни в каком списке и не является родительским для какого-либо дочернего типа контента.

Обновление типов контента

SharePoint Foundation предоставляет механизм управления изменениями в типах контента с помощью свойства ReadOnly и свойств Sealed объектов SPContentType (сервер) и ContentType (клиент), которые представляют типы контента. Перед изменением типа контента необходимо проверить параметры этих свойств. Дополнительные сведения см. в разделе Управление изменениями типов контента.

Поместите код, удаляющий тип контента, в методе FeatureActivated(SPFeatureReceiverProperties) объекта SPFeatureReceiver. Когда код закончит изменение объекта, представляющего тип контента, необходимо зафиксировать изменения в базе данных, вызвав одно из переопределений метода Update() объекта. Также можно распространить изменения вниз для производных типов контента. Дополнительные сведения см. в разделе Обновление дочерних типов контента.

XML-код для типов контента

Определить тип контента можно с помощью XML-кода в компоненте. Сведения о схеме, используемой для определений типов контента, см. в разделе Определения типов контента. При инициализации списка можно добавить в него существующий тип контента. Сведения о разделе типов контента в схеме списка см. в разделе Элемент ContentTypes (List).

Простой пример использования XML-кода с типами контента см. в статье Пошаговое руководство. Создание пользовательского поля, типа контента, определения списка и экземпляра списка.

Области, связанные с типами контента

Базовый элемент разработки: веб-сайты и семейства сайтов

Базовый элемент разработки: типы столбцов и полей

Стандартный блок: рабочие процессы

Базовые элементы разработки: компоненты

Дополнительные сведения о типах контента

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

Базовая иерархия типов контента

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

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

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