ユーザー設定フィールド型を作成する
最終更新日: 2011年3月3日
適用対象: SharePoint Foundation 2010
この記事の内容
1. フィールド型定義を作成する
2. フィールド クラスを作成する
3. (オプション) ユーザー設定 XSLT スタイル シートを作成する
4. レンダリング コントロール クラスを作成する
5. レンダリング テンプレートを 1 つ以上作成する
6. (オプション) フィールド値の種類を作成する
7. (オプション) 編集コントロールを作成する
8. 要素を展開する
モバイル デバイス向けフィールド レンダリングとコンピューター向けフィールド レンダリングの違い
このトピックでは、ユーザー設定フィールド型を作成して、リスト ビュー、表示フォーム、新規作成フォーム、および編集フォームにレンダリングする方法を定義する方法の概要について説明します。
ユーザー設定フィールドを作成し、そのレンダリング方法を定義する具体的な例については、「[ウォークスルー] ユーザー設定フィールド型を作成する」を参照してください。
1. フィールド型定義を作成する
フィールド型定義は、フィールド型を登録し、フィールドを正しくレンダリングするために Microsoft SharePoint Foundation に必要な情報を含んでいる XML ファイルです。最も重要な点は、定義にはコンパイルされたフィールド型を含むアセンブリに関する情報が含まれるということです。
フィールド型定義の詳細については、「[方法] ユーザー設定フィールド型の定義を作成する」を参照してください。
2. フィールド クラスを作成する
フィールド クラスは、そのインスタンスによって、ユーザー設定フィールド型に基づいている特定のフィールドを表すことができるクラスのことです。このクラスは、SPField またはそこから派生した SharePoint Foundation のいずれかのクラスから継承する必要があります。このクラスは、厳密な名前を持つアセンブリにコンパイルして、グローバル アセンブリ キャッシュに展開します。リスト ビューの場合、SPField オブジェクトは、列と、たとえば、並べ替えできるかを示すプロパティを表します。表示モード、新規作成モード、および編集モードの場合、SPField オブジェクトは、リスト アイテムの特定のフィールド、つまりリストを構成している表内のセル、およびコンテンツ データベースでのそのセルの値を表します。
必要に応じて、このクラスには、フィールド型に対するユーザー設定データの入力規則を格納できます。ユーザー設定入力規則の詳細については、「ユーザー設定フィールド データ入力規則」を参照してください。
ユーザー設定フィールド クラスの詳細については、「[方法] ユーザー設定フィールド クラスを作成する」を参照してください。
3. (オプション) ユーザー設定 XSLT スタイル シートを作成する
SharePoint Foundation でリスト ビューにフィールドをレンダリングする標準の方法は、XSLT スタイル シートを使用する方法です。既定では、SharePoint Foundation の組み込みスタイル シートによって、フィールドの値がプレーン テキストでレンダリングされます。リスト ビューで異なる種類のレンダリングを使用する場合、ユーザーのシステムでユーザー設定フィールドをレンダリングする 1 つの基本要素は、ユーザー設定 XSLT スタイル シートです。パターン fldtypes_*.xsl でそのスタイル シートに名前を付け、%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATES\LAYOUTS\XSL に展開します。ユーザー設定スタイル シートは、既定のスタイル シートよりも優先されます。
リスト ビューの列の最上部にあるヘッダーも、XSLT スタイル シートによってレンダリングされます。同様に、ユーザー設定フィールド型の列ヘッダーを標準以外の方法でレンダリングする必要がある場合にだけ、新しいスタイル シートを作成して組み込みスタイル シートを無効にします。
ユーザー設定フィールド用の XSLT スタイル シートを作成する方法については、「[方法] リスト ビューでのフィールドのレンダリングをカスタマイズする」を参照してください。
注意
以前のバージョンの SharePoint Foundation で開発された従来のユーザー設定フィールド型があり、XSLT レンダリング インフラストラクチャによってそのフィールド型に提供される既定のレンダリングとは別の方法で、そのフィールド型をリスト ビューにレンダリングする場合は、そのフィールドの XSLT レンダリングを無効にすることができます。無効にするには、従来のユーザー設定フィールドの Collaborative Application Markup Language (CAML) 定義を含んでいる fldtypes*.xml ファイルで、FieldType 要素の子として、<Field Name="CAMLRendering">TRUE</Field> を追加します。この操作を実行すると、リスト ビューのフィールド (および列ヘッダー) は、RenderPattern に従ってレンダリングされます。詳細については、「RenderPattern 要素 (フィールド型)」を参照してください。
4. レンダリング コントロール クラスを作成する
レンダリング コントロール クラスは、レンダリング テンプレート (次のセクションを参照) と組み合わせて使用して、新規作成モード、編集モード、または表示モードでフィールドをレンダリングします。このクラスは、BaseFieldControl またはそこから派生した SharePoint Foundation のいずれかのクラスから継承する必要があります。このクラスは、フィールド クラスと同じアセンブリにコンパイルされます。
検証ロジックは、フィールド レンダリング コントロールの Validate、IsValid、および ErrorMessage の各メンバー、および基盤となるとなるフィールド型の GetValidatedString メソッドによって実行されます。(Validate が CreateChildControls によって呼び出される場合があります。)
レンダリング コントロールの詳細については、「[方法] フィールド レンダリング コントロールを作成する」を参照してください。
5. レンダリング テンプレートを 1 つ以上作成する
新規作成モード、編集モード、または表示モードでフィールドをレンダリングするには、すべてのフィールド レンダリング コントロールに、少なくとも 1 つのフィールド レンダリング テンプレートを関連付けます。この関連付けは、フィールド レンダリング コントロールのプロパティの 1 つに、フィールド レンダリング テンプレートの ID への参照を格納することで設定されます。レンダリング時には、SharePoint Foundation が %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES にある .ascx ファイル (Web アプリケーションの起動時にすべて読み込まれる) で宣言されているレンダリング テンプレートすべての ID を検索して、必要なテンプレートを参照します。レンダリング コントロールの CreateChildControls メソッドは、多くの場合フィールド レンダリングの最終仕上げにすぎず、レンダリング作業のほとんどはテンプレートによって行われます。通常、CreateChildControls メソッドを使用すると、新規作成モードでレンダリング コントロールの子コントロールに既定値が割り当てられます。また、編集モードと表示モードで子コントロールにフィールドの現在の値が割り当てられます。その他に、子 Label コントロールに CSS クラスを割り当てるといった、最終仕上げのレンダリング作業が行われます。
通常は、2 つのレンダリング テンプレートが必要になります。1 つは、新規作成モードおよび編集モードで編集可能なフォームにフィールドをレンダリングするテンプレートで、もう 1 つは、表示モードで読み取り専用フォームにフィールドをレンダリングするテンプレートです。ただし、3 つのモードすべてで同じレンダリング テンプレートを共有したり、各モードに個別のレンダリング テンプレートを用意することができます。特定の 1 つのモードに対して複数のテンプレートを作成し、特定のユーザー コンテキスト、フィールドが表示されるリストまたはサイトの種類のような、コンテキストの性質に基づいて呼び出すテンプレートを決定するロジックを追加できます。
レンダリング テンプレートの詳細については、「[方法] フィールド レンダリング テンプレートを作成する」を参照してください。
通常、新規作成モードおよび編集モードでは、編集可能なテキスト ボックス、チェック ボックス、ラジオ ボタン、子コントロールとしてのドロップダウン リスト コントロールなど、対話式コントロールが必要です。しかし表示モードでは、通常、Label コントロール、Literal コントロール、またはその他の静的表示コントロールだけが必要です。このため、多くの場合、表示モード用に別のレンダリング テンプレートを作成する必要があります。このテンプレートは、DisplayTemplateName プロパティに (ID で) 指定します。表示モードの外側で使用するためのメイン テンプレートは、TemplateName() プロパティによって指定します。
任意のコンテキストでフィールドのレンダリングに実際に使用されるレンダリング テンプレートは、レンダリング コントロールの ControlTemplate プロパティで返されるテンプレートです。このプロパティの get アクセサーは、次の判断基準を使用して、レンダリング コントロールに関連付けられたレンダリング テンプレートの中から選択します。
現在の HTTP コンテキスト
制御モード
フィールドが必須かどうか
フィールドが数値の場合、パーセンテージとしてレンダリングするかどうか
リスト アイテムがフォルダーかどうか
このプロパティを上書きし、get アクセサーで制御モードをチェックして、表示モードの場合は DisplayTemplate を返すようにすることができます (明示的に他のテンプレートに設定されていない限り、DisplayTemplate は、DisplayTemplateName で識別されるテンプレートを返します)。ControlTemplate の get アクセサーに他の決定ロジックが必要でない限り、新規モードまたは編集モードでは、基本プロパティの get アクセサーを呼び出すようにします。
注意
表示モードでのレンダリング テンプレートを指定する別の方法は、表示モードで、CreateChildControls メソッドを使用して DisplayTemplateName を TemplateName に割り当てる方法です。ControlTemplate は上書きされていない限り Template を返し、その get アクセサーは、上書きされていない限り TemplateName で識別されるテンプレートを返します。このように CreateChildControls メソッドを使用する場合に考えられる弱点は、デバッグ目的でオブジェクト モデルの ControlTemplate の値をチェックするときのような、フィールドがレンダリングされていないコンテキストではメソッドが実行されない点です。
6. (オプション) フィールド値の種類を作成する
フィールド データに対して特別なデータ構造を必要とするユーザー設定フィールド クラスを作成している場合、フィールド データを格納するための値クラス (または構造) を作成できます。
ユーザー設定値クラスの作成方法については、「[方法] ユーザー設定フィールド値クラスを作成する」を参照してください。
7. (オプション) 編集コントロールを作成する
すべてのフィールド型には、名前、データ型、説明のような、一般的なプロパティが必要ですが、多くのフィールド型には、特定の型のフィールドにのみ関係するプロパティもあります。ユーザーは、これらの可変プロパティを、フィールド型に基づく新しい列を作成するときに、ユーザー インターフェイス (UI) で設定します。通常、フィールド型定義 (このトピックの以前の記述を参照) の要素によって、これらのプロパティ設定コントロールをレンダリングする方法が決まります。ただし、特殊な編集コントロールが必要な場合があります。このようなコントロールは、ユーザー コントロール、つまり、分離コード ファイルを持つのが一般的な .ascx ファイルで定義します。複雑な計算ロジック、データ ソースの値の検索、ユーザーが新しい列を構成するときに選択する可能性がある値のユーザー設定データの入力規則のような、ユーザー設定機能を実行する必要がある場合、特殊な編集コントロールを作成することをお勧めします。
注意
可変プロパティの編集コントロールは、前に説明したレンダリング テンプレートの .ascx ファイルとは異なります。レンダリング テンプレートは、通常、列が既に定義されている既存のリストから特定のリスト アイテムを作成、編集、または表示するページにフィールドとその値をレンダリングします。一方、可変プロパティの編集コントロールは、フィールド型に基づいて列が作成されるときにそのフィールド型の特定のプロパティをレンダリングします。
ユーザー設定フィールド型のレンダリング、および可変プロパティの編集コントロールの詳細については、「ユーザー設定フィールド型のプロパティのレンダリング」および「フィールド型のプロパティ用のエディター コントロール」を参照してください。
8. 要素を展開する
作成したさまざまなクラスとファイルを展開する場所の詳細については、「ユーザー設定フィールド型の展開」を参照してください。
モバイル デバイス向けフィールド レンダリングとコンピューター向けフィールド レンダリングの違い
SharePoint Foundation では、モバイル デバイス用のユーザー設定フィールド レンダリング コントロールによるフィールドのレンダリングは、コンピューター用のユーザー設定フィールド レンダリング コントロールによるフィールドのレンダリングと似ていますが、次の相違点に注意してください。
モバイル ページは標準ページとはまったく別のページ群で、異なるセットの RenderingTemplate を参照します。
モバイルの RenderingTemplate は、DefaultTemplates.ascx ではなく、MobileDefaultTemplates.ascx で宣言されます。
モバイル フィールドのレンダリング コントロールには独自の名前空間、Microsoft.SharePoint.MobileControls (Microsoft.SharePoint.WebControls ではなく) があり、ASP.NET の、System.Web.UI.WebControls ではなく System.Web.UI.MobileControls のクラスから派生します。
モバイル フィールドのレンダリング コントロールの継承階層は、標準のフィールド レンダリング コントロールの継承階層とは若干異なります。たとえば、標準のフィールド レンダリングの TemplateBasedControl および FormComponent の機能は、SPMobileComponent クラスに結合されています。
モバイル コンテキスト向けに作成するカスタム フィールド レンダリング コントロールは、コンピューター ブラウザー向けに作成するカスタム フィールド レンダリング コントロールに比べ、フィールドをレンダリングするときにコントロールの CreateChildControls メソッドにより依存し、レンダリング テンプレートにはあまり依存しません。さらに、カスタム モバイル レンダリング コントロールの場合、CreateChildControls メソッドそのものを上書きすることはまれです。代わりに、通常は、CreateChildControls で呼び出される 4 つのメソッドのうちの 1 つ以上を上書きします。
モバイル ページ レンダリングとユーザー設定フィールドのレンダリング コントロールの詳細については、「モバイル ページのレンダリング システム」と「[ウォークスルー] モバイル ページのカスタム フィールド レンダリング コントロールを作成する」を参照してください。
関連項目
タスク
[ウォークスルー] モバイル ページのカスタム フィールド レンダリング コントロールを作成する