Definiert einen Prozess zum Lösen eines Konflikts in einer bestimmten Tabelle.
In der folgenden Tabelle stellt die Beschreibung den SQL-Datentyp bereit. Wenn Sie Ihr Skript in Java oder .NET schreiben, müssen Sie den entsprechenden Datentyp benutzen. Weitere Hinweise finden Sie unter SQL-Java-Datentypen und SQL-.NET-Datentypen.
In SQL-Skripten können Sie Ereignisparameter mit ihrem Namen oder mit einem Fragezeichen angeben. Namen und Fragezeichen dürfen jedoch in einem Skript nicht gemischt verwendet werden. Wenn Sie Fragezeichen verwenden, müssen die Parameter in der nachfolgend gezeigten Reihenfolge stehen und sind nur dann optional, wenn keine nachfolgenden Parameter angegeben wurden (z.B. müssen Sie Parameter 1 verwenden, wenn Sie Parameter 2 verwenden möchten). Wenn Sie benannte Parameter verwenden, können Sie beliebige Teilmengen der Parameter in beliebiger Reihenfolge angeben.
Parametername für SQL-Skripten |
Beschreibung |
Reihenfolge |
---|---|---|
s.remote_id | VARCHAR(128). Die entfernte ID von MobiLink. Sie können die entfernte ID nur dann referenzieren, wenn Sie benannte Parameter verwenden. | Nicht anwendbar |
s.username |
VARCHAR(128). Der MobiLink-Benutzername |
1 |
s.table |
VARCHAR(128). Der Tabellenname |
2 |
Keine.
Wenn eine Zeile in der entfernten Datenbank aktualisiert wird, speichert der MobiLink-Client eine Kopie der ursprünglichen Werte. Der Client sendet sowohl die alten als auch die neuen Werte an den MobiLink-Server.
Wenn der MobiLink-Server eine aktualisierte Zeile empfängt, vergleicht er die ursprünglichen Werte mit den vorhandenen Werten in der konsolidierten Datenbank. Der Vergleich wird mithilfe des Skripts upload_fetch durchgeführt.
Wenn die alten gesendeten Werte mit den aktuellen Werten in der konsolidierten Datenbank nicht übereinstimmen, verursacht die Zeile einen Konflikt. Anstatt die Zeile zu aktualisieren, fügt der MobiLink-Server den alten und den neuen Wert in die konsolidierte Datenbank ein. Die alte und die neue Zeile werden mit den Skripten upload_old_row_insert bzw. upload_new_row_insert verarbeitet.
Nachdem die Werte eingefügt wurden, führt der MobiLink-Server das Skript resolve_conflict aus. Mit diesem Skript kann der Konflikt gelöst werden. Sie können ein Schema Ihrer Wahl implementieren.
Dieses Skript wird einmal pro Konflikt ausgeführt.
Anstatt das Skript resolve_conflict zu definieren können Sie Konflikte in einer gruppenorientierten Weise lösen, indem Sie die Konfliktlösungslogik in Ihr end_upload_rows- oder Ihr end_upload-Tabellenskript aufnehmen.
Sie können für jede Tabelle in der entfernten Datenbank ein resolve_conflict-Skript benutzen.
Die folgende Anweisung definiert ein resolve_conflict-Skript, das für die CustDB-Beispielanwendung für eine Oracle-Installation geeignet ist. Es ruft die gespeicherte Prozedur ULResolveOrderConflict auf.
exec ml_add_table_script( 'custdb', 'ULOrder', 'resolve_conflict', 'begin ULResolveOrderConflict(); end; ') CREATE OR REPLACE PROCEDURE ULResolveOrderConflict() AS new_order_id integer; new_status varchar(20); new_notes varchar(50); BEGIN -- approval overrides denial SELECT order_id, status, notes INTO new_order_id, new_status, new_notes FROM ULNewOrder WHERE syncuser_id = SyncUserID; IF new_status = 'Approved' THEN UPDATE ULOrder o SET o.status = new_status, o.notes = new_notes WHERE o.order_id = new_order_id; END IF; DELETE FROM ULOldOrder; DELETE FROM ULNewOrder; END; |
Der folgende Aufruf einer MobiLink-Systemprozedur registriert eine Java-Methode namens resolveConflict als das Skript für das Tabellenereignis resolve_conflict, wenn die Skriptversion ver1 synchronisiert wird.
CALL ml_add_java_table_script( 'ver1', 'table1', 'resolve_conflict', 'ExamplePackage.ExampleClass.resolveConflict' ) |
Im Folgenden sehen Sie die Java-Beispielmethode resolveConflict. Sie ruft eine Java-Methode auf, die den Konflikt mit der JDBC-Verbindung löst, die von MobiLink bereitgestellt wird.
public String resolveConflict( String user, String table) { resolveRows(_syncConn, user ); } |
Der folgende Aufruf einer MobiLink-Systemprozedur registriert eine .NET-Methode namens ResolveConflict als das Skript für das Tabellenereignis resolve_conflict, wenn die Skriptversion ver1 synchronisiert wird.
CALL ml_add_dnet_table_script( 'ver1', 'table1', 'resolve_conflict', 'TestScripts.Test.ResolveConflict' ) |
Im Folgenden sehen Sie die .NET-Beispielmethode ResolveConflict. Sie ruft eine .NET-Methode auf, die den Konflikt löst.
public string ResolveConflict( String user, String table) { ResolveRows(_syncConn, user ); } |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |