ユーザー設定フィールド型のプロパティのレンダリング
最終更新日: 2010年4月3日
適用対象: SharePoint Foundation 2010
フィールド型には、多くの共通する特性があります。たとえば、すべてのフィールド型には、フィールド型を並べ替えられるプロパティがあり、true または false に設定できます。一方、ユーザー設定フィールド型には、多くの場合、用途とフィールド型の基となるデータ型が指定されて初めて有効になる可変プロパティがあります。たとえば、正規表現のフィールド型の値が、指定された正規表現に一致する文字列であるとします。一致させる必要がある特定の正規表現は列ごとに異なります。このため、[サイト内の新しい列] ページ、[サイト内の列の変更] ページ、[列の作成] ページ、および [列の変更] ページにあるフィールド型に基づいて列を作成する場合、ユーザーが設定する必要があります。
フィールド プロパティをレンダリングする
フィールド エディター ユーザー コントロールとして動作する .ascx ページを作成して、フィールド型のプロパティのレンダリングを定義できます。これにより、ASCX コントロールの分離コード ページで、複雑な演算ロジック、データ ソースの値の検索、ユーザー設定データの検証などのユーザー設定データ処理ロジックを作成することができます。
フィールド エディター コントロールとして使用するコントロールは、フィールド型の定義 XML ファイルの Field 要素 (フィールド型) の Name 属性の値に "FieldEditorUserControl" を使用して指定します。以下に例を示します。
<Field Name="FieldEditorUserControl">
/_controltemplates/LookupFieldEditor.ascx
</Field>
特定のフィールド型クラスに指定できるのは、1 つのフィールド エディター コントロールだけです。フィールド エディター ユーザー コントロールが既に指定されているフィールド型クラス (検索フィールド型、ユーザー フィールド型など) から継承する場合、フィールド型の定義に別のフィールド エディター コントロールを指定すると、親クラスのフィールド エディター ユーザー コントロールは継承されません。親フィールド型のフィールド エディター コントロールを継承するには、フィールド型の定義に <Field Name="FieldEditorUserControl"> 要素を含めないようにするか、親フィールド型の定義で指定されている、まったく同一のコントロールを指定する必要があります。
注意
2 つの例外を除いて、エディター コントロールは、[サイト内の新しい列] ページ、[サイト内の列の変更] ページ、[列の作成] ページ、および [列の変更] ページでは、SharePoint Foundation に組み込まれているフィールド型の可変プロパティのレンダリングには使用されません (次のセクションで説明するように、どれも、使用されているフィールド型プロパティの従来のレンダリング方法ではありません)。代わりに、レンダリングはページ ファイル (FldNew.aspx など) 自体にハードコードされたマークアップになっています (例外となるのは、検索フィールド型とユーザー フィールド型であり、それらは両方ともエディター コントロールを使用します)。したがって、ユーザー設定フィールド クラスは、継承元の SharePoint Foundation クラスのフィールド型のプロパティのレンダリングに関する情報を継承できません (継承元が検索フィールド型またはユーザー フィールド型である場合は該当しない可能性があります)。たとえば、SPFieldText クラスからユーザー設定フィールド型を派生させた場合、新しいユーザー設定フィールド型には、列の作成者また編集者がフィールドの最大長を指定する ([サイト内の新しい列] ページ、[サイト内の列の変更] ページ、[列の作成] ページ、および [列の変更] ページ上の) テキスト ボックスに関するレンダリング情報は継承されません。親クラスのフィールド型のプロパティをレンダリングできるようにするには、フィールド エディター ユーザー コントロールを使用して、独自にレンダリングを指定する必要があります。
ユーザー設定フィールド型クラスがその親クラスからレンダリング情報を継承できるかどうかという問題のほかに、エディター コントロール自体が組み込みのエディター コントロールの 1 つから継承できるかという問題もあります。答えは "できない" です。フィールド エディター コントロール クラスは、SharePoint Foundation に付属する 2 種類のみのフィールド エディター コントロールである LookupFieldEditor コントロール クラスからも UserFieldEditor コントロール クラスからも継承できません。これらのクラスにはコードからはアクセスできません。
PropertySchema 要素を使用してフィールド プロパティをレンダリングする
以前のバージョンの SharePoint Foundation では、開発者がフィールド型プロパティのレンダリングに必ずしも ASCX エディター コントロールを使用するとは限りませんでした。このセクションでは、代わりの方法について説明します。この情報は、以前のバージョンの SharePoint Foundation プラットフォームで作成され、以前の方法を使用してフィールド型プロパティをレンダリングしているユーザー設定フィールド型のデバッグを支援する目的のためだけに提供されています。この方法を使用すると、従来のユーザー設定フィールドのレンダリングを引き続き適切に行うことができますが、この方法は、新しいユーザー設定フィールド プロジェクトでは使用しないことをお勧めします。この方法を使用すると、ユーザー設定フィールド型が将来のバージョンの SharePoint Foundation と対応する可能性が少なくなります。
fldtypes*.xml ファイルでのフィールド型の定義を作成するときは、各フィールド型プロパティを PropertySchema 要素内の Field 要素として定義できます。PropertySchema 要素にフィールド型プロパティを定義すると、そのプロパティは、スキーマに基づいて SharePoint Foundation によって自動的にレンダリングされます。
PropertySchema 要素には Fields 要素が含まれ、その中に、ユーザーが定義する各フィールド型プロパティの Field 要素が含まれます。各 Field 要素内では標準的な Collaborative Application Markup Language (CAML) を使用できます。ユーザー設定フィールド型の詳細については、「[方法] ユーザー設定フィールド型の定義を作成する」を参照してください。
この方法では、CAML を使用するときに使用できるレンダリング オプションが制限されます。フィールド型プロパティに対して、ユーザー設定処理または検証処理を指定することはできません。このため、この方法は、複雑な処理や検証ロジックを必要としない単純なフィールド型プロパティに適していました。
注意
これは、エンドユーザーが特定のリストの特定のリスト アイテムのフィールドに指定する、特定の値の検証についての説明ではないことに注意してください。ここでは、[サイト内の新しい列] ページ、[サイト内の列の変更] ページ、[列の作成] ページ、および [列の変更] ページのフィールド (列) セットのプロパティについて説明しています。列の作成者または編集者がフィールド プロパティの設定に使用する可能性がある値について検証が必要になることはほとんどありません。