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 Contact » Das Beispiel Contact synchronisieren

 

Ansprechpartner im Beispiel Contact synchronisieren

Die Tabelle Contact enthält den Namen einer Person, die bei einem Kunden arbeitet, sowie einen Fremdschlüssel für den Kunden und eine eindeutige Ganzzahl zur Kennzeichung des Ansprechpartners. Sie enthält außerdem einen last_modified-Zeitstempel und eine Markierung, die anzeigt, ob der Kontakt aktiv ist.

Geschäftsregeln

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

  • Ansprechpartnerdaten können in der konsolidierten und in der entfernten Datenbank geändert werden.

  • Jede entfernte Datenbank enthält nur die Ansprechpartner, die für Kunden arbeiten, denen sie zugeordnet sind.

  • Wenn die Kundenzuordnung zwischen Vertriebsmitarbeitern geändert wird, müssen Ansprechpartner ebenfalls neu zugeordnet werden.

Trigger

Ein Trigger in der Customer-Tabelle wird dafür verwendet, die Ansprechpartner aufzunehmen, wenn Angaben zu einem Kunden geändert werden. Der Trigger ändert ausdrücklich die Spalte last_modified der jeweiligen Ansprechpartner, wenn der betreffende Kunde geändert wird:

CREATE TRIGGER UpdateCustomerForContact
AFTER UPDATE OF rep_id ORDER 1
ON DBA.Customer
REFERENCING OLD AS old_cust NEW as new_cust
FOR EACH ROW
BEGIN
  UPDATE Contact
  SET Contact.last_modified = new_cust.last_modified
  FROM Contact
  WHERE Contact.cust_id = new_cust.cust_id
END

Da alle Datensätze der Ansprechpartner aktualisiert werden, wenn ein Kunde geändert wird, verbindet der Trigger den Kunden und die ihm zugewiesenen Ansprechpartner. Wenn ein Kunde geändert wird, werden alle zugeordneten Ansprechpartner ebenfalls geändert. Der Kunde und die zugeordneten Ansprechpartner werden bei der nächsten Synchronisation zusammen heruntergeladen.

Downloads
  • download_cursor   Das download_cursor-Skript für Contact sieht wie folgt aus:
    SELECT contact_id, contact.name, contact.cust_id
    FROM ( contact JOIN customer ) JOIN salesrep
    ON contact.cust_id = customer.cust_id
     AND customer.rep_id = salesrep.rep_id
    WHERE Contact.last_modified >= ?
     AND salesrep.ml_username = ?
     AND Contact.active = 1

    Dieses Skript ruft alle aktiven Ansprechpartner ab, die seit dem letzten Download durch den Vertriebsmitarbeiter geändert wurden (entweder ausdrücklich oder durch Änderung des betreffenden Kunden) und die dem Vertriebsmitarbeiter zugeordnet sind. Ein Join mit der Customer- und der SalesRep-Tabelle ist erforderlich, um die diesem Vertriebsmitarbeiter zugeordneten Ansprechpartner zu ermitteln.

  • download_delete_cursor   Das download_delete_cursor-Skript für Contact sieht wie folgt aus:
    SELECT contact_id
    FROM ( Contact JOIN Customer ) JOIN SalesRep
    ON Contact.cust_id = Customer.cust_id
     AND Customer.rep_id = SalesRep.rep_id
    WHERE Contact.last_modified >= ?
     AND Contact.active = 0

    Die automatische Verwendung kaskadierender referenzieller Integrität durch den MobiLink-Client löscht Ansprechpartner, wenn der entsprechende Kunde aus der entfernten Datenbank gelöscht wird. Das download_delete_cursor-Skript muss somit nur die Ansprechpartner löschen, die als inaktiv markiert sind.

Uploads

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

  • upload_insert   Das folgende upload_insert-Skript fügt eine Zeile in die Contact-Tabelle ein und markiert den Ansprechpartner als aktiv:
    INSERT INTO Contact (
     contact_id, name, cust_id, active )
    VALUES ( ?, ?, ?, 1 )

  • upload_update   Das folgende upload_update-Skript ändert die Daten des Ansprechpartners in der konsolidierten Datenbank:
    UPDATE Contact
    SET name = ?, cust_id = ?
    WHERE contact_id = ?

    In dieser Tabelle wird keine Konflikterkennung durchgeführt.

  • upload_delete   Das folgende upload_delete-Skript markiert den Ansprechpartner in der konsolidierten Datenbank als inaktiv. Es löscht keine Zeile.
    UPDATE Contact
    SET active = 0
    WHERE contact_id = ?