Идентификаторы типов контента

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

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

В этой статье
Идентификатор родительского типа контента + два шестнадцатеричных значения
Идентификатор родительского типа контента + "00" + шестнадцатеричный глобальный уникальный идентификатор
Длина идентификатора типа контента
Работа с идентификаторами типов контента в декларативном XML-коде
Работа с идентификаторами типов контента в коде

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

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

Можно создать допустимый идентификатор типа контента с помощью одного из двух соглашений:

  • Идентификатор родительского типа контента + два шестнадцатеричных значения (этими шестнадцатеричными значениями не может быть "00")

  • Идентификатор родительского типа контента + "00" + шестнадцатеричный глобальный уникальный идентификатор

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

Идентификатор типа контента должен быть уникальным в семействе сайтов.

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

Идентификатор родительского типа контента + два шестнадцатеричных значения

В SharePoint Foundation это соглашение используется, чтобы создавать идентификаторы типов контента для типов контента по умолчанию, которые поставляются с платформой. Например, идентификатором базового типа контента Item (элемент) является 0x01. Это обозначает, что тип контента "Item" является прямым потомком системного типа контента. Идентификатором типа контента "Document" (документ) является 0x0101, а тип контента "Folder" (папка) имеет идентификатор 0x0120. С помощью анализа этих идентификаторов типов контента можно определить, что типы "Document" и "Folder" являются прямыми потомками типа "Item", который, в свою очередь, наследует свойства непосредственно от системного типа контента, как показано на следующем рисунке.

Идентификатор типа контента документа

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

На следующем рисунке показано отношение четырех типов контента, обсуждаемых выше. В каждом типе контента уникальная часть идентификатора представлена синим цветом.

Пример иерархии идентификаторов типов контента по умолчанию

Идентификатор родительского типа контента + "00" + шестнадцатеричный глобальный уникальный идентификатор

В SharePoint Foundation это соглашение о создании идентификаторов типов контента используется в следующих случаях:

  • Создаваемые типы контента сайта основаны на других типах контента

  • Типы контента списка, которые копируются в список при добавлении в этот список типа контента сайта

Например, если имеется тип контента с идентификатором "0x010100D5C2F139516B419D801AC6C18942554D", следует знать, что тип контента был одним из следующих:

  • Тип контента сайта, который является прямым потомком типа контента "Document"

  • Тип контента списка, созданный когда тип контента сайта "Document" был добавлен к списку

Рекомендуется использовать метод глобального уникального идентификатора, чтобы определить любые типы контента, являющиеся прямыми потомками типов контента, которые не создавались пользователем. Используйте метод глобального уникального идентификатора, если родительским типом контента является один из следующих:

  • Тип контента по умолчанию, поставляемый с платформой SharePoint Foundation, такой как "Document".

  • Тип контента, разработанный сторонним производителем. Таким образом можно гарантировать, что идентификатор типа контента является уникальным и не будет продублирован позже разработчиком родительского типа контента.

Однако после уникального определения типа контента с помощью метода глобального уникального идентификатора можно использовать первый метод для определения любого потомка этого типа контента. Глобальный уникальный идентификатор, используемый в типе контента, может действовать как пространство имен для пользовательского типа контента. Любой потомок, созданный на основе этого типа контента, может быть указан только двумя шестнадцатеричными цифрами. Так как максимальная длина идентификатора типа контента ограничена, этот подход максимально увеличивает число разрешенных "поколений" типа контента.

Длина идентификатора типа контента

Идентификаторы типов контента имеют максимальную длину 512 байт. Поскольку два шестнадцатеричных знака могут соответствовать каждому байту, каждый идентификатор типа контента имеет эффективную максимальную длину 1024 знака.

Например, предположим, что создается новый тип контента, myDocument на основе типа контента по умолчанию "Document" платформы SharePoint Foundation. Создание идентификатора типа контента myDocument можно начать с идентификатора типа контента "Document" (0x0101), затем добавить 00 и глобальный уникальный идентификатор. Это уникально определит тип контента myDocument, гарантируя, что SharePoint Foundation не добавит позже другой тип контента по умолчанию с таким же идентификатором (что возможно, если добавить только две шестнадцатеричных цифры). Однако чтобы создать идентификаторы для любых типов контента, производных от myDocument, можно просто добавить две шестнадцатеричных цифры к идентификатору типа контента myDocument. Таким образом будет поддерживаться минимальная длина идентификатора типа контента с одновременным максимальным увеличением числа разрешенных "поколений" типов контента.

Этот сценарий показан на следующем рисунке. Уникальная часть каждого идентификатора типа контента представлена синим шрифтом.

Пример иерархии идентификаторов типов контента

Работа с идентификаторами типов контента в декларативном XML-коде

Новый тип контента сайта можно создать в виде части компонента с помощью декларативного XML-кода в файле манифеста элементов. Для этого в SharePoint Foundation предоставляется определение XML-схемы. Дополнительные сведения см. в разделе Определения типов контента.

Элементом верхнего уровня в определении типа контента является ContentType. У этого элемента есть обязательный атрибут ID, значение которого должно быть строкой в формате идентификатора типа контента. Если идентификатор нового типа контента имеет неправильный формат, при попытке активировать компонент, в котором он определен, будет выведена ошибка. Чтобы этого избежать, следует создавать идентификатор нового типа контента в точном соответствии с правилами из данного раздела.

Идентификатор типа контента, производного от встроенного типа контента, начинается с шестнадцатеричной строки, которая соответствует встроенному типу, после нее идут два нуля, а затем GUID-идентификатор без знаков препинания. Например, шестнадцатеричной строкой, определяющей тип контента "Item", является "0x01". Идентификатор типа контента, производного от "Item", должен выглядеть примерно следующим образом:

0x0100A33D9AD9805788419BDAAC2CCB37509F

Чтобы создать идентификаторы для дополнительных типов контента, наследующих свойства от пользовательского типа контента, просто добавьте "01", "02" и т. д.

СоветСовет

Идентификаторы важных встроенных типов контента перечислены в статье Базовая иерархия типов контента. Кроме того, можно быстро указать ссылку на идентификатор любого типа контента, доступного для сайта, сначала выбрав Параметры сайта в сервера, а затем — Типы контента сайта в разделе Галереи. При наведении указателя мыши на ссылку на тип контента его идентификатор отображается в строке состояния браузера.

В следующем примере показан манифест элементов для компонента, создающего четыре типа контента. Первый новый тип контента, Financial Document, наследуется от типа контента Document. Financial Document, в свою очередь, является родительским типом для новых типов контента Purchase Order и Invoice.

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="https://schemas.microsoft.com/sharepoint/">

  <!-- Parent: Document (0x0101) -->
  <ContentType ID="0x0101000728167cd9c94899925ba69c4af6743e"
               Name="Financial Document"
               Group="Financial Content Types"
               Description="Base financial content type"
               Version="0">
    <FieldRefs>
      <FieldRef ID="{1511BF28-A787-4061-B2E1-71F64CC93FD5}" Name="OrderDate" DisplayName="Date" Required="FALSE"/>
      <FieldRef ID="{060E50AC-E9C1-4D3C-B1F9-DE0BCAC300F6}" Name="Amount" DisplayName="Amount" Required="FALSE"/>
    </FieldRefs>
  </ContentType>

  <!-- Parent: Financial Document (0x0101000728167cd9c94899925ba69c4af6743e) -->
  <ContentType ID="0x0101000728167cd9c94899925ba69c4af6743e01"
               Name="PurchaseOrder"
               Group="Financial Content Types"
               Description="Used for creating purchase orders"
               Inherits="TRUE"
               Version="0">
    <FieldRefs>
      <FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" Name="Title" DisplayName="Item" Required="TRUE" Sealed="TRUE"/>
      <FieldRef ID="{943E7530-5E2B-4C02-8259-CCD93A9ECB18}" Name="CostCenter" DisplayName="Department" Required="TRUE"/>
    </FieldRefs>
    <DocumentTemplate TargetName="PurchaseOrder.docx"/>
  </ContentType>

  <!-- Parent: Financial Document (0x0101000728167cd9c94899925ba69c4af6743e) -->
  <ContentType ID="0x0101000728167cd9c94899925ba69c4af6743e02"
                Name="Invoice"
                Group="Financial Content Types"
                Description="Used for creating customer invoices"
                Inherits="TRUE"
                Version="0">
    <FieldRefs>
      <FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" Name="Title" DisplayName="Service" Required="TRUE" Sealed="TRUE"/>
      <FieldRef ID="{86811853-7E52-4515-A88D-A8FA9D450905}" Name="Client" DisplayName="Client Name" Required="TRUE"/>
    </FieldRefs>
    <DocumentTemplate TargetName="Invoice.docx" />
  </ContentType>
</Elements>

Работа с идентификаторами типов контента в коде

Значение, которое возвращается свойством Id объекта SPContentType в серверном коде или тем же свойством объекта ContentType в клиентском коде, не является шестнадцатеричной строкой. Это объект типа SPContentTypeId в серверном коде и типа ContentTypeId на клиенте.

Если известна шестнадцатеричная строка для идентификатора типа контента, можно получить соответствующий объект, передав строку конструктору для соответствующего класса. Например, следующий серверный код создает объект SPContentTypeId, который представляет идентификатор для типа контента Document.

using (SPSite site = new SPSite(https://localhost))
{
   using (SPWeb web = site.OpenWeb())
   {
      // Get the Document content type.
      SPContentTypeId documentCTypeId = new SPContentTypeId("0x0101");
      SPContentType documentCType = web.AvailableContentTypes[documentCTypeId];

      // Do something.
      ...
   }
}

Знать шестнадцатеричный идентификатор для типов контента, включенных в SharePoint Foundation, не требуется. Вместо этого можно использовать поля класса SPBuiltInContentTypeId. Например, когда в коде необходимо представить идентификатор для типа контента Document, можно использовать SPBuiltInContentTypeId.Document вместо "0x0101". Это демонстрируется в следующем коде.

using (SPSite site = new SPSite(https://localhost))
{
   using (SPWeb web = site.OpenWeb())
   {
      // Get the Document content type.
      SPContentType documentCType = web.AvailableContentTypes[SPBuiltinContentTypeId.Document];

      // Do something.
      ...
   }
}

При создании собственного типа контента в коде необязательно создавать для него идентификатор. Это может сделать система на основании идентификатора типа контента, от которого наследуется этот тип.

Например, в следующем консольном приложении создается новый тип контента Customer, который наследуется от типа Item. Приложение делает новый тип контента типом контента сайта, добавляя его в коллекцию типов контента сайта. Затем оно применяет тип контента к списку, добавляя его в коллекцию типов контента списка. Наконец, приложение выводит идентификаторы для всех трех типов контента: родительского, нового типа контента сайта и нового типа контента списка.

using System;
using Microsoft.SharePoint;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite site = new SPSite("https://localhost"))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    // Get a reference to the Item content type.
                    SPContentType parentCType = web.AvailableContentTypes[SPBuiltInContentTypeId.Item];

                    // Create a Customer content type derived from the Item content type.
                    SPContentType childCType = new SPContentType(parentCType, web.ContentTypes, "Customer");

                    // Add the new content type to the site collection.
                    childCType = web.ContentTypes.Add(childCType);

                    // Add it to a list.
                    SPList list = web.Lists["Announcements"];
                    list.ContentTypesEnabled = true;
                    SPContentType listCType = list.ContentTypes.Add(childCType);

                    // Print the IDs.
                    Console.WriteLine("Parent content type ID: {0}", parentCType.Id.ToString());
                    Console.WriteLine("Site content type ID:   {0}", childCType.Id.ToString());
                    Console.WriteLine("List content type ID:   {0}", listCType.Id.ToString());
                }
            }

            Console.Write("\nPress ENTER to continue...");
            Console.ReadLine();
        }
    }
}

Следующие данные выводятся на консоль.

Parent content type ID: 0x01
Site content type ID:   0x0100A33D9AD9805788419BDAAC2CCB37509F
List content type ID:   0x0100A33D9AD9805788419BDAAC2CCB37509F006454F8883E8BA648A632E5ACB47CAD9B

Press ENTER to continue...

См. также

Ссылка

SPContentTypeId

SPBuiltInContentTypeId

Концепции

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

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

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