Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » MobiLink - Serveradministration » MobiLink-Ereignisse » Synchronisationsereignisse

 

resolve_conflict (Tabellenereignis)

Definiert einen Prozess zum Lösen eines Konflikts in einer bestimmten Tabelle.

Parameter

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

Standardaktion

Keine.

Bemerkungen

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.

Siehe auch
SQL-Beispiel

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;
Java-Beispiel

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 ); 
}
.NET-Beispiel

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 ); 
}