ユーザー設定フィールド値クラス
フィールド データに対して特別なデータ構造を要求するユーザー設定フィールド クラスを作成した場合に、この構造がユーザー設定フィールド クラスの派生元の親フィールド クラスでサポートされていないときには、そのようなフィールド データを格納するためのフィールド値クラスを作成できます。
注意
ユーザー設定データ型は、クラスであると同時に構造体である可能性があります。ただし、命令を単純にするために、Windows SharePoint Services 3.0 SDK では、常にクラスが使用されることを前提としています。
ユーザー設定フィールド値クラスは、特定のクラスから派生する必要はありません。これは、既にフィールド値クラスが関連付けられているフィールド クラスから派生されたユーザー設定フィールド クラスの場合でも同様です。たとえば、SPFieldMultiColumn クラスから継承するユーザー設定フィールド クラスを作成する場合、そのユーザー設定フィールド クラスのフィールド値クラスは、SPFieldMultiColumnValue クラスから継承しなくてもかまいません。
ユーザー設定値クラスには、次の名前付け規則を使用することを推奨します。
フィールドの種類名FieldValue
たとえば、TargetDateFieldValue、RegularExpressionFieldValue などです (Windows SharePoint Services 3.0 に付属の特別な値クラスは、この名前付け規則が指定される前に作成されたため、SPFieldMultiColumnValue のように、SPFieldフィールドの種類名Value というパターンになっています)。
ユーザー設定フィールド値クラスと共に使用されるコンストラクタ
ユーザー設定フィールド値クラスは、少なくとも 2 つのコンストラクタを実装する必要があります。通常は 2 つのみ実装します。数少ない例外を除いて、1 つはパラメータがなく、もう 1 つは String パラメータをとります。2 番目のコンストラクタは、String をユーザー設定の型の値に変換します。ユーザー設定の型が複雑な場合、String には、解析を実行できる構造体が必要です。
クラスが、SPFieldフィールドの種類名Value クラスの 1 つから派生している場合、これらのコンストラクタは、通常、ベースのコンストラクタのみを呼び出します。次に、値クラスが別のクラスから派生する場合の、一般的な値クラス コンストラクタの例を示します。
public RegularExpressionFieldValue()
: base() { }
public RegularExpressionFieldValue(string value)
: base(value) { }
追加コンストラクタが必要な場合があります。たとえば、ユーザー設定の型が内部配列フィールドに基づいている場合、Int32 パラメータを使用して、その配列メンバを初期化せずに配列のサイズを初期化するコンストラクタが必要です。2 つの基本的なコンストラクタに追加パラメータが必要な場合もあります。たとえば、ユーザー設定の型の値にコンテキスト相対コンポーネントが含まれている場合、SPContext パラメータや、場合によっては、SPWeb または SPSite パラメータを追加する必要があります。例については、SPFieldフィールドの種類名Value クラスのコンストラクタを参照してください。
[Serializable] ディレクティブの使用
ほとんどすべてのフィールド値クラス宣言には、オブジェクトをシリアル化できるように、[Serializable] ディレクティブが含まれている必要があります。つまり、追加する必要があります。ただし、クラスのオブジェクトの値がコンテキスト相対で、オブジェクトの値を意味のある方法で保存および復元できない場合は、その必要はありません。SPFieldLookupValue は、宣言で [Serializable] ディレクティブを使用しないフィールド値クラスの一例です。その型の値は、常に一時的です。
クラスに [Serializable] ディレクティブのマークを付ける場合、ToString メソッドを実装して、フィールド値をデータ格納用の文字列形式に変換する必要があります (ただし、クラスが別のフィールド値クラスを継承する場合、必ずしもそのメソッドを上書きする必要はありません)。
注意
Windows SharePoint Services 3.0 に付属のシリアル化が可能な SPFieldフィールドの種類名Value クラスはすべて、ISerialization クラスを実装せずに、ToString メソッドを上書きします。このパターンを推奨します。ISerialization インターフェイスを実装しないでください。
SerializableAttribute の詳細については、「SerializableAttribute」を参照してください。
ユーザー設定フィールド クラスからユーザー設定フィールド値にアクセスする
ユーザー設定フィールド値クラスを必要とするユーザー設定フィールド クラスは、通常、SPField クラスの 1 つ以上のメソッドとプロパティを上書きする必要があります。特に、ユーザー設定フィールド値オブジェクトを読み書きするメソッドとプロパティです。
注意
このほとんどのメンバについては、SPField で実装しても役に立ちません。たとえば、GetFieldValue は、渡された値を返すだけです。また、GetValidatedString は、値クラスの ToString メソッドを呼び出すだけです (検証ロジックは含まれていません)。この理由から、フィールドの種類のクラスが SPField から直接派生している場合は、その用途に必要なメンバ用の上書きが必要です。できるだけ、ユーザー設定フィールド クラスは、SPField を派生元とするクラスから派生させることをお勧めします。
DefaultValue 対象のリスト アイテムのフィールドに値がない場合に、フィールドに使用できる既定値を文字列として返します。
DefaultValueTyped 対象のリスト アイテムのフィールドに値がない場合に、フィールドに使用できる既定値を返します。
FieldValueType フィールド値の型を返します。
GetFieldValue 指定された文字列をフィールドの種類の値オブジェクトに変換します。ユーザー設定フィールド オブジェクトは、M:Microsoft.SharePoint.SPField.GetFieldValue(System.String) メソッドが呼び出されたときにユーザー設定フィールド値オブジェクトを返す必要があります。Windows SharePoint Services は、SPListItem.this["field name"] メソッドが呼び出されたときにこのフィールド値オブジェクトを返します。多くの場合、String が空または NULL ではないことを確認した後の、このメソッドの上書きは、文字列パラメータをとるユーザー設定フィールド値クラスのコンストラクタを呼び出すだけです (上の説明を参照)。
GetFieldValueAsText フィールド データ値を文字列として返します。
GetFieldValueAsHtml フィールド データ値を、HTML 形式の文字列として返します。この HTML 形式のフィールド値は、多くの場合、ページにフィールド値を直接レンダリングするときに使用されます。たとえば、リスト アイテムのバージョン履歴ページで使用されます。ただし、この HTML 形式のフィールド値は、表示フォームでは使用されません。表示フォームのフィールドのレンダリングは、通常、リスト ビューのレンダリングと同じで、フィールドの種類 fldtype*.xml ファイルの Collaborative Application Markup Language (CAML)DisplayPattern 要素からレンダリングされます。
GetValidatedString このメソッドは、フィールドの種類の値オブジェクトを検証し、シリアル化された文字列に変換します。また、このメソッドは、フィールド値オブジェクトの ToString メソッドを使用して、フィールド値オブジェクトを文字列に変換することもあります。
PreviewValueTyped 表示および編集モードで、フィールド コントロールの設計時ビューにフィールド データのプレビュー値を返します。