Expand
Content Type IDs

Published: May 2010

Content type IDs uniquely identify the content type and are designed to be recursive. The content type ID encapsulates that content type's lineage, or the line of parent content types from which the content type inherits. Each content type ID contains the ID of the parent content type, which in turn contains the ID of that content type's parent, and so on, ultimately back to and including the System content type ID.

SharePoint Foundation uses this information to determine the relationship between content types and for push-down operations.

You can construct a valid content type ID using one of two convention:

  • Parent content type ID + two hexadecimal values (the two hexadecimal values cannot be "00")

  • Parent content type ID + "00" + hexadecimal GUID

NoteNote

A content type ID must be unique within a site collection.

In general, the first content type ID generation technique emphasizes brevity in that it only takes two hexadecimal digits to denote a new content type. The second approach emphasizes uniqueness as it includes a GUID to denote the new content type. Each approach is suited to certain situations.

Parent Content Type ID + Two Hexadecimal Values

SharePoint Foundation uses this convention to generate content type IDs for the default content types that are included with the platform. For example, the content type ID of the basic content type Item is 0x01. This denotes that the Item content type is a direct child of System. The content type ID of the Document content type is 0x0101, and the Folder content type has a content type ID of 0x0120. By parsing these content type IDs, you can determine that both Document and Folder are direct children of Item, which in turn inherits directly from System, as shown in the following figure.

Document content type ID

Using this convention, you can determine not only what content types a content type inherits from, but at which point two content types have common ancestors.

The following figure shows the relationship of the four content types discussed earlier. In each, the unique portion of the content type ID is represented by blue text.

Example of default content type ID hierarchy
Parent Content Type ID + "00" + Hexadecimal GUID

SharePoint Foundation employs this content type ID generation convention when creating content type IDs for the following:

  • Site content types you create based on other content types

  • List content types, which are copied to a list when you add a site content type to that list

For example, if you have a content type with a content type ID of "0x010100D5C2F139516B419D801AC6C18942554D", you would know that the content type was one of the following:

  • A site content type that is a direct child of the Document content type

  • A list content type created when the Document site content type was added to a list

We recommend you use the GUID approach to identify any content types that are direct children of content types you did not create. Use the GUID approach if the parent content type is one of the following:

  • A default content type included in SharePoint Foundation, such as Document.

  • A content type developed by a third party. That way, you are assured that the content type ID is unique and will not be duplicated later by the developer of the parent content type.

After you uniquely identify a content type using the GUID approach, however, you can use the first method to identify any children of that content type. The GUID used in your content type can act as a namespace for your content type. Any children based on that content type can be identified by just two hexadecimal digits. Because the maximum length of a content type ID is finite, this approach maximizes the number of allowed content type "generations".

Content Type ID Lengths

Content type IDs have a maximum length of 512 bytes. Because two hexadecimal characters can fit in each byte, each content type ID has an effective maximum length of 1024 characters.

For example, suppose you create a new content type, myDocument, based on the default SharePoint Foundation content type Document. For the myDocument content type ID, you start with the Document content type ID, 0x0101 and append 00 and a GUID. This uniquely identifies the myDocument content type, ensuring that SharePoint Foundation will not add another default content type later with the same content type ID (which would be possible, if you append only two hexadecimal digits). To generate content type IDs for any content types you derive from myDocument, however, you can simply append two hexadecimal digits to the myDocument content type ID. This keeps the content type ID length to a minimum, thereby maximizing the number of allowed content type "generations".

The following figure shows this scenario. The unique portion of each content type ID is represented by blue text.

Example of content type ID hierarchy
Working with Content Type IDs in Declarative XML

You can create a new site content type as part of a Feature by using declarative XML in an element manifest file. SharePoint Foundation provides an XML schema definition for this purpose. For more information, see Content Type Definitions.

The top-level element in a content type definition is ContentType. This element has a required ID attribute whose value must be a string in content type ID format. If you fail to properly format the ID for a new content type, you will get an error when you attempt to activate the Feature in which it is defined. To avoid this error, construct the ID for your new content type by carefully following the rules outlined in this topic.

To create an ID for a content type that is derived from a built-in content type, start with the hexadecimal string that identifies the built-in content type, append two zeroes, and then add a GUID with all the punctuation removed. For example, the hexadecimal string that identifies the Item content type is "0x01". The ID for a content type that derives from Item should look something like the following:

0x0100A33D9AD9805788419BDAAC2CCB37509F

To create IDs for additional content types that inherit from your content type, simply append "01", "02", and so on.

TipTip

IDs for important built-in content types are listed in Base Content Type Hierarchy. In addition, you can quickly reference the ID for any content type that is available to a site by choosing Site Settings from the Server ribbon and then clicking Site content types in the Galleries section. When you mouse over the link for a content type, the content type ID is displayed in the brower's status bar.

The following example is an element manifest for a Feature that creates three content types. The first new content type, Financial Document, is derived from the Document content type. Financial Document, in turn, is the parent content type for new Purchase Order and Invoice content types.

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://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>
Working with Content Type IDs in Code

The value that is returned by the Id property of an SPContentType object in server code or by the same property of a ContentType object in client code is not a hexadecimal string. It is an object of type SPContentTypeId in server code and type ContentTypeId on the client.

If you know the hexadecimal string for a content type ID, you can get the corresponding object by passing the string to the constructor for the appropriate class. For example, the following server code constructs an SPContentTypeId object that represents the ID for the Document content type.

This language is not supported or no code example is available.

You do not need to know the hexadecimal ID for any of the content types that are included with SharePoint Foundation. Instead, you can use the fields of the SPBuiltInContentTypeId class. For example, wherever your code needs to represent the ID for the Document content type, it can use SPBuiltInContentTypeId.Document rather than “0x0101”. The following code illustrates this technique.

This language is not supported or no code example is available.

When you create your own content type in code, you do not have to manufacture an ID for it. Instead, you can let the system generate an ID based on the ID of the content type from which your content type is derived.

For example, the following console application creates a new Customer content type that is derived from the Item content type. The application makes the new content type a site content type by adding it to the site's content type collection. Then it applies the content type to a list by adding it to the list's content type collection. Finally, the application prints the IDs for all three content types: the parent content type, the new site content type, and the new list content type.

This language is not supported or no code example is available.

The following output is printed to the console:

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

Press ENTER to continue...
Change History

Date

Description

Reason

May 2010

Initial publication

Community ContentAdd
Change the default Console Application settings Visual Studio 2010
When you run this in a console application it needs be set to:
- .NET Framework 3.5
- Build as a 64bit application

I found it out thanks to the following site:
http://www.sharepointdevwiki.com/display/sp2010/Building+SharePoint+2010+Console+Applications
Page view tracker