次の方法で共有


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

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

適用対象: SharePoint Foundation 2010

この記事の内容
ユーザー設定フィールド値クラスと共に使用されるコンストラクター
[Serializable] ディレクティブの使用
ユーザー設定フィールド クラスからユーザー設定フィールド値にアクセスする

フィールド データに対して特別なデータ構造を要求するユーザー設定フィールド クラスを作成した場合に、この構造がユーザー設定フィールド クラスの派生元の親フィールド クラスでサポートされていないときには、そのようなフィールド データを格納するためのフィールド値クラスを作成できます。

注意

ユーザー設定データ型は、クラスであると同時に構造体 (struct) である可能性があります。ただし、命令を単純にするために、Microsoft SharePoint Foundation 2010 Software Development Kit (SDK) では、常にクラスが使用されることを前提としています。

ユーザー設定フィールド値クラスは、特定のクラスから派生する必要はありません。これは、既にフィールド値クラスが関連付けられているフィールド クラスから派生されたユーザー設定フィールド クラスの場合でも同様です。たとえば、SPFieldMultiColumn クラスから継承するユーザー設定フィールド クラスを作成する場合、そのユーザー設定フィールド クラスのフィールド値クラスは、SPFieldMultiColumnValue クラスから継承しなくてもかまいません。

ユーザー設定値クラスには、次の名前付け規則を使用することを推奨します。

フィールドの種類名FieldValue

TargetDateFieldValue および RegularExpressionFieldValue は、適切に名前が付けられたクラスの例です (SharePoint Foundation に付属する特別な値クラスは、この名前付け規則が決定される以前に作成されたもので、SPFieldMultiColumnValue などのように、SPFieldフィールド型名Value というパターンになっています)。

ユーザー設定フィールド値クラスと共に使用されるコンストラクター

ユーザー設定フィールド値クラスは、少なくとも 2 つのコンストラクターを実装する必要があります。通常は 2 つのみ実装します。数少ない例外を除いて、1 つはパラメーターがなく、もう 1 つは String パラメーターをとります。2 番目のコンストラクターは、String をユーザー設定の型の値に変換します。ユーザー設定の型が複雑な場合、String には、解析を実行できる構造体が必要です。

クラスが、SPFieldフィールドの種類名Value クラスの 1 つから派生している場合、これらのコンストラクターは、通常、ベースのコンストラクターのみを呼び出します。次に、値クラスが別のクラスから派生する場合の、一般的な値クラス コンストラクターの例を示します。

public RegularExpressionFieldValue()
  : base() { }

public RegularExpressionFieldValue(string value)
  : base(value) { }
Public Sub New()
    MyBase.New()
End Sub

Public Sub New(ByVal value As String)
    MyBase.New(value)
End Sub

追加コンストラクターが必要な場合があります。たとえば、ユーザー設定の型が内部配列フィールドに基づいている場合、Int32 パラメーターを使用して、その配列メンバーを初期化せずに配列のサイズを初期化するコンストラクターが必要です。2 つの基本的なコンストラクターに追加パラメーターが必要な場合もあります。たとえば、ユーザー設定の型の値にコンテキスト相対コンポーネントが含まれている場合、SPContext パラメーターや、場合によっては、SPWeb または SPSite パラメーターを追加する必要があります。例については、SPFieldフィールドの種類名Value クラスのコンストラクターを参照してください。

[Serializable] ディレクティブの使用

ほとんどすべてのフィールド値クラス宣言には、オブジェクトをシリアル化できるように、[Serializable] ディレクティブが含まれている必要があります。つまり、このディレクティブをユーザー設定フィールド値クラスの宣言に追加する必要があります。ただし、クラスのオブジェクトの値がコンテキスト相対で、オブジェクトの値を意味のある方法で保存および復元できない場合は、その必要はありません。SPFieldLookupValue は、宣言で [Serializable] ディレクティブを使用しないフィールド値クラスの一例です。その型の値は、常に一時的です。

クラスに [Serializable] ディレクティブのマークを付ける場合、ToString メソッドを実装して、フィールド値をデータ格納用の文字列形式に変換する必要があります (ただし、クラスが別のフィールド値クラスを継承する場合、必ずしもそのメソッドを上書きする必要はありません)。

注意

SharePoint Foundation に付属のシリアル化が可能な 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) メソッドが呼び出されたときにユーザー設定フィールド値オブジェクトを返す必要があります。SharePoint Foundation は、SPListItem.this["field name"] メソッドが呼び出されたときにこのフィールド値オブジェクトを返します。多くの場合、String が空または NULL ではないことを確認した後の、このメソッドの上書きは、文字列パラメーターをとるユーザー設定フィールド値クラスのコンストラクターを呼び出すだけです (上の説明を参照)。

  • GetFieldValueAsText   フィールド データ値を文字列として返します。

  • GetFieldValueAsHtml   フィールド データ値を、HTML 形式の文字列として返します。この HTML 形式のフィールド値は、多くの場合、ページにフィールド値を直接レンダリングするときに使用されます。たとえば、リスト アイテムのバージョン履歴ページで使用されます。ただし、この HTML 形式のフィールド値は、表示フォームでは使用されません。表示フォームのフィールドのレンダリングは、通常、リスト ビューのレンダリングと同じで、フィールドの種類 fldtype*.xml ファイルの Collaborative Application Markup Language (CAML) DisplayPattern 要素からレンダリングされます。

  • GetValidatedString   このメソッドは、フィールドの種類の値オブジェクトを検証し、シリアル化された文字列に変換します。また、このメソッドは、フィールド値オブジェクトの ToString メソッドを使用して、フィールド値オブジェクトを文字列に変換することもあります。

  • PreviewValueTyped   表示および編集モードで、フィールド コントロールの設計時ビューにフィールド データのプレビュー値を返します。

関連項目

タスク

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

概念

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

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

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