In dieser Lektion konfigurieren Sie drei Notifier-Ereignisse, um festzulegen, wie der Notifier Push-Anforderungen erstellt, die Anforderungen an den MobiLink Listener sendet und abgelaufene Anforderungen löscht.
Verbinden Sie sich mit der konsolidierten Datenbank, indem Sie ein neues MobiLink-Projekt erstellen.
Wählen Sie Start » Programme » SQL Anywhere 12 » Administrationstools » Sybase Central.
Wählen Sie im Menü Extras die Option MobiLink 12 » Neues Projekt.
Im Feld Name geben Sie sis_cons_project ein.
Im Feld Speicherort geben Sie C:\MLsis ein und klicken dann auf Weiter.
Aktivieren Sie die Option Dem Projekt eine konsolidierte Datenbank hinzufügen.
Geben Sie im Feld Anzeigename der Datenbank sis_cons ein.
Klicken Sie auf Bearbeiten. Das Fenster Mit einer allgemeinen ODBC-Datenbank verbinden erscheint.
Im Feld Benutzer-ID geben Sie DBA ein.
Im Feld Kennwort geben Sie sql ein.
Klicken Sie im Feld ODBC-Datenquellenname auf Durchsuchen und wählen sis_cons.
Klicken Sie auf OK und dann auf Speichern.
Aktivieren Sie die Option Kennwort speichern und klicken Sie auf Fertig stellen.
Klicken Sie auf OK.
Erweitern Sie im linken Fensterausschnitt von Sybase Central unter MobiLink 12 sis_cons_project, Konsolidierte Datenbanken und dann sis_cons.
Rechtsklicken Sie auf Benachrichtigung und wählen Sie Neu » Notifier.
Im Feld Wie lautet der Name des neuen Notifiers? geben Sie CarDealerNotifier ein.
Klicken Sie auf Fertig stellen.
Der Notifier erkennt Änderungen in der konsolidierten Datenbank und erstellt mithilfe des begin_poll-Ereignisses Push-Anforderungen. In diesem Fall füllt das begin_poll-Skript die PushRequest-Tabelle, sofern in der Tabelle Dealer Änderungen vorhanden sind und eine entfernte Datenbank nicht mehr auf dem neuesten Stand ist.
Das request_cursor-Skript ruft Push-Anforderungen ab. Jede Push-Anforderung legt fest, welche Informationen in der Nachricht gesendet werden und welche entfernte Datenbank die Informationen empfängt.
Das Notifier-Ereignis request_delete legt Bereinigungsvorgänge fest. Mit diesem Skript kann der Notifier automatisch implizit gelöschte und abgelaufene Anforderungen entfernen.
Geben Sie das begin_poll-Ereignisskript ein.
Im rechten Fensterausschnitt wählen sie CarDealerNotifier und im Menü Datei wählen Sie Eigenschaften.
Klicken Sie auf die Registerkarte Ereignisse.
Wählen Sie begin_poll aus der Liste Ereignisse.
Geben Sie das folgende SQL-Skript in das angezeigte Textfeld ein:
-- -- Insert the last consolidated database -- modification date into @last_modified -- DECLARE @last_modified timestamp; SELECT MAX(last_modified) INTO @last_modified FROM Dealer; -- -- Delete processed requests if the mluser is up-to-date -- DELETE FROM PushRequest FROM PushRequest AS p, ml_user AS u, ml_subscription AS s WHERE p.status = 'processed' AND u.name = p.mluser AND u.user_id = s.user_id AND @last_modified <= GREATER(s.last_upload_time, s.last_download_time); -- -- Insert new requests when a device is not up-to-date -- INSERT INTO PushRequest(mluser, subject, content) SELECT u.name, 'sync', 'ignored' FROM ml_user as u, ml_subscription as s WHERE u.name IN (SELECT name FROM ml_listening WHERE listening = 'y') AND u.user_id = s.user_id AND @last_modified > greater(s.last_upload_time, s.last_download_time) AND u.name NOT LIKE '%-dblsn' AND NOT EXISTS(SELECT * FROM PushRequest WHERE PushRequest.mluser = u.name AND PushRequest.subject = 'sync') |
Im ersten größeren Abschnitt des begin_poll-Skripts werden verarbeitete Anforderungen aus der PushRequest-Tabelle entfernt, wenn ein Gerät aktualisiert wurde:
@last_modified <= GREATER(s.last_upload_time, s.last_download_time) |
@last_modified ist das maximale Änderungsdatum in der Tabelle Dealer der konsolidierten Datenbank. Der Ausdruck 'greater(s.last_upload_time, s.last_download_time)' stellt den letzten Synchronisationszeitpunkt für eine entfernte Datenbank dar.
Sie können Push-Anforderungen mit dem request_delete-Ereignis auch direkt löschen. Das begin_poll-Ereignis stellt in diesem Fall jedoch sicher, dass abgelaufene oder implizit gelöschte Anforderungen erst entfernt werden, nachdem eine entfernte Datenbank synchronisiert wurde.
Der nächste Codeabschnitt prüft auf Änderungen in der Spalte last_modified der Tabelle Dealer und gibt eine Push-Anforderungen für alle aktiven MobiLink Listener aus (aufgelistet in der Tabelle ml_listening), die nicht aktualisiert wurden:
@last_modified > GREATER(s.last_upload_time, s.last_download_time) |
Beim Füllen der Tabelle PushRequest setzt das begin_poll-Skript den Betreff auf 'sync'.
Geben Sie das request_cursor-Skript ein.
Wählen Sie request_cursor aus der Liste Ereignisse.
Geben Sie das folgende SQL-Skript in das angezeigte Textfeld ein:
SELECT p.req_id, 'Default-DeviceTracker', p.subject, p.content, p.mluser, p.resend_interval, p.time_to_live FROM PushRequest AS p |
Die Tabelle PushRequest stellt dem request_cursor-Skript Zeilen bereit.
Die Reihenfolge und die Werte in der request_cursor-Ergebnismenge sind wichtig. Der zweite Parameter legt z.B. das Standard-Gateway Default-DeviceTracker fest. Ein Device Tracking-Gateway protokolliert, wie Benutzer erreicht werden, und wählt automatisch UDP oder SMTP für die Verbindung mit entfernten Geräten aus.
Geben Sie das request_delete-Skript ein.
Wählen Sie request_delete aus der Liste Ereignisse.
Geben Sie das folgende SQL-Skript in das angezeigte Textfeld ein:
UPDATE PushRequest SET status='processed' WHERE req_id = ? |
Anstatt die Zeile zu löschen, aktualisiert dieses request_delete-Skript den Zustand einer Zeile in der PushRequest-Tabelle auf 'processed'.
Klicken Sie auf OK, um die Notifier-Ereignisse zu speichern.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |