Mobile Link サーバが upload_fetch スクリプトを使用して競合を検出すると、次のイベントが発生します。
Mobile Link サーバは、リモート・データベースからアップロードされた古いロー値を upload_old_row_insert スクリプトの定義に従って挿入します。通常、古い値はテンポラリ・テーブルに挿入されます。
upload_old_row_insert テーブル・イベントを参照してください。
Mobile Link サーバは、リモート・データベースからアップロードされた新しいロー値を upload_new_row_insert スクリプトの定義に従って挿入します。通常、新しい値はテンポラリ・テーブルに挿入されます。
upload_new_row_insert テーブル・イベントを参照してください。
Mobile Link サーバは、resolve_conflict スクリプトを実行します。このスクリプトでは、ストアド・プロシージャを呼び出したり、実行手順の順序を定義したりすることによって、新しいロー値と古いロー値を使用して競合を解決できます。
詳細については、resolve_conflict テーブル・イベントを参照してください。
次の例では、6 つのイベントに対してスクリプトを作成し、次にストアド・プロシージャを作成します。
begin_synchronization スクリプトでは、contact_new と contact_old という 2 つのテンポラリ・テーブルを作成します。(begin_connection スクリプトでこれを行うこともできます)。
upload_fetch スクリプトは、競合を検出します。
競合がある場合、upload_old_row_insert スクリプトと upload_new_row_insert スクリプトは、リモート・データベースからアップロードした新しいデータと古いデータを使用して、2 つのテンポラリ・テーブルを設定します。
resolve_conflict スクリプトは、MLResolveContactConflict ストアド・プロシージャを呼び出して、競合を解決します。
イベント | スクリプト | ||
---|---|---|---|
begin_synchronization |
|
||
upload_fetch |
|
||
upload_old_row_insert |
|
||
upload_new_row_insert |
|
||
resolve_conflict |
|
||
end_synchronization |
|
MLResolveContactConflict ストアド・プロシージャは次のとおりです。
CREATE PROCEDURE MLResolveContactConflict( ) BEGIN --update the consolidated database only if the new contact date --is later than the existing contact date UPDATE contact c SET c.contact_date = cn.contact_date FROM #contact_new cn WHERE c.id = cn.id AND cn.contact_date > c.contact_date; --cleanup DELETE FROM #contact_new; DELETE FROM #contact_old; END |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |