フィールド レンダリング テンプレートを作成する

最終更新日: 2010年4月4日

適用対象: SharePoint Foundation 2010

この記事の内容
レンダリング テンプレートとレンダリング コントロールの関係
レンダリング テンプレート システム
フィールド レンダリング構成
複数のレンダリング テンプレートを必要とするシナリオ
テンプレートの関連付けを追加
Web カスタム コントロールのテンプレートとしての使用

フィールド レンダリング テンプレートとは、%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\controltemplates フォルダーにある .ascx ファイルの RenderingTemplate 要素として定義されている RenderingTemplate オブジェクトのことです。レンダリング コントロール クラスCreateChildControls メソッドと共に使用され、新規モード、編集モード、または表示モードでフィールドをレンダリングします。

レンダリング テンプレートとレンダリング コントロールの関係

RenderingTemplate オブジェクトとは、一種の Control-ITemplate オブジェクトのことです。これは Control から派生し、新しいメンバーを 1 つだけ追加します。そのメンバーとは、ITemplate オブジェクトを保持する Template プロパティです。これにより、rendering control (TemplateBasedControl から派生) は ITemplate オブジェクトを間接的に参照できるようになります。この参照は、レンダリング テンプレートの ID プロパティ (ID) で RenderingTemplate オブジェクトを参照することによって実現します。レンダリング コントロールは、これを実現するために、その複数の String プロパティの 1 つ以上 (TemplateName など) を使用します。それらのプロパティがレンダリング テンプレートの ID を保持できます。

レンダリング テンプレート システム

すべてのフィールド レンダリング コントロールには、少なくとも 1 つの関連するフィールド レンダリング テンプレートが含まれています。SharePoint Foundation では、表示の際に %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES にある .ascx ファイルで宣言されているすべてのコントロールの ID を検索することにより、必要なテンプレートを検索します (Web アプリケーション開始時にこれらのすべてが読み込まれます)。

フィールド レンダリング構成

ユーザー設定フィールドの種類を作成する際に最もよく使用するフィールド レンダリング構成には、以下のような特徴があります。

  • レンダリング コントロールが 2 つのレンダリング テンプレートに関連付けられており、コントロールの TemplateName プロパティおよび DisplayTemplateName プロパティを使用してその ID を指定します。

  • 一方のテンプレートは、新規モードおよび編集モードでほとんどのフィールド レンダリングを提供します。もう一方のテンプレートは、表示モードでほとんどのフィールド レンダリングを提供します。

  • レンダリング コントロールの CreateChildControls メソッドを使用すると、新規モードでレンダリング コントロールの子コントロールに既定値が割り当てられます。また、編集モードおよび表示モードで子コントロールにフィールドの現在の値が割り当てられます。そのほかに、子コントロールの Label に CSS クラスを割り当てるなどの "仕上げ" のレンダリング作業が行われます。

  • 入力規則ロジックは、フィールド レンダリング コントロールの ValidateIsValidErrorMessage の各メンバーと、その基礎となるフィールドの種類の GetValidatedString メソッドにより実装されます。(Validate は、CreateChildControls により呼び出される場合があります。)

BaseFieldControl は、TemplateBasedControl および FieldMetadata から、複数のレンダリング テンプレートにリンクし、レンダリング コンテキストに基づいてそれらを切り替えることができるメンバーを継承します。

複数のレンダリング テンプレートを必要とするシナリオ

TemplateTemplateNameDisplayTemplate、および DisplayTemplateName のほかに、AlternateTemplateAlternateTemplateName も操作できます。

メインのテンプレートで対応できないページ コンテキストでカスタム フィールドをレンダリングするには、代替のテンプレートを使用します。以下にいくつかの例を示します。

  • あるフィールドが一部のリストでは必須で他のリストでは必須でない場合、特定のリストでは、フィールドが必須であることを示すインジケーター (赤いアスタリスクなど) を付加してあること以外はメインのテンプレートと同じ代替テンプレートを使用できます。次に、ControlTemplate の get アクセサーを使用して、そのフィールドの Required プロパティをチェックし、必要に応じて Template または AlternateTemplate のどちらかを返すようにします。

  • ほぼ同じようにレンダリングする多数のカスタム フィールド型を使用する予定の場合、新規モードと編集モードで使用するテンプレートを別々に作成すると、コードをより効率的に再利用できる可能性があります。新規モードのテンプレートでは子オブジェクトに既定値を割り当て、編集モードのテンプレートは現在の値を割り当てます。これにより、1 つ 1 つのカスタム フィールド型クラスの CreateChildControls メソッドで割り当てロジックを繰り返す必要がなくなります。この場合も、ControlTemplate の get アクセサーが、制御モードに基づいて使用するテンプレートを決定します。

  • 代替テンプレートを使用すると、特定の Web サイト、サイト コレクション、または Web アプリケーションでフィールドの特別なレンダリングが必要な場合にも役立ちます。たとえば、色覚異常などの視覚障碍のあるユーザー向けにデザインされた Web サイトがあるとします。ControlTemplate の get アクセサーが RenderContext の値をチェックして特別なテンプレートが必要かどうかを判断し、適切なテンプレートを返します。

  • SPFieldNumber から継承したカスタム フィールド型を、いつもではないが時々パーセンテージとしてレンダリングする必要がある場合、2 つの異なるレンダリング テンプレートを用意することで開発時間を大幅に節約できます。SPFieldNumber.ShowAsPercentage プロパティの値に応答するように、ControlTemplate の get アクセサーをオーバーライドします。

テンプレートの関連付けを追加

BaseFieldControl から派生させたフィールド レンダリング コントロールに、さらにテンプレートを追加して関連付けることができます。追加するときは、次のパターンに従うことをお勧めします。

  • 新しいプライベート フィールド型 ITemplate を作成します。

  • そのプライベート フィールドを囲むラッパーとして新しいパブリック プロパティを作成し、環境Template などの名前を付けます。ここで、環境は、テンプレートを使用する状況を示します。

  • String を返す 2 つ目のパブリック プロパティを作成し、環境TemplateName という名前を付けます。

  • 環境Template の get アクセサーは、後者が null でない場合にのみプライベート フィールドを返します。それ以外の場合、環境TemplateName によって指定された ITemplate を返します。これには、GetTemplateByName() メソッドを使用します。

  • 環境が true の場合に必ず環境Template を返すように、ControlTemplate の get アクセサーをオーバーライドします。

Web カスタム コントロールのテンプレートとしての使用

ユーザー設定フィールドのレンダリング コントロールも、2 つの特別な ITemplate プロパティ、CustomTemplate および CustomAlternateTemplate を継承します。これら 2 つのプロパティには、[PersistenceMode(PersistenceMode.InnerProperty)] 属性でマークが付けられています。これは、これらのプロパティが返す ITemplate オブジェクトがコンパイルされていて、フィールド レンダリング コントロール内にネストされたタグとして存在することを意味します。事前にコンパイルされたテンプレートを使用すると、いくつかの利点があります。たとえば、SharePoint Designer、Visual Studio などのビジュアル デザイナーで、デザイナーのツールボックスからドラッグ アンド ドロップしてページに追加できます。ただし、欠点もあります。Web ユーザー コントロールおよびカスタム Web コントロールの詳細については、「Web User Controls and Web Custom Controls」および「PersistenceModeAttribute」を参照してください。

関連項目

タスク

[ウォークスルー] ユーザー設定フィールド型を作成する

概念

ユーザー設定フィールド型

[方法] ユーザー設定フィールド クラスを作成する

ユーザー設定フィールド データ入力規則

[方法] ユーザー設定フィールド値クラスを作成する

[方法] ユーザー設定フィールド型の定義を作成する

ユーザー設定フィールド型のプロパティのレンダリング

フィールド型のプロパティ用のエディター コントロール

[方法] フィールド レンダリング コントロールを作成する

[方法] ユーザー設定フィールド型を作成する