Web パーツ接続の概要
更新 : 2007 年 11 月
Web パーツのコントロール セットを使用すると、サーバー コントロール間に接続を作成できます。コントロールを接続することにより、接続されていない個々のコントロールを上回る総対価と実用性を実現できます。完全に統合された接続コンポーネント セットが提供されるため、最小限の手順でわずかなコード行を使用するだけで済み、基底となる複雑な操作やデータの同期を処理する必要がありません。既存の WebPart (またはサーバーやユーザー) コントロールを利用して接続を作成できます。接続可能なコントロールを使用すると、Web ページのマークアップで宣言された静的な定義済み接続に加え、コントロール間の動的接続を実行時にプログラムによって作成できます。また、実行時にコントロールを接続または切断したり、既存の接続を管理したりできるユーザー インターフェイス (UI) をユーザーに提供することもできます。
接続によって、ユーザーおよび開発者に利点がもたらされます。ユーザーは接続を使用して、別のわかりやすい方法でデータを表示できます。たとえば、Web サービスにアクセスして州の毎日の平均気温の履歴記録を返し、そのデータを表形式で一覧表示するサーバー コントロールを組み込んだアプリケーションを作成するとします。ユーザーが臨機応変にデータをさまざまな方法で表示したい場合は、表のデータを使用できるグラフ コントロールにこのサーバー コントロールを接続して、データをさまざまなグラフで表示できます。さらに、データを表で示すか、または気温データをグラフ コントロールに接続するかを選択できるオプションをユーザーに提供することもできます。データの表示を変えることにより、ユーザーは表形式のデータでは捉えることが難しい、気温の別の傾向や関連について認識できる可能性があります。
開発者は接続を使用して、コードを再利用したり、単独のコントロールの機能を組み合わせたりする可能性を探ることができます。たとえば、郵便番号を含むユーザーの住所情報を保存するコントロールを作成し、ユーザーの注文時にはこの情報を送付先住所に入力できるようにします。次に、郵便番号によって変わるその他のコントロール (たとえばユーザーの居住地域の天気情報やニュースの見出しを表示する各コントロール)、および所定の郵便番号からカテゴリ別にビジネスを検索するコントロールを追加します。この場合、開発者は、郵便番号を保存する同じ機能を持つ新しいコントロールを個々に設計するのではなく、郵便番号の入力を要求する各コントロールを設計できます。この後で、郵便番号を既に保存しているコントロールを、郵便番号を入力として使用する天気、ニュース、ビジネス リストの各コントロールに接続します。各コントロールを接続することにより、元のコントロールの実用性を高めることができると同時に、新しいコントロールのコードを簡潔にできます。
接続の概念
Web パーツの接続は、2 つのサーバー コントロール間のリンクまたは関連付けのことで、これらのコントロールがデータを共有できるようにするものです。接続では必ず 2 つのコントロールを使用します。1 つはデータのプロバイダで、もう 1 つはプロバイダのデータのコンシューマです。コントロールはコンシューマになることもプロバイダになることもできます。また、あらゆる種類のサーバー コントロールは、WebPart コントロール、カスタム コントロール、またはユーザー コントロールのどの場合であっても、接続で使用するように設計できます。既定では、プロバイダ コントロールは同時に複数のコンシューマと接続を確立できます。たとえば、上記の例の郵便番号コントロールは、天気情報コントロール、ニュースの見出しコントロール、およびビジネス リスト コントロールに郵便番号を提供します。既定では、コンシューマ コントロールは一度に 1 つのプロバイダにのみ接続できます。
接続は、常に Web パーツ アプリケーションのコンテキスト内で実行されます。つまり、接続で使用する 2 つのサーバー コントロールの他に、少なくとも 2 つのコントロールが Web ページに必要です。そのうちの 1 つは WebPartManager コントロールで、Web パーツ コントロールを含むすべてのページに示されます。次に必要なコントロールは WebPartZoneBase クラスを継承するゾーンで、たとえば WebPartZone コントロールなどです。接続を作成するには、2 つのサーバー コントロールが WebPartZoneBase 型のゾーンの中に置かれている必要があります。
接続関係については、各コンシューマと各プロバイダに、コネクション ポイントと呼ばれるオブジェクトを少なくとも 1 つ関連付けます。コネクション ポイントには、ConnectionPoint クラスに基づいて、サーバー コントロールを別のコントロールに接続するために必要な詳細情報が含まれています。これには、コントロール自体の種類、コントロールが認識するデータ型、コネクション ポイント オブジェクトの ID、コントロールが複数の接続を作成できるかどうかなどの情報が含まれます。サーバー コントロールは、複数のコネクション ポイントを持つことができます。プロバイダのコネクション ポイントは ProviderConnectionPoint クラスのインスタンスで定義され、コンシューマのコネクション ポイントは ConsumerConnectionPoint クラスのインスタンスで定義されます。
接続を作成するには、コンシューマとプロバイダの両方が同じデータ型を認識する必要があります。Web パーツ接続では、データはインターフェイス インスタンスを使用して渡されます。コントロールが認識するデータ型は、InterfaceType プロパティのコントロールに関連付けられたコネクション ポイントで指定されます。プロバイダとコンシューマが同じ型のデータを認識する場合、両者は互換性があります。プロバイダとコンシューマに互換性がない場合、開発者は特別なトランスフォーマ オブジェクトを使用して、プロバイダのデータをコンシューマが使用できるフォームに変換する必要があります。この変換オブジェクトは、WebPartTransformer 基本クラスを継承します。開発者は、基本クラスを継承してカスタム トランスフォーマを開発することも、提供されているトランスフォーマ オブジェクトのどちらか 1 つ (RowToFieldTransformer または RowToParametersTransformer) を使用することもできます。
接続は、作成されると WebPartConnection オブジェクトに含まれます。接続オブジェクトは、接続に関する詳細情報 (そのコンシューマ オブジェクトおよびプロバイダ オブジェクトへの参照、コンシューマおよびプロバイダの ID、あらゆるコネクション ポイントへの参照とその ID、接続に関連付けられたトランスフォーマへの参照など)、および接続状態に関する詳細情報 (接続がアクティブかどうか、および接続が静的か動的か) をすべてカプセル化します。
ConnectionsZone コントロールを使用することにより、ユーザーに接続を作成および管理できる方法を提供できます。<asp:connectionszone> 要素を Web ページで宣言できます。この要素は実行時 UI をユーザーに提供し、ユーザーがコントロールを接続または切断したり、特定の接続の詳細内容を設定したりできるようにします。
接続のしくみ
Web パーツ接続は、コンシューマがプロバイダからデータを取得する、接続の "プル" モデルに基づいています。接続を作成するには、データ プロバイダとして機能するコントロールで、このコントロールが提供できるデータを示す通信コントラクトを定義します。コンシューマとして機能し、通信コントラクトを認識する別のコントロールがそのデータを取得します。
接続を確立する方法は特別なコールバック メソッドです。1 つはコンシューマのメソッドで、1 つはプロバイダのメソッドです。ただし、Web パーツ コントロール セットはすべてのコールバックと通信を詳細に処理するため、開発者は最小限の手順を実行するだけです。最も簡単な方法を使用する場合、開発者が行う必要のある操作は、プロバイダのメソッドをコールバック メソッドとして使用するように選択し、ConnectionProvider 属性を使ってソース コードでそれをマークするだけです。次に、このメソッド内から、コンシューマに渡すデータを含むインターフェイス インスタンスを返します。このインターフェイス インスタンスは、郵便番号などの文字列値を含む単一のプロパティなどのように、非常に簡単なものにできます。プロバイダは、提供されているインターフェイス (IWebPartField、IWebPartRow、または IWebPartTable) のどれか 1 つを実装できます。ただしほとんどの場合は、コンシューマと共有するデータを含む 1 つ以上のプロパティまたはメソッドを指定して簡単なカスタム インターフェイスを作成し、そのインターフェイスをプロバイダに実装することをお勧めします。コンシューマのコールバック メソッドは、インターフェイスのインスタンスをプロバイダから取得します。既述したように、開発者が行う必要のある操作は、ConnectionConsumer 属性を使用して、インターフェイス インスタンスを取得するコンシューマのメソッドを特定し、処理およびレンダリング用の内部変数にそれを割り当てるだけです。プロバイダからのデータは、ページおよびコントロールの処理期間のプリレンダリングの段階で渡されるため、プリレンダリングが完了した後で、コンシューマのデータを処理して論理を更新するように計画する必要があります。
メモ : |
---|
既に説明したように、コンシューマとプロバイダはインターフェイスの型について互換性があることが必要です。互換性がない場合は、WebPartTransformer オブジェクトを使用して接続を確立する必要があります。 |
データが交換されるパイプラインが、コンシューマとプロバイダのコネクション ポイントです。コントロールのコネクション ポイントは、いくつかの方法で作成できます。既に説明したように、ConnectionConsumerAttribute クラスまたは ConnectionProviderAttribute クラスを使用して、コネクション ポイントを作成できます。この方法では、ソース コードのコンシューマのコールバック メソッドに ConnectionConsumer 属性を追加できます。同様に、プロバイダのコールバック メソッドにも ConnectionProvider 属性を追加できます。これにより、それぞれのコールバック メソッドを特定でき、ID や表示名 (ユーザーが接続を作成するための UI に表示されます) などコネクション ポイントに関する詳細を指定できます。別の方法として、ConnectionPoint を継承してカスタム コネクション ポイントを作成したり、ConsumerConnectionPoint クラスまたは ProviderConnectionPoint クラスを使用または継承したりできます。既に説明したように、コンシューマまたはプロバイダとして機能するコントロールは、複数のコネクション ポイントを持つことができます。
コントロール間の接続は、静的または動的のどちらかになります。静的接続はホスト ページに宣言によってコード化され、ページのプリレンダリング フェーズで作成されます。これにより、ユーザーがページを表示した時点で、接続を確実にアクティブにできます。カスタマイズ例については、「方法 : 2 つの Web パーツ コントロール間の静的接続を宣言する」を参照してください。動的接続は、コントロールのコードでプログラムによって作成することも、ホスト ページで宣言によって作成することもできます。互換性のある 2 つのサーバー コントロールを Web ページ上の WebPartZoneBase ゾーン内で宣言し、ConnectionsZone コントロールのインスタンスをページ上で宣言すると、ユーザーは実行時にコントロール間に動的接続を作成し、設定できます。
Web パーツの接続と ASP.NET のその他の機能
接続は、Web アプリケーション内のコントロール間で情報を転送する ASP.NET のその他の手法といくつかの点で異なります。
接続は Web パーツの機能です。接続できるコントロールは、Web パーツ接続用に設計され、WebPartZoneBase ゾーン内に置かれているものだけです。
メモ : 既に説明したように、すべての ASP.NET サーバー コントロール、カスタム コントロール、またはユーザー コントロールを Web パーツ コントロールとして使用して接続を利用できます。
接続はデータ バインディングとは異なります。Web パーツ ゾーン内のコントロール間の接続では、インターフェイスを使用してコントロール間のコントラクトを作成します。データ バインディングは、コントロールとストレージ デバイス、またはコントロールとバックエンド データベース間の接続です。Web パーツ接続では、データはページ上のコントロール間だけを移動します。
接続はパーソナル化できます。接続しているコントロールを示す接続設定は、他のパーソナル化データと共に安全に格納できます。パーソナル化の詳細については、「Web パーツのパーソナル化の概要」を参照してください。
必須の接続クラス
次の表は、Web パーツ コントロール セットの 3 つのコンポーネントを示しています。これらは接続に不可欠なコンポーネントであり、接続を使用するときには常に、直接または間接的に使用します。
Web パーツ コントロール |
説明 |
---|---|
ページ上の Web パーツ ゾーンにあるコントロール間のすべての接続を管理します。どの Web パーツ ページにも必要なコントロールは、WebPartManager コントロール 1 つだけです。 |
|
WebPartZoneBase 基本クラスは、サーバー コントロールの接続およびデータ交換を行うために必要なコンテキストを提供します。この基本クラスを継承してカスタム ゾーンを作成することも、WebPartZone コントロールを実際のゾーンとして使用し、接続で使用するサーバー コントロールを含めることもできます。 |
|
プロバイダおよびコンシューマへの参照を持つ接続、および接続に必要な他のすべてのコンポーネントを表します。 |
|
ConnectionPoint 基本クラスは、コンシューマまたはプロバイダに関連付けられたオブジェクトを定義し、データ交換に必要な詳細情報を含みます。ProviderConnectionPoint はプロバイダに関連付けられ、ConsumerConnectionPoint はコンシューマに関連付けられます。 |
|
ユーザーが実行時にサーバー コントロール間の動的接続を作成できるようにする UI を提供します。 |
参照
処理手順
方法 : 2 つの Web パーツ コントロール間の静的接続を宣言する