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

 

upload_fetch (Tabellenereignis)

Ruft Zeilen aus einer synchronisierten Tabelle in der konsolidierten Datenbank ab, um Konflikte auf Zeilenebene zu ermitteln.

Parameter

Parametername für SQL-Skripten

Reihenfolge

r.Primärschlüssel-1

1

r.Primärschlüssel-2

2

...

...

r.Primärschlüssel-N

N
Standardaktion

Keine.

Bemerkungen

Das anwendungsbasierte Skript upload_fetch ruft Zeilen aus einer synchronisierten Tabelle ab, um nach Konflikten zu suchen. Es ist ein Begleitskript des Ereignisses upload_update.

Die Spalten der Ergebnismenge müssen mit der Anzahl der aus der entfernten Datenbank für diese Tabelle übertragenen Spalten übereinstimmen. Wenn die zurückgegebenen Werte nicht mit dem Pre-Image in der übertragenen Zeile übereinstimmen, gilt dies als Konflikt.

Verwenden Sie keine READPAST-Tabellen-Hints in upload_fetch-Skripten. Wenn das Skript eine gesperrte Zeile mit READPAST überspringt, nimmt die Synchronisationslogik an, dass die Zeile gelöscht wurde. Abhängig von den definierten Skripten wird entweder die hochgeladene Aktualisierung ignoriert oder die Konfliktlösung ausgelöst. Ein Ignorieren der Aktualisierung ist ein nicht akzeptables, gefährliches Verhalten. Das Auslösen einer Konfliktlösung stellt, je nach implementierter Lösungslogik, kein Problem dar.

Für jede Tabelle in der entfernten Datenbank kann ein upload-fetch- oder ein upload_fetch_column_conflict-Skript vorhanden sein.

Dieses Skript wird eventuell ignoriert, wenn keines der folgenden Skripte definiert wurde: upload_new_row_insert, upload_old_row_insert und resolve_conflict.

Siehe auch
SQL-Beispiel

Das folgende SQL-Skriptbeispiel stammt aus dem Contact-Beispiel und befindet sich unter Beispielverzeichnis\MobiLink\Contact\build_consol.sql. Hiermit werden Konflikte erkannt, die auftreten, wenn Zeilen übertragen werden, die in der Tabelle Product der entfernten Datenbank aktualisiert wurden. Mit diesem Skript werden Zeilen aus der Tabelle Product ausgewählt, jedoch abhängig vom Schema Ihrer konsolidierten und entfernten Datenbank können die beiden Tabellennamen unterschiedlich sein.

CALL ml_add_table_script(
  'ver1',
  'Product',
  'upload_fetch',
  'SELECT id, name, size, quantity, unit_price
   FROM Product 
   WHERE id={ml r.id}' )
Java-Beispiel

Dieses Skript muss gültigen SQL-Code zurückgeben.

Der folgende Aufruf einer MobiLink-Systemprozedur registriert eine Java-Methode namens uploadFetchTable als das Skript für das Tabellenereignis upload_fetch, wenn die Skriptversion ver1 synchronisiert wird.

CALL ml_add_java_table_script(
  'ver1',
  'Product',
  'upload_fetch',
  'ExamplePackage.ExampleClass.uploadFetchTable' )

Im Folgenden sehen Sie die Java-Beispielmethode uploadFetchTable. Sie ruft genUF auf, um dynamisch eine UPLOAD-Anweisung zu generieren.

public String uploadFetchTable() {
  return( genUF(_curTable) ); 
}
.NET-Beispiel

Dieses Skript muss gültigen SQL-Code zurückgeben.

Der folgende Aufruf einer MobiLink-Systemprozedur registriert eine .NET-Methode namens UploadFetchTable als das Skript für das Tabellenereignis upload_fetch, wenn die Skriptversion ver1 synchronisiert wird.

CALL ml_add_dnet_table_script(
  'ver1',
  'Product',
  'upload_fetch',
  'TestScripts.Test.UploadFetchTable' )

Im Folgenden sehen Sie die .NET-Beispielmethode UploadFetchTable. Sie ruft GenUF auf, um dynamisch eine UPLOAD-Anweisung zu generieren.

public string UploadFetchTable() {
  return( GenUF(_curTable) ); 
}