コンテンツ タイプ ID

最終更新日: 2010年11月1日

適用対象: SharePoint Foundation 2010

この記事の内容
親のコンテンツ タイプ ID + 2 つの 16 進数値
親のコンテンツ タイプ ID + "00" + 16 進数の GUID
コンテンツ タイプ ID の長さ
宣言型 XML でコンテンツ タイプ ID を操作する
コードでコンテンツ タイプ ID を操作する

SharePoint Online で使用可能

コンテンツ タイプ ID は、コンテンツ タイプを一意に識別するもので、再帰的になるように設計されています。コンテンツ タイプ ID は、コンテンツ タイプの系列を、つまりそのコンテンツ タイプが継承した親コンテンツ タイプのラインをカプセル化します。各コンテンツ タイプ ID が親コンテンツ タイプ ID を含み、その親コンテンツ タイプはそれ自身の親の ID を含むため、最終的にシステム (System) コンテンツ タイプ ID にまで遡って含みます。SharePoint Foundation はプッシュ ダウン操作のために、この情報を使用してコンテンツ タイプ間の関係を調べます。

有効なコンテンツ タイプ ID は、次の 2 つのどちらかの規約を使用して作成できます。

  • 親のコンテンツ タイプ ID + 2 つの 16 進数値 (2 つの 16 進数値を "00" にすることはできません)

  • 親のコンテンツ タイプ ID + "00" + 16 進数の GUID

注意

コンテンツ タイプ ID は、サイト コレクション内で一意である必要があります。

基本的に、1 つ目のコンテンツ タイプ ID 生成手法は、新しいコンテンツ タイプを表すのに 2 桁の 16 進数しか要さないという点で簡潔さが強調されます。2 つめのアプローチは、新しいコンテンツ タイプを表す GUID を含めることで一意性が強調されます。各アプローチが、特定の状況に適しています。

親のコンテンツ タイプ ID + 2 つの 16 進数値

SharePoint Foundation は、プラットフォームに含まれている既定のコンテンツ タイプのコンテンツ タイプ ID の生成にこの規約を使用します。たとえば、基本コンテンツ タイプであるアイテム (Item) のコンテンツ タイプ ID は、0x01 です。これは、アイテム (Item) コンテンツ タイプがシステム (System) の直接の子であることを意味します。ドキュメント (Document) コンテンツ タイプのコンテンツ タイプ ID は 0x0101 で、フォルダー (Folder) コンテンツ タイプのコンテンツ タイプ ID は 0x0120 です。以下の図に示すように、これらのコンテンツ タイプ ID を解析することにより、ドキュメント (Document) とフォルダー (Folder) が両方ともアイテム (Item) の直接の子であることがわかり、さらにアイテム (Item) はシステム (System) を直接継承していることがわかります。

ドキュメント コンテンツ タイプ ID

この規約を使用すると、コンテンツ タイプがどのコンテンツ タイプを継承しているかということがわかるだけでなく、2 つのコンテンツ タイプがどの点で共通の祖先を持つかということもわかります。

以下の図に、前述の 4 つのコンテンツ タイプの関係を示します。各コンテンツ タイプ ID の一意の部分を青色のテキストで示してあります。

既定のコンテンツ タイプ ID の階層の例

親のコンテンツ タイプ ID + "00" + 16 進数の GUID

SharePoint Foundation は、以下の場合のコンテンツ タイプ ID の作成にこのコンテンツ タイプ ID 生成規約を使用します。

  • サイト コンテンツ タイプ。ユーザーが他のコンテンツ タイプを基にして作成したものです。

  • リスト コンテンツ タイプ。これは、サイト コンテンツ タイプをそのリストに追加したときにリストにコピーされます。

たとえば、コンテンツ タイプ ID が "0x010100D5C2F139516B419D801AC6C18942554D" のコンテンツ タイプを持っている場合、そのコンテンツ タイプは以下のどちらかであったことがわかります。

  • ドキュメント (Document) コンテンツ タイプの直接の子であるサイト コンテンツ タイプ

  • ドキュメント (Document) サイト コンテンツ タイプがリストに追加されたときに作成されたリスト コンテンツ タイプ

自分が作成したのではないコンテンツ タイプの直接の子となるコンテンツ タイプを識別するには、GUID アプローチを使用することをお勧めします。親コンテンツ タイプが以下のどちらかである場合は、GUID アプローチを使用します。

  • SharePoint Foundation に含まれている、ドキュメント (Document) など既定のコンテンツ タイプ。

  • サードパーティによって作成されたコンテンツ タイプ。こうすると、コンテンツ タイプ ID を確実に一意にすることができ、後から親コンテンツ タイプの作成者により作成されたコンテンツ タイプと重複することがありません。

ただし、GUID アプローチを使用してコンテンツ タイプを一意に識別したら、その後のそのコンテンツタイプの子の識別には最初の方法を使用できます。コンテンツ タイプ内で使用された GUID は、自分が作成するコンテンツ タイプの名前空間の役割を果たします。そのコンテンツ タイプを基にした子は、すべて 2 桁の 16 進数だけで識別できます。コンテンツ タイプ ID の最大の長さには制限があるため、このアプローチによりコンテンツ タイプの "世代" 数を最大限に増やせるようになります。

コンテンツ タイプ ID の長さ

コンテンツ タイプ ID の最大の長さは 512 バイトです。2 桁の 16 進数文字が 1 バイトに収まるため、各コンテンツ タイプ ID の有効な最大の長さは 1024 文字になります。

たとえば、SharePoint Foundation の既定のコンテンツ タイプであるドキュメント (Document) を基に、myDocument という新しいコンテンツ タイプを作成するものとします。myDocument のコンテンツ タイプ ID は、ドキュメント (Document) のコンテンツ タイプ ID の 0x0101 で始めて、00 を続け、さらに GUID を続けます。これで、myDocument コンテンツ タイプは一意に識別され、SharePoint Foundation が同じコンテンツ タイプ ID を持つ他の既定コンテンツ タイプを後から追加する可能性を確実に避けることができます (2 桁の 16 進数を追加しただけの場合は、これが起こる可能性があります)。一方、myDocument から派生するコンテンツ タイプのコンテンツ タイプ ID を生成するには、単に myDocument のコンテンツ タイプ ID に 2 桁の 16 進数を追加するだけの方法をとることができます。これにより、コンテンツ タイプ ID の長さが最小限に保たれるため、作成できるコンテンツ タイプの "世代" 数を最大限に増やすことができます。

以下の図に、このシナリオを示します。各コンテンツ タイプ ID の一意の部分を青色のテキストで示してあります。

コンテンツ タイプ ID 階層の例

宣言型 XML でコンテンツ タイプ ID を操作する

新しいサイト コンテンツ タイプをフィーチャーの一部として作成するには、要素マニフェスト ファイルで宣言型 XML を使用します。SharePoint Foundation には、この目的で XML スキーマ定義が用意されています。詳細については、「コンテンツ タイプ定義」を参照してください。

コンテンツ タイプ定義の最上位レベルの要素は ContentType です。この要素は必須 ID 属性で、その値はコンテンツ タイプ ID 形式の文字列にする必要があります。新しいコンテンツ タイプに対して ID の形式を適切に設定しないと、そのコンテンツ タイプが定義されているフィーチャーをアクティブにしようとしたときにエラーが発生します。このエラーが発生しないようにするには、新しいコンテンツ タイプの ID を作成するときに、このトピックで説明されている以下の規則に慎重に従うようにしてください。

組み込みコンテンツ タイプから派生したコンテンツ タイプの ID を作成するには、組み込みコンテンツ タイプを識別する 16 進数文字列を先頭に指定し、2 つのゼロを付加した後に、すべての句読点を取り除いた GUID を追加します。たとえば、Item コンテンツ タイプを識別する 16 進数文字列は "0x01" です。Item から派生したコンテンツ タイプの ID は次のようになります。

0x0100A33D9AD9805788419BDAAC2CCB37509F

作成したコンテンツ タイプから継承される追加のコンテンツ タイプの ID を作成するには、単に "01"、"02", ... を追加します。

ヒントヒント

重要な組み込みコンテンツ タイプの ID は、「コンテンツ タイプの基本的な階層」に記載されています。また、サイトで使用できるコンテンツ タイプの ID をすばやく確認するには、Server リボンの [サイトの設定] を選択し、[ギャラリー] セクションの [サイト コンテンツ タイプ] をクリックします。コンテンツ タイプのリンクの上にマウス ポインターを移動すると、ブラウザーのステータス バーにコンテンツ タイプ ID が表示されます。

次の例は、3 つのコンテンツ タイプを作成するフィーチャーの要素マニフェストです。最初の新しいコンテンツ タイプである 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 オブジェクトの Id プロパティによって返された値、またはクライアント コードの ContentType オブジェクトの同じプロパティによって返された値は 16 進数文字列ではありません。これは、サーバー コードでは SPContentTypeId 型のオブジェクトで、クライアントでは ContentTypeId 型のオブジェクトです。

コンテンツ タイプ ID の 16 進数文字列がわかっている場合、対応するオブジェクトを取得するには、その文字列を、適切なクラスのコンストラクターに渡します。たとえば、以下のサーバー コードでは、Document コンテンツ タイプの ID を表す SPContentTypeId オブジェクトを作成します。

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 に含まれるコンテンツ タイプの 16 進数 ID を把握しておく必要はありません。代わりに、SPBuiltInContentTypeId クラスのフィールドを使用できます。たとえば、コードで Document コンテンツ タイプの ID を表す必要があるのがどの場所であっても、そのコードは "0x0101" ではなく SPBuiltInContentTypeId.Document を使用できます。以下のコードは、これを示しています。

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.
      ...
   }
}

独自のコンテンツ タイプをコードで作成するときは、そのコンテンツ タイプの ID を自分で作成する必要はありません。代わりに、そのコンテンツ タイプの派生元のコンテンツ タイプの ID に基づいて、システムによって ID が作成されるようにできます。

たとえば、以下のコンソール アプリケーションでは、Item コンテンツ タイプから派生する新しい Customer コンテンツ タイプを作成し、サイトのコンテンツ タイプ コレクションに追加することで、新しいコンテンツ タイプをサイト コンテンツ タイプにします。次に、そのコンテンツ タイプをリストのコンテンツ タイプ コレクションに追加して、リストに適用します。最後に、親コンテンツ タイプ、新しいサイト コンテンツ タイプ、および新しいリスト コンテンツ タイプの 3 つのコンテンツ タイプすべての ID を出力します。

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

概念

コンテンツ タイプの基本的な階層

サイトとリストのコンテンツ タイプ

コンテンツ タイプの作成