通常、文ベースのアップロード用の競合解決スクリプトは、リモート・データベースからアップロードされるローの古い値と新しい値にアクセスする必要があります。このイベントを使用すると、リモート・データベースからアップロードされるローの更新済みの新しい値を処理できます。
次の表の説明では、SQL データ型を示します。Java または .NET でスクリプトを作成する場合、適切なデータ型を使用してください。SQL データ型と Java データ型とSQL データ型と .NET データ型を参照してください。
SQL スクリプトでは、名前または疑問符を使用してイベント・パラメータを指定できますが、スクリプト内に名前と疑問符を混在させることはできません。疑問符を使用する場合、パラメータは以下に示す順に指定する必要があり、後続のパラメータが指定されていない場合のみ省略可能です (たとえば、パラメータ 2 を使用する場合は、パラメータ 1 を使用してください)。名前付きパラメータを使用する場合は、パラメータの任意のサブセットを任意の順に指定できます。
SQL スクリプトのパラメータ名 | 説明 | 順序 |
---|---|---|
s.remote_id |
VARCHAR(128)。Mobile Link リモート ID。名前付きパラメータを使用している場合のみ、リモート ID を参照できます。 |
適用不可 |
s.username |
VARCHAR(128)。Mobile Link ユーザ名。このパラメータは省略可能です。 |
省略可 |
r.pk-column-1 |
古い (更新前イメージ) ローからのカラム値。名前付きパラメータは、r. を前に付けたカラム名として指定されます。 |
1 (username を参照する場合は 2) |
... | ... | |
r.pk-column-N |
古い (更新前イメージ) ローからのカラム値。名前付きパラメータは、r. を前に付けたカラム名として指定されます。 |
N (username を参照する場合は N+1) |
r.column-1 |
古い (更新前イメージ) ローからのカラム値。名前付きパラメータは、r. を前に付けたカラム名として指定されます。 |
N + 1 (username を参照する場合は N+2) |
... | ... | ... |
r.column-M |
古い (更新前イメージ) ローからのカラム値。名前付きパラメータは、r. を前に付けたカラム名として指定されます。 |
N + M (username を参照する場合は N+M+1) |
なし
Mobile Link クライアントが更新済みのローを Mobile Link サーバに送信するときは、新しい値 (更新後イメージ) だけでなく、古いローの値 (更新前イメージ) のコピーも含まれています。更新前イメージが統合データベースの現在の値と一致しないと、競合が検出されます。
このイベントを使用すると、更新後イメージの値をテーブルに保存できます。このイベントは、文ベースの更新用の競合解決プロシージャ開発を支援するために使用できます。このイベントのパラメータは、対応する統合データベース・テーブルで更新が実行される前のリモート・データベースからの新しい値を保持しています。また、文ベースの強制的な競合モードで、ローを挿入するために使用されます。
このイベントのスクリプトは、resolve_conflict スクリプトが使用するテンポラリ・テーブルに新しいローを挿入する INSERT 文である場合がほとんどです。
リモート・データベースのテーブルごとに、upload_new_row_insert スクリプトを 1 つ指定できます。
Java アプリケーションと .NET アプリケーションの場合、このスクリプトは有効な SQL を返します。
この例は、リモート・データベース内の product テーブルに対する更新を処理します。このスクリプトは、ローの新しい値をグローバルなテンポラリ・テーブル product_conflict に挿入します。このテーブルの最後のカラムでは、ローが新しいローとして識別されます。
CALL ml_add_table_script( 'ver1', 'table1', 'upload_new_row_insert', 'INSERT INTO DBA.product_conflict( id, name, size, quantity, unit_price, row_type ) VALUES( {ml r.id}, {ml r.name}, {ml r.size}, {ml r.quantity}, {ml r.unit_price}, ''New'' )' ) |
次の Mobile Link システム・プロシージャ・コールは、スクリプト・バージョン ver1 を同期するときに、uploadNewRowInsertTable という Java メソッドを upload_new_row_insert テーブル・イベント用のスクリプトとして登録します。
CALL ml_add_java_table_script( 'ver1', 'table1', 'upload_new_row_insert', 'ExamplePackage.ExampleClass.uploadNewRowInsertTable' ) |
次に示すのは、サンプルの Java メソッド uploadNewRowInsertTable です。このメソッドは、INSERT 文を動的に生成します。これは SQL Anywhere 統合データベース用の構文です。
public String uploadNewRowInsertTable() { return("insert into" + _curTable + "_new" + getCols(_curTable) + "values" + getNamedParams(_curTable)); } |
次の Mobile Link システム・プロシージャ・コールは、スクリプト・バージョン ver1 を同期するときに、UploadNewRowInsertTable という .NET メソッドを upload_new_row_insert テーブル・イベント用のスクリプトとして登録します。
CALL ml_add_dnet_table_script( 'ver1', 'table1', 'upload_new_row_insert', 'TestScripts.Test.UploadNewRowInsertTable' ) |
次に示すのは、サンプルの .NET メソッド UploadNewRowInsertTable です。このメソッドは、INSERT 文を動的に生成します。これは SQL Anywhere 統合データベース用の構文です。
public string UploadNewRowInsertTable() { return("insert into" + _curTable + "_new" + GetCols(_curTable) + "values" + GetNamedParams(_curTable)); } |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |