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