構成要素: コンテンツ タイプ

最終更新日: 2011年5月27日

適用対象: SharePoint Foundation 2010

この記事の内容
コンテンツ タイプのオブジェクト モデル
コンテンツ タイプで使用される XML
コンテンツ タイプに関連する領域
コンテンツ タイプの詳細

SharePoint Online で使用可能

"コンテンツ タイプ" は、SharePoint Foundation リストまたはドキュメント ライブラリ内の、アイテムのカテゴリの、メタデータ、ワークフロー、および動作を定義します。たとえば、経費明細書コンテンツ タイプを定義することにより、新しい経費明細書が渡されたときは、特定の Microsoft Excel テンプレートを使用して経費明細書ドキュメントが常に作成され、承認ワークフローが常に自動的に開始するようにできます。次にドキュメント ライブラリに対してコンテンツ タイプを追加した場合は、ユーザーは、ライブラリ上の [新しいドキュメント] ボタンに付加されたメニューから [経費明細書] を選択することにより、新しい経費明細書を作成して、提出することができます。

コンテンツ タイプの重要な利点は、集約的かつ再利用可能な方法で、情報の特定のカテゴリの基礎となるスキーマを管理できるということです。コンテンツ タイプは、サイト レベルで定義され、サイト内のいかなるリストまたはドキュメント ライブラリからも独立しています。サイト全体にわたって、多くの異なるリストまたはドキュメント ライブラリで同じコンテンツ タイプを使用することができます。場合によっては、サイト コレクション全体にわたるリストとライブラリでコンテンツ タイプを使用することができます。逆に、同じリストまたはドキュメント ライブラリで複数の異なるコンテンツ タイプを使用することもできます。リストまたはドキュメント ライブラリが複数のコンテンツ タイプをサポートする場合、各コンテンツ タイプが [新規作成] ボタンに表示され、それぞれが固有の列、ワークフロー、および動作のセットを持つことができます。

コンテンツ タイプの使用可能性は、"範囲" と呼ばれます。コンテンツ タイプの範囲には、常に、コンテンツ タイプが定義されたサイトに加えて、そのサイトのすべての子が含まれます。たとえば、ヨーロッパという名前の親サイトが、イタリア、フランス、ドイツという名前の子サイトを持っているサイト階層構造があると想定します。親のヨーロッパに追加された新規作成コンテンツ タイプは、ヨーロッパ、イタリア、フランス、ドイツのすべてのリストまたはドキュメント ライブラリに適用されます。範囲はサイト階層構造の下方に拡張するため、サイト コレクションのルート サイトにコンテンツ タイプを追加することにより、サイト コレクション全体のリストとライブラリに対してコンテンツ タイプが使用可能になります。

コンテンツ タイプは、継承の原則により定義されます。ゼロからコンテンツ タイプを作成するということはありません。作成する任意の新しいコンテンツ タイプの基盤として、既存のコンテンツ タイプを選択します。新しいコンテンツ タイプを既存のコンテンツ タイプに基づいて作成する場合、新しいコンテンツ タイプは親コンテンツ タイプのメタデータ、ワークフロー、および動作を継承します。これにより、基底クラスを定義するのと同じように、基本コンテンツ タイプを定義することができます。たとえば、組織のすべての財務ドキュメントに対して共通する特性を持つ、Financial Document という名前のコンテンツ タイプを定義することができます。次に Financial Document を、2 つの新しいコンテンツ タイプ、Invoice と Purchase Order の基盤として使用することができます。新しいコンテンツ タイプは Financial Document からメタデータと動作を継承するため、親コンテンツ タイプと共通する要素は一度定義するだけです。

[サイトの設定] の [サイト コンテンツ タイプ] ギャラリーで、このパターンを実際に確認することができます。リストに適用できるもっとも基本的なコンテンツ タイプは、アイテムと呼ばれます。お知らせ、連絡先、仕事、その他多くのコンテンツ タイプが、アイテムから継承します。同様に、ドキュメント ライブラリに対して適用されるもっとも基本的なコンテンツ タイプは、ドキュメントです。画像、フォーム、Wiki ページなどは、すべてドキュメントから継承するコンテンツ タイプです。

新しいコンテンツ タイプを作成する場合、それがリストまたはドキュメント ライブラリのどちらで使用されるか決定する必要があることに注意してください。ドキュメント ライブラリに対して適用できる唯一のコンテンツ タイプは、ドキュメントから継承されるコンテンツ タイプです。さらに、リストに対して適用できる唯一のコンテンツ タイプは、ドキュメントからではなく、アイテムから継承されるコンテンツ タイプです。

継承の原則から外れる重要な点の 1 つは、親コンテンツ タイプに対する変更は、派生したコンテンツ タイプに対して自動的に反映されないということです。変更は、NTFS でセキュリティ権限がファイル システム階層構造の下方に向かって反映されるのと似た方法で反映されます。詳細については、「子コンテンツ タイプを更新する」を参照してください。

コンテンツ タイプのオブジェクト モデル

SharePoint Foundation には、コンテンツ タイプを作成、検索、追加、更新、および削除するためのオブジェクト モデルが豊富に用意されています。サーバー上で実行するコードを記述する場合は、Microsoft.SharePoint 名前空間のメンバーを使用します。この名前空間のほとんどの種類には、クライアントで実行するコードの作成に使用できる、Microsoft.SharePoint.Client 名前空間での同等物があります。

コンテンツ タイプの検索

どのコンテンツ タイプがどの範囲で使用可能かどうかを確認するには、SPWeb (サーバー) オブジェクトまたは Web (クライアント) オブジェクトの AvailableContentTypes プロパティにアクセスします。どちらのプロパティも、SPContentType (サーバー) または ContentType (クライアント) オブジェクトの読み取り専用コレクションを返します。コレクションは、列挙可能で、コンテンツ タイプ名を含む複数のインデクサーを持っています。

どのコンテンツ タイプがこれまでリストまたはドキュメント ライブラリに適用されたかどうかを確認するには、サーバー コードの SPList オブジェクトの ContentTypes プロパティ、またはクライアント コードの List オブジェクトの同じプロパティにアクセスすることによって確認できます。このプロパティは、列挙可能な、インデックス付きコレクションを返しますが、この場合、コレクションに書き込むことができます。

サイト コンテンツ タイプがリストまたはドキュメント ライブラリに適用されたとき、実際に追加されるのはサイト コンテンツ タイプではなく、サイト コンテンツ タイプの "コピー" であることに注意してください。さらに、リストのコンテンツ タイプのコピーは、異なるコンテンツ タイプ識別子を持っています。これはサイト コンテンツ タイプの識別子から派生したものですが、同じ識別子ではありません。これは、コンテンツ タイプ識別子をコレクションのインデックスとして使用することで、必要とするコンテンツ タイプを取得できないかもしれないということです。その代わりにコレクションの BestMatch メソッドを使用する必要があります。詳細については、「サイトとリストのコンテンツ タイプ」と「コンテンツ タイプ ID」を参照してください。

サイト コンテンツ タイプがどこで使用されているかを知るには、リスト上または別のサイト コンテンツ タイプの親として、SPContentTypeUsage クラスのメンバーである静的メソッド GetUsages(SPContentType) を呼び出すことができます。

新しいコンテンツ タイプの作成

フィーチャーの一部として、ユーザー設定のコンテンツ タイプを作成して展開することができます。フィーチャーの詳細については、「[文書パーツ] フィーチャー」を参照してください。

SPFeatureReceiver オブジェクトの FeatureActivated(SPFeatureReceiverProperties) メソッドのコンテンツ タイプを作成するには、コードを挿入します。コンテンツ タイプが新しいサイト列を使用する場合は、コンテンツ タイプで参照する前に、列を作成して準備する必要があります。列の詳細については、「構成要素: 列とフィールド型」を参照してください。

コンテンツ タイプ オブジェクトを作成するには、SPContentType クラスのためのコンストラクターの 1 つを呼び出します。両方のコンストラクターのパラメーターは、SPContentTypeCollection オブジェクトです。これは、コンテンツ タイプが作成されるサイトの SPWeb オブジェクトの ContentTypes プロパティで返されるオブジェクトです。コンストラクターではサイト コンテンツ タイプ コレクションを指定しますが、コンストラクターはコレクションにそれを追加しません。これは、別の呼び出しで、同じコレクションの Add メソッドに対して行う必要があります。

コンテンツ タイプの追加と削除

コンテンツ タイプをリストまたはドキュメント ライブラリに適用するには、まずリストの AllowContentTypes プロパティを true に設定して、次に SPList (サーバー) オブジェクトまたは List (クライアント) オブジェクトの ContentTypes プロパティで返されるコレクションの Add メソッドを呼び出す必要があります。

サイトに新しいコンテンツ タイプを追加するには、SPWeb (サーバー) オブジェクトまたは Web (クライアント) オブジェクトの ContentTypes プロパティで返されるコレクションの Add メソッドを呼び出します。

リストまたはドキュメント ライブラリからコンテンツ タイプを削除するには、削除するコンテンツ タイプを識別する SPContentTypeId (サーバー) 構造または ContentTypeId (クライアント) 構造を渡して、Delete メソッドを呼び出します。しかし、使用中のコンテンツ タイプを削除することはできません。リストからコンテンツ タイプを削除しようとしている場合は、まずリスト アイテムがコンテンツ タイプを使用しないことを確認する必要があります。1 つの方法としては、リスト内のアイテムを見て、それぞれのアイテムの ContentType プロパティの値を確認してください。コンテンツ タイプを、それが定義されたサイト コレクションから削除しようとしている場合は、GetUsages メソッドが空のリストを返すことを確認します。つまり、コンテンツ タイプがどのリストでも使用されておらず、どの子コンテンツ タイプの親でもないことを確認してください。

コンテンツ タイプの更新

SharePoint Foundation には、コンテンツ タイプを表す SPContentType (サーバー) および ContentType (クライアント) オブジェクトの ReadOnly プロパティと Sealed プロパティからコンテンツ タイプに対する変更を制御するためのメカニズムがあります。コンテンツ タイプを変更しようとする前に、これらのプロパティの設定を確認する必要があります。詳細については、「コンテンツ タイプの変更管理」を参照してください。

SPFeatureReceiver オブジェクトの FeatureActivated(SPFeatureReceiverProperties) メソッドに、コンテンツ タイプを更新するコードを挿入します。コードが、コンテンツ タイプを表すオブジェクトに対する変更を完了した後で、オブジェクトの Update() メソッドのオーバーロードの 1 つを呼び出して、変更をデータベースに確定します。変更は、派生したコンテンツ タイプまで範囲を広げて適用することができます。詳細については、「子コンテンツ タイプを更新する」を参照してください。

コンテンツ タイプで使用される XML

フィーチャーで XML を使用して、コンテンツ タイプを定義することができます。コンテンツ タイプ定義のために使用するスキーマの詳細については、「コンテンツ タイプ定義」を参照してください。リストを準備した場合、リストに既存のコンテンツ タイプを追加することができます。リスト スキーマのコンテンツ タイプ セクションの詳細については、「ContentTypes 要素 (リスト)」を参照してください。

コンテンツ タイプで XML を使用する方法を示すシンプルな例については、「チュートリアル: カスタムのフィールド、コンテンツ タイプ、リスト定義、およびリスト インスタンスの作成 (英語)」を参照してください。

コンテンツ タイプに関連する領域

構成要素: Web サイトとサイト コレクション

構成要素: 列とフィールド型

構成要素: ワークフロー

[文書パーツ] フィーチャー

コンテンツ タイプの詳細

コンテンツ タイプについて

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

コンテンツ タイプの作成

子コンテンツ タイプを更新する

[方法] リストにコンテンツ タイプを追加する