サイトにコンテンツ タイプを追加する

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

適用対象: SharePoint Foundation 2010

SharePoint Online で使用可能

コンテンツ タイプをカスタム サイト定義構成に含めるように指定できます。これにより、ユーザーがそのタイプのサイトを作成するたびに、Microsoft SharePoint Foundation では、そのコンテンツ タイプをサイト上で既定で利用できるようになります。サイトを作成してから、フィーチャーの一部としてコンテンツ タイプを追加することもできます。

サイト定義構成でコンテンツ タイプを登録する

コンテンツ タイプをカスタム サイト定義構成に含めるように指定するには、まず、そのコンテンツ タイプを独立したフィーチャーとして作成し、サイト定義の Onet.xml ファイル内にあるカスタム サイト定義構成に対する Collaborative Application Markup Language (CAML) マークアップで、そのフィーチャーを参照します。その後、ユーザーがその種類の新しいサイトを作成すると、そのコンテンツ タイプは既定でサイト内のコンテンツ タイプ コレクションに含められます。

注意注意

SharePoint Foundation に組み込まれたどの種類のサイトについても、Onet.xml ファイルへの変更はサポートされていないので、次の手順はカスタム サイトについてのみ使用できます。カスタム サイト定義構成の作成の詳細については、「[方法] カスタム サイト定義および構成を作成する」を参照してください。

コンテンツ タイプをサイト定義構成に含めるように指定するには

  1. コンテンツ タイプを独立したフィーチャーとして作成します。

    詳細については、「フィーチャーの使用」を参照してください。

  2. カスタム サイトの種類を定義する Configuration 要素 (Onet.xml ファイル内の要素) でそのフィーチャーを参照します。

    1. %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\SiteTemplates\site_type\XML 内の Onet.xml ファイルを開きます。ここで、site_type はカスタム サイト定義の名前を表しています。

    2. Configuration 要素内で、SiteFeatures 要素または WebFeatures 要素にコンテンツ タイプのフィーチャーへの参照を追加します。フィーチャーは GUID で識別します。次に例を示します。

      <SiteFeatures>
        <Feature ID="00BFEA71-1C5E-4A24-B310-BA51C3EB7A57" />
        <Feature ID="695B6570-ACDC-4A8E-8545-26EA7FC1D162" />
      </SiteFeatures>
      <WebFeatures>
        <Feature ID="00BFEA71-4EA5-48D4-A4AD-7EA5C011ABE5" />
        <Feature ID="00BFEA71-E717-4E80-DEAF-D0C71B360101" />
      </WebFeatures>
      

      この 2 つの要素の相違点の詳細については、「SiteFeatures 要素 (サイト)」および「WebFeatures 要素 (サイト)」を参照してください。

コンテンツ タイプを既存のサイトに追加する

コンテンツ タイプをサイトに追加するには、宣言型 XML を使用するか、SharePoint Foundation オブジェクト モデルを使用します。宣言型 XML では、コンテンツ タイプ定義スキーマを使用して、コンテンツ タイプを定義します。コンテンツ タイプの定義はフィーチャーの要素マニフェスト ファイルで宣言され、コンテンツ タイプは、フィーチャーがアクティブ化されたときにサイトに追加されます。

SharePoint Foundation オブジェクト モデルを使用する場合は、SPFeatureReceiver クラスをサブクラス化する必要があります。コンテンツ タイプを作成し、それをサイトに追加するコードを、FeatureActivated メソッドに配置します。

通常、宣言型 XML の方が簡単に記述できますが、この宣言型 XML は、オブジェクト モデルに比べると柔軟性に欠けます。オブジェクト モデルでは、Microsoft .NET Framework 全体の機能にアクセスし、実行時にデバッグを行うことができます。どちらのアプローチも、Microsoft Visual Studio 2010 の SharePoint 開発者ツールに用意されているテンプレートによってサポートされています。

宣言型 XML を使用してコンテンツ タイプを追加するには

  1. フィーチャーを作成します。

    詳細については、「フィーチャーの使用」を参照してください。

  2. 要素マニフェスト ファイルをフィーチャーに追加します。

  3. Elements 要素をルート XML 要素として要素マニフェストに追加します。

  4. ContentType 要素を Elements 要素の子として追加します。

    注意

    ID 属性に使用する値では特定の書式が使用されています。詳細については、「コンテンツ タイプ ID」を参照してください。

  5. 必要な列の参照を追加します。詳細については、「[方法] コンテンツ タイプ内の列を参照する」を参照してください。

  6. 必要に応じて、DocumentTemplate 定義を追加します。

    注意

    DocumentTemplate 要素によって参照されるファイルは、サイトに既に存在するか、フィーチャーに含まれている必要があります。詳細については、「[方法] ファイルを準備する」を参照してください。

  7. 必要に応じて、コンテンツ タイプの定義を完了します。詳細については、「コンテンツ タイプ定義」を参照してください。

フィーチャーの要素マニフェストの例を次に示します。この例では、フィーチャーがアクティブ化されると、要素マニフェストを使用してサイト列が作成され、現在のサイトのサイト列コレクションに追加されます。次に、そのマニフェストを使用して、サイト コンテンツ タイプが作成され、現在のサイトのコンテンツ タイプ コレクションに追加されます。

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

  <!-- Create a site column. -->

  <Field ID="{060E50AC-E9C1-4D3C-B1F9-DE0BCAC300F6}"
         Name="Amount"
         DisplayName="Amount"
         Type="Currency"
         Decimals="2"
         Min="0"
         Required="FALSE"
         Group="Financial Columns" />

  <!-- Create a site content type that uses the column. -->

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

</Elements>

サーバー コードを使用してコンテンツ タイプを追加するには

  1. SPFeatureReceiver クラスから継承するフィーチャー レシーバー クラスを作成します。

  2. FeatureActivated メソッドで、ContentTypes プロパティを使用して、サイトのコンテンツ タイプ コレクションにアクセスします。

    このプロパティは、SPContentTypeCollection オブジェクトを返します。

  3. SPContentType オブジェクトを作成します。詳細については、「コンテンツ タイプの作成」を参照してください。

  4. Add メソッドを使用して、SPContentType オブジェクトをサイト コンテンツ タイプ コレクションに追加します。

次の例は、SPFeatureReceiver クラスのサブクラスでの FeatureActivated メソッドの実装を示しています。フィーチャーがアクティブ化されると、FeatureActivated メソッドのコードによってサイト列が作成され、現在のサイトのサイト列コレクションに追加されます。次に、そのコードによって、Document コンテンツ タイプから継承するコンテンツ タイプが作成され、現在のサイトのコンテンツ タイプ コレクションに追加されます。

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    SPSite siteCollection = (SPSite)properties.Feature.Parent;
    SPWeb site = siteCollection.OpenWeb();

    /* Create a site column. */

    string amountFieldName = site.Fields.Add("Amount", SPFieldType.Currency, false);
    SPFieldCurrency amountField = (SPFieldCurrency)site.Fields.GetFieldByInternalName(amountFieldName);
    amountField.Group = "Financial Columns";
    amountField.DisplayFormat = SPNumberFormatTypes.TwoDecimals;
    amountField.MinimumValue = 0;
    amountField.Update();

    /* Create a site content type that uses the column. */

    // Get a content type to be the parent of a new Financial Document content type.
    SPContentType documentCType = site.AvailableContentTypes[SPBuiltInContentTypeId.Document];

    // Create the Financial Document content type.
    SPContentType financialDocumentCType = new SPContentType(documentCType, site.ContentTypes, "Financial Document");
    site.ContentTypes.Add(financialDocumentCType);

    // Note: A content type is not initialized until after it is added.
    financialDocumentCType = site.ContentTypes[financialDocumentCType.Id];
    financialDocumentCType.Group = "Financial Content Types";

    // Add the Amount column. Child content types inherit the column.
    SPFieldLink amountFieldRef = new SPFieldLink(amountField);
    financialDocumentCType.FieldLinks.Add(amountFieldRef);

    // Commit changes.
    financialDocumentCType.Update();

    site.Dispose();
    siteCollection.Dispose();
}
Public Overrides Sub FeatureActivated(ByVal properties As SPFeatureReceiverProperties)
    Dim siteCollection As SPSite = DirectCast(properties.Feature.Parent, SPSite)
    Dim site As SPWeb = siteCollection.OpenWeb()
    
    ' Create a site column. 
    
    
    Dim amountFieldName As String = site.Fields.Add("Amount", SPFieldType.Currency, False)
    Dim amountField As SPFieldCurrency = DirectCast(site.Fields.GetFieldByInternalName(amountFieldName), SPFieldCurrency)
    amountField.Group = "Financial Columns"
    amountField.DisplayFormat = SPNumberFormatTypes.TwoDecimals
    amountField.MinimumValue = 0
    amountField.Update()
    
    ' Create a site content type. 
    
    
    ' Get a content type to be the parent of a new Financial Document content type.
    Dim documentCType As SPContentType = site.AvailableContentTypes(SPBuiltInContentTypeId.Document)
    
    ' Create the Financial Document content type.
    Dim financialDocumentCType As New SPContentType(documentCType, site.ContentTypes, "Financial Document")
    site.ContentTypes.Add(financialDocumentCType)
    
    ' Note: A content type is not initialized until after it is added.
    financialDocumentCType = site.ContentTypes(financialDocumentCType.Id)
    financialDocumentCType.Group = "Financial Content Types"
    
    ' Add the Amount column. Child content types inherit the column.
    Dim amountFieldRef As New SPFieldLink(amountField)
    financialDocumentCType.FieldLinks.Add(amountFieldRef)
    
    ' Commit changes.
    financialDocumentCType.Update()
    
    site.Dispose()
    siteCollection.Dispose()
End Sub

関連項目

タスク

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

概念

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

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

コンテンツ タイプ定義