クライアントの更新リクエストに応答する
プロバイダは,クライアントデータセットまたは XML ブローカから受け取った Delta データパケットに基づいて,データベースレコードに更新を適用します。クライアントは,ApplyUpdates メソッドを呼び出すことによって(IAppServer インターフェースを介して間接的に)更新を要求します。
IAppServer インターフェースを介して行われるすべてのメソッド呼び出しと同様に,プロバイダはApplyUpdates 呼び出しの前後に,クライアントデータセットとの間で持続的ステート情報を通信できます。この通信は,Provider.BeforeApplyUpdates と Provider.AfterApplyUpdates イベントハンドラを介して行われます。
データセットプロバイダを使用している場合,追加イベントが多数あれば制御できる範囲が広がります。
データセットプロバイダは更新リクエストを受け取ると OnUpdateData イベントを発生させます。このイベントでは,Delta パケットがデータセットに書き込まれたり,更新の適用方法に反映される前に,Delta パケットを編集できます。OnUpdateData イベントの発生後,プロバイダは変更をデータベースまたはソースデータセットに書き込みます。
プロバイダは,更新をレコード単位で行います。データセットプロバイダは各レコードに適用する前に,BeforeUpdateRecord イベントを発生させます。これを使用すると,更新が適用される前に更新内容を選別できます。レコードの更新時にエラーが起きると,プロバイダは OnUpdateError イベントハンドラを受信して,エラーを解決します。通常エラー発生の原因は,変更がサーバーの制約に違反したり,プロバイダがレコードを取り出した後クライアントデータセットが更新適用を要求する前に,別のアプリケーションがデータベースレコードを変更することです。
更新エラーは,データセットプロバイダまたはクライアントデータセットによって処理できます。プロバイダが多層アプリケーションの一部の場合,プロバイダは,解決のためにユーザーとの対話を必要としないすべての更新エラーを処理する必要があります。プロバイダがエラー条件を解決できない場合,プロバイダは違反レコードのコピーを一時的に格納します。レコードの処理が完了すると,プロバイダは検出したエラー数をクライアントデータセットに返し,未解決のレコードを結果データパケットにコピーして,調停のためクライアントデータセットに返します。
すべてのプロバイダイベントのイベントハンドラには,クライアントデータセットとして更新内容のセットが渡されます。イベントハンドラが一部の更新だけを処理する場合,レコードの更新ステータスに基づいてデータセットにフィルタをかけることができます。レコードにフィルタをかけると,イベントハンドラは使用しないレコードまでソートする必要がなくなります。レコードの更新ステータスに基づいてクライアントデータセットにフィルタをかけるには,StatusFilter プロパティを設定します。
メモ: 更新が 1 つのテーブルを表していないデータセットに送られる場合,アプリケーションは特別なサポートを提供する必要があります。