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

SQL Anywhere 12.0.1 (Deutsch) » MobiLink - Erste Orientierung » Praktische Einführungen in MobiLink » Praktische Einführung: Einführung in MobiLink

 

Lektion 11: Skripten für die Erkennung und Lösung von Konflikten erstellen

In dieser Lektion wird davon ausgegangen, dass Sie bereits alle vorherigen Lektionen abgeschlossen haben. Siehe Lektion 1: Einrichten einer konsolidierten MobiLink-Datenbank.

In dieser Lektion fügen Sie die folgenden Skripten hinzu, um Konflikte zu erkennen und zu lösen:

  • upload_fetch   Sie verwenden dieses Skript für das Abrufen von Zeilen aus einer Tabelle in der konsolidierten Datenbank für die Konflikterkennung.

  • upload_update   Sie verwenden dieses Skript, um festzulegen, wie Daten, die in die entfernte Datenbank eingefügt werden, in der konsolidierten Datenbank übernommen werden. Sie können auch einen erweiterten Prototyp von upload_update für die Ermittlung von Updatekonflikten verwenden. Siehe upload_update (Tabellenereignis).

  • upload_old_row_insert   Mit diesem Skript können Sie alte Zeilenwerte verarbeiten, die von der entfernten Datenbank während der letzten Synchronisation abgerufen wurden. Siehe upload_old_row_insert (Tabellenereignis).

  • upload_new_row_insert   Mit diesem Skript verarbeiten Sie neue Zeilenwerte (die aktualisierten Werte in der entfernten Datenbank). Siehe upload_new_row_insert (Tabellenereignis).

  • upload_delete   Sie verwenden dieses Skript, um Zeilen zu verarbeiten, die aus der entfernten Datenbank gelöscht wurden. Der MobiLink-Server wird konfiguriert, dieses Ereignis für diese praktische Einführung zu ignorieren.

  • resolve_conflict   Das Konfliktlösungsskript wendet Geschäftslogik für die Lösung des Konflikts an. Siehe resolve_conflict (Tabellenereignis).

 Installieren von Skripten für die Konflikterkennung und -lösung
  1. Installieren Sie die Skripten für die Konflikterkennung und -lösung.

    Führen Sie die folgenden SQL-Anweisungen aus:



    /* upload_fetch */
    CALL ml_add_table_script( 'sync_mlintro_scriptversion', 'Product', 
        'upload_fetch',
        'SELECT name, quantity FROM Product WHERE name = {ml r.name}' );
    
    /* upload_update */
    CALL ml_add_table_script( 'sync_mlintro_scriptversion', 'Product',
        'upload_update',
        'UPDATE Product
            SET quantity = {ml r.quantity}, last_modified = now()
            WHERE name = {ml r.name}' );
    
    /* upload_old_row_insert */
    CALL ml_add_table_script( 'sync_mlintro_scriptversion', 'Product',
        'upload_old_row_insert',
        'INSERT INTO Product_old (name,quantity,last_modified)
            VALUES ({ml r.name}, {ml r.quantity}, now())');
    
    /* upload_new_row_insert */
    CALL ml_add_table_script( 'sync_mlintro_scriptversion', 'Product',
        'upload_new_row_insert',
        'INSERT INTO Product_new (name,quantity,last_modified)
            VALUES ({ml r.name}, {ml r.quantity}, now())');
    
    /* upload_delete */
    CALL ml_add_table_script( 'sync_mlintro_scriptversion', 'Product', 
        'upload_delete', '--{ml_ignore}');
    
    /* resolve_conflict */
    CALL ml_add_table_script( 'sync_mlintro_scriptversion', 'Product',
        'resolve_conflict',
        'DECLARE @product_name VARCHAR(128);
         DECLARE @old_rem_val INTEGER;
         DECLARE @new_rem_val INTEGER;
         DECLARE @curr_cons_val INTEGER; 
         DECLARE @resolved_value INTEGER;
    
         // obtain the product name
         SELECT name INTO @product_name FROM Product_old;
    
         // obtain the old remote value
         SELECT quantity INTO @old_rem_val FROM Product_old;
    
         //obtain the new remote value
         SELECT quantity INTO @new_rem_val FROM Product_new;
    
         // obtain the current value in cons
         SELECT quantity INTO @curr_cons_val FROM Product WHERE name = @product_name;
    
         // determine the resolved value
         SET @resolved_value = @curr_cons_val- (@old_rem_val - @new_rem_val);
    
         // update cons with the resolved value
         UPDATE Product
             SET quantity = @resolved_value
                 WHERE name = @product_name;
    
        // clear the old and new row tables
        DELETE FROM Product_new;
        DELETE FROM Product_old');
    
    COMMIT;
    Hinweis

    In dieser praktischen Einführung läuft der MobiLink-Server mit der -zf-Option, die es dem Server ermöglicht, Skripten zu erkennen, die während einer Synchronisation der konsolidierten Datenbank hinzugefügt wurden. Wenn diese Option nicht festgelegt ist, müssen Sie den MobiLink-Server stoppen, bevor Sie der konsolidierten Datenbank Skripten hinzufügen, und dann den Server nach dem Hinzufügen der neuen Skripten wieder starten.

  2. Fortfahren mit Lektion 12: Überprüfen von Konfliktskripten mithilfe des MobiLink-Monitors.

 Siehe auch