クライアントの更新要求への応答
プロバイダでは、クライアント データセットまたは XML ブローカから受け取った Delta データ パケットに基づいて、データベース レコードに更新を適用します。 クライアントでは、(IAppServer インターフェイスを介して間接的に)ApplyUpdates メソッドを呼び出すことにより更新を要求します。
IAppServer インターフェイスを介して行われるあらゆるメソッド呼び出しの場合と同様に、プロバイダでは、ApplyUpdates の呼び出しの前後にクライアント データセットとの間で永続的な状態情報を通信できます。この通信は、BeforeApplyUpdates イベントおよび AfterApplyUpdates イベントのハンドラを使って行われます。
データセット プロバイダを使用している場合は、その他にもイベントが多数あるので、より細かく制御することができます。
データセット プロバイダが更新要求を受け取ると、OnUpdateData イベントが発生するので、その中で、更新の適用方法を決定できます。OnUpdateData イベントの発生後、プロバイダでは変更内容をデータベースまたはソース データセットに書き込みます。
プロバイダでは、更新をレコード単位で行います。 データセット プロバイダが各レコードに更新を適用する前に BeforeUpdateRecord イベントが発生するので、それを使用してエラーを解決できます。 通常、エラーが発生するのは、変更がサーバーの制約に違反したためや、プロバイダによりデータベース レコードが取得された後、更新の適用をクライアント データセットが要求する前に、そのデータベース レコードが別のアプリケーションで変更されたためです。
更新エラーは、データセット プロバイダかクライアント データセットのどちらかで処理することができます。 プロバイダが多層アプリケーションの一部になっている場合、解決するのにユーザーとのやり取りを必要としない更新エラーはすべて、プロバイダで処理しなければなりません。 プロバイダでは、エラー状況を解決できない場合、問題が発生したレコードのコピーを一時的に保存します。 レコードの処理が完了すると、プロバイダは、検出したエラーの件数をクライアント データセットに返し、未解決のレコードを結果データ パケットにコピーして、調停できるようクライアント データセットに返します。
すべてのプロバイダ イベントのイベント ハンドラには、更新内容のセットがクライアント データセットとして渡されます。 イベント ハンドラが特定の種類の更新のみ処理する場合は、レコードの更新ステータスに基づいてデータセットをフィルタリングすることができます。 レコードのフィルタリングにより、イベント ハンドラでは、使用しないレコードまでソートする必要はなくなります。 レコードの更新ステータスに基づいてクライアント データセットをフィルタリングするには、クライアント データセットの StatusFilter プロパティを設定します。
メモ: 単一のテーブルを表していないデータセットが更新の対象になる場合、アプリケーションでは特別なサポートを提供する必要があります。