カスタム イベントを利用したプロバイダとの通信
クライアント データセットは、Datasnap.Midas.IAppServer と呼ばれる特殊インターフェイスを介して、プロバイダ コンポーネントと通信します。 プロバイダがローカルの場合、IAppServer は自動生成オブジェクトへのインターフェイスとなり、このオブジェクトは、クライアント データセットとプロバイダ間のすべての通信を処理します。 プロバイダがリモートの場合、IAppServer はアプリケーション サーバー上のリモート データ モジュールへのインターフェイス、または、(SOAP サーバーの場合)接続コンポーネントによって生成されたインターフェイスとなります。
TClientDataSet は、IAppServer インターフェイスを使用した通信をカスタマイズする手段を提供します。 クライアント データセットのプロバイダで指示される各 IAppServer メソッド呼び出しの前後でTClientDataSet は特殊なイベントを受け取り、これにより、プロバイダと任意の情報をやり取りできるようになります。 これらのイベントは、プロバイダ上の同様のイベントとマッチングされます。 このため、たとえば、、クライアント データセットが ApplyUpdates メソッドを呼び出す際、次のイベントが発生します:
- クライアント データセットは BeforeApplyUpdates イベントを受け取り、そこで OwnerData と呼ばれる、OleVariant 内の任意のカスタム情報が指定されています。
- プロバイダは BeforeApplyUpdates イベントを受け取り、そこでクライアント データセットからの OwnerData に応答し、OwnerData の値を新しい情報に更新することができます。
- プロバイダは、データ パケットをアセンブルする通常の処理を行います(付随するすべてのイベントも含む)。
- プロバイダは AfterApplyUpdates イベントを受け取り、OwnerData の現在の値に応答し、それをクライアント データセットへの値に更新することができます。
- クライアント データセットは AfterApplyUpdates イベントを受け取り、OwnerData の戻り値に応答することができます。
その他の IAppServer メソッド呼び出しにもすべて、同様の BeforeXXX と AfterXXX のイベントのセットが伴い、カスタマイズすることができます。
さらに、クライアント データセットには特別なメソッド DataRequest があり、これの唯一の用途は、プロバイダとのアプリケーション固有の通信です。 クライアント データセットが DataRequest を呼び出すと、OleVariant をパラメータとして渡し、これには必要な任意の情報を含めることができます。 そして、これはプロバイダ上に OnDataRequest イベントを生成し、そこでアプリケーション定義の方法で応答し、クライアント データセットに値を返すことができます。