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

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

適用対象: SharePoint Foundation 2010

この記事の内容
ユーザー インターフェイスを通じて子コンテンツ タイプを更新する
オブジェクト モデルを通じて子コンテンツ タイプを更新する
子コンテンツ タイプを更新するときの考慮事項

SharePoint Online で使用可能

各コンテンツ タイプには、基になったサイト コンテンツ タイプに対する参照が含まれます。これにより、Microsoft SharePoint Foundation 2010 は、親コンテンツ タイプに対して行われた変更を、子のサイトおよびリスト コンテンツ タイプに反映つまりプッシュダウンすることができます。

サイト コンテンツ タイプに変更を加える場合、ユーザー インターフェイスまたはオブジェクト モデルからすべての子コンテンツ タイプに変更を反映 (下へ) できます。反映操作が、そのサイト コンテンツ タイプに基づいてサイトまたはリスト コンテンツ タイプに行った変更をコピーする場合は、コンテンツ タイプ全体を上書きすることはありません。上書きされるコンテンツの範囲は、変更と反映操作をユーザー インターフェイスまたはオブジェクト モデルのどちらかを使用して実行するかによって異なります。

ユーザー インターフェイスを通じて子コンテンツ タイプを更新する

ユーザー インターフェイスからサイト コンテンツ タイプを編集し、コンテンツ タイプ設定ページを変更すると、そのページに含まれるすべての設定は、反映操作の間に上書きされます。したがって、反映できる変更の詳細さは、各ページでの設定のグループ化により定義されます。コンテンツ タイプ設定ページで変更を行うたびに、そのページのすべての設定が反映操作の間に上書きされます。

次に示すのは、各コンテンツ タイプ設定ページに含まれる設定の概要です。

  • 詳細設定   このページには以下の設定が含まれます。

    • ドキュメント テンプレートの URL

    • 実際のドキュメント テンプレート ファイル (Web サイトで既存のテンプレートを選択した場合、またはテンプレート ファイルをアップロードした場合)

    • 読み取り専用属性

  • 新規列設定   このページでは、サイト コンテンツ タイプへの新しい列の追加を管理します。

  • 列設定   このページには以下の設定が含まれます。

    • 必須

    • 非表示

    • サイト コンテンツ タイプからの列の削除

オブジェクト モデルを通じて子コンテンツ タイプを更新する

オブジェクト モデルを使用すると、反映操作をさらに詳細に制御できます。オブジェクト モデルからサイト コンテンツ タイプを変更すると、実際にはサイト コンテンツ タイプのメモリ内での表現に対して変更が行われます。Update メソッドを呼び出したときにのみ、SharePoint Foundation はこれらの変更をサイト データベースにコミットします。

例 : コンテンツ タイプに列を追加する

次のコード例では、サイト列を作成し、その列をユーザー設定コンテンツ タイプに属するフィールドのコレクションに追加します (この例では、"Specification")。その後、Specification に基づきすべてのコンテンツ タイプにこの変更を反映します。

注意

列を既存のサイト コンテンツ タイプに宣言として (言い換えると、フィーチャー XML ファイルを更新して) 追加することはできません。

using (SPWeb oWebsite = new SPSite("http://MyServer/sites/MySiteCollection/MyWebSite").OpenWeb())
{
    SPList oList = oWebsite.GetList("MyWebSite/Lists/MyList");
    SPFieldCollection collFields = oWebsite.Fields;

    string strNewColumn = collFields.Add("MyNewColumn", SPFieldType.Text, false);

    SPFieldLink oFieldLink = new SPFieldLink(fields[strNewColumn]);
    SPContentType oContentType = oList.ContentTypes["Specification"];
    oContentType.FieldLinks.Add(oFieldLink);

    oContentType.Update(true);
}
Using oWebsite As SPWeb = New SPSite("http://MyServer/sites/MySiteCollection/MyWebSite").OpenWeb()
    Dim oList As SPList = oWebsite.GetList("MyWebSite/Lists/MyList")
    Dim collFields As SPFieldCollection = oWebsite.Fields

    Dim strNewColumn As String = collFields.Add("MyNewColumn", SPFieldType.Text, False)

    Dim oFieldLink As New SPFieldLink(fields(strNewColumn))
    Dim oContentType As SPContentType = oList.ContentTypes("Specification")
    oContentType.FieldLinks.Add(oFieldLink)

    oContentType.Update(True)
End Using

コンテンツ タイプで子のユーザー設定情報を更新する

オブジェクト モデルを使用することで、XML ドキュメントの単位でカスタム設定を反映することもできます。各コンテンツ タイプには XML ドキュメント コレクションがあり、サードパーティのソリューションはこれを使用してカスタム設定情報を格納できます。特定の XML ドキュメントを、反映操作を使用して上書きできます。SharePoint Foundation は、上書きを行う前に、その XML ドキュメントが現在使用されているものかどうか、または何らかの処理が必要かどうか、などの判断を行わないことに注意してください。また、反映操作の一部として、XML ドキュメント全体を削除することもできます。

コンテンツ タイプへのユーザー設定情報と共に XML ドキュメントを格納する場合の詳細については、「コンテンツ タイプのユーザー設定情報」を参照してください。

子コンテンツ タイプを更新するときの考慮事項

子コンテンツ タイプに対する変更が反映操作の詳細さの範囲に含まれる場合は、反映操作によって上書きされることに注意してください。たとえば、子コンテンツ タイプで列を変更する場合、その後親テンプレートでその列をさらに変更したり、列を削除して変更を反映させるとき、自身または他のユーザーが子コンテンツ タイプに行った変更は、SharePoint Foundationにより上書きされます。

各反映操作では、その時点で親コンテンツ タイプに対して行った変更のみが反映されます。変更を行った時点で変更を反映しない場合、後でその変更を反映するのは容易ではありません。ほとんどの場合は、以前の変更を元に戻し、再び変更を行った後、変更を反映する必要があります。たとえば、親コンテンツ タイプから列を削除し、その時点では変更を反映しない場合は、以降の反映操作には、子コンテンツ タイプからのその列の削除は含まれません。後で子コンテンツ タイプから列を削除するには、列を親コンテンツ タイプに追加して戻した後、再び削除し、反映操作を実行する必要があります。

子コンテンツ タイプに適用されなくなった変更を反映した場合、その変更は無視されます。たとえば、子コンテンツ タイプから削除されている列に対する列設定の変更を反映した場合、その変更は無視されます。SharePoint Foundation は、子コンテンツ タイプに列を追加して戻すことはありません。

読み取り専用に設定されている子コンテンツ タイプに対して反映操作を実行しようとすると、その反映操作の一部として親コンテンツ タイプを読み取り/書き込みに設定していない限り、反映操作は失敗します。

反映の変更は、完全に行われるか、またはまったく行われないか、という操作ではありません。特定の子コンテンツ タイプで変更の反映が失敗した場合は、SharePoint Foundation は、残りの子コンテンツ タイプに対する変更を引き続き反映します。反映操作の最後に、SharePoint Foundation は発生したエラーの一覧を返します。

子コンテンツ タイプがシールとして定義されていると、そのコンテンツ タイプに対する反映操作は失敗します。

注意

サイト上でサイト コンテンツ タイプを作成または管理するには、そのサイトの Web デザイナー アクセス権が必要です。子サイトに対する適切なアクセス権がない場合、その子サイトに含まれるコンテンツ タイプに対する反映操作は失敗します。

読み取り専用およびシールされたコンテンツ タイプの詳細については、「コンテンツ タイプの変更管理」を参照してください。

関連項目

概念

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

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

コンテンツ タイプの範囲

コンテンツ タイプの作成

コンテンツ タイプのアクセス制御

コンテンツ タイプを削除する