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 - Erste Orientierung » Einführung in die MobiLink-Technologie » Einführungen in das MobiLink-Beispiel CustDB » CustDB synchronisieren

 

Bestellungen im Beispiel CustDB synchronisieren

Geschäftsregeln

Die Geschäftsregeln für die Tabelle ULOrder lauten folgendermaßen:

  • Bestellungen werden nur heruntergeladen, wenn sie nicht bestätigt sind oder der Status NULL ist.

  • Bestellungen können sowohl in der konsolidierten als auch in der entfernten Datenbank geändert werden.

  • Jede entfernte Datenbank enthält nur die Bestellungen, die einem Mitarbeiter zugeordnet sind.

Downloads

Bestellungen können in der konsolidierten Datenbank eingefügt, gelöscht oder aktualisiert werden. Die entsprechenden Skripten für diese Vorgänge lauten folgendermaßen:

  • download_cursor   Der erste Parameter im download_cursor-Skript ist der Zeitstempel des letzten Downloads. Er stellt sicher, dass nur Zeilen übertragen werden, die auf der entfernten oder der konsolidierten Datenbank seit der letzten Synchronisation geändert wurden. Der zweite Parameter ist die Mitarbeiter-ID. Mit ihr wird ermittelt, welche Zeilen übertragen werden sollen.

    Das download_cursor-Skript für CustDB sieht wie folgt aus:

    CALL ULOrderDownload( {ml s.last_table_download}, {ml s.username} )

    Die ULOrderDownload-Prozedur für CustDB sieht wie folgt aus:

    CREATE PROCEDURE ULOrderDownload ( IN LastDownload timestamp, IN EmployeeID integer )
    BEGIN`
      SELECT o.order_id, o.cust_id, o.prod_id, o.emp_id, o.disc, o.quant, o.notes, o.status
        FROM ULOrder o, ULEmpCust ec
        WHERE o.cust_id = ec.cust_id
        AND ec.emp_id = EmployeeID
        AND ( o.last_modified >= LastDownload
        OR ec.last_modified >= LastDownload)
        AND ( o.status IS NULL  OR  o.status != 'Approved' )
        AND ( ec.action IS NULL )
    END

  • download_delete_cursor   Das download_delete_cursor-Skript für CustDB sieht wie folgt aus:
    SELECT o.order_id, o.cust_id, o.prod_id, o.emp_id, o.disc, o.quant, o.notes, o.status
        FROM ULOrder o, dba.ULEmpCust ec
      WHERE o.cust_id = ec.cust_id 
        AND ( ( o.status = ''Approved'' AND o.last_modified >= {ml s.last_table_download} ) 
        OR ( ec.action = ''D''  )  )
        AND ec.emp_id = {ml s.username}

Uploads

Bestellungen können in der entfernten Datenbank eingefügt, gelöscht oder aktualisiert werden. Die entsprechenden Skripten für diese Vorgänge lauten folgendermaßen:

  • upload_insert   Das upload_insert-Skript für CustDB sieht wie folgt aus:
    INSERT INTO ULOrder ( order_id, cust_id, prod_id, emp_id, disc, quant, notes, status )
       VALUES( {ml r.order_id, r.cust_id, r.prod_id, r.emp_id, r.disc, r.quant, r.notes, r.status } )

  • upload_update   Das upload_update-Skript für CustDB sieht wie folgt aus:
    UPDATE ULOrder 
      SET cust_id = {ml r.cust_id},
          prod_id = {ml r.prod_id},
          emp_id = {ml r.emp_id},
          disc = {ml r.disc},
          quant = {ml r.quant},
          notes = {ml r.notes},
          status = {ml r.status}
        WHERE order_id = {ml r.order_id}

  • upload_delete   Das upload_delete-Skript für CustDB sieht wie folgt aus:
    DELETE FROM ULOrder WHERE order_id = {ml r.order_id}

  • upload_fetch   Das upload_fetch-Skript für CustDB sieht wie folgt aus:
    SELECT order_id, cust_id, prod_id, emp_id, disc, quant, notes, status
       FROM ULOrder WHERE order_id = {ml r.order_id}

  • upload_old_row_insert   Das upload_old_row_insert-Skript für CustDB sieht wie folgt aus:
    INSERT INTO ULOldOrder ( order_id, cust_id, prod_id, emp_id, disc, quant, notes, status )
       VALUES( {ml r.order_id, r.cust_id, r.prod_id, r.emp_id, r.disc, r.quant, r.notes, r.status } )

  • upload_new_row_insert   Das upload_new_row_insert-Skript für CustDB sieht wie folgt aus:
    INSERT INTO ULNewOrder ( order_id, cust_id, prod_id, emp_id, disc, quant, notes, status )
       VALUES( {ml r.order_id, r.cust_id, r.prod_id, r.emp_id, r.disc, r.quant, r.notes, r.status } )

Konfliktlösung
  • resolve_conflict   Das resolve_conflict-Skript für CustDB sieht wie folgt aus:
    CALL ULResolveOrderConflict

    Die ULResolveOrderConflict-Prozedur für CustDB sieht wie folgt aus:

    CREATE PROCEDURE ULResolveOrderConflict()
    BEGIN
      -- approval overrides denial
      IF 'Approved' = (SELECT status FROM ULNewOrder) THEN
        UPDATE ULOrder o
        SET o.status = n.status, o.notes = n.notes
        FROM ULNewOrder n
        WHERE o.order_id = n.order_id;
      END IF;
      DELETE FROM ULOldOrder;
      DELETE FROM ULNewOrder;
    END