このレッスンは、受講者がこれまでのすべてのレッスンを終了していることを前提としています。 レッスン 1:統合データベースの設定を参照してください。
このレッスンでは、Notifier で Push 要求を作成し、要求を Mobile Link Listener に送信し、有効期限が切れた要求を削除する方法を定義する、3 つの Notifier イベントを設定します。
Notifier は、統合データベース内の変更を検出し、begin_poll イベントを使用して Push 要求を作成します。この場合、変更が Dealer テーブルで発生し、リモートデータベースが最新でない場合、begin_poll スクリプトは、PushRequest テーブルを設定します。
request_cursor スクリプトは、Push 要求をフェッチします。各 Push 要求により、メッセージで送信される情報、情報を受信するリモートデータベースが決まります。
request_delete Notifier イベントはクリーンアップ処理を指定します。このスクリプトを使用すると、暗黙に除外された要求、期限が切れた要求が自動的に削除されます。
Sybase Central の左ウィンドウ枠の [Mobile Link 12] で、sis_cons_project、[統合データベース]、sis_cons の順に展開します。
[通知] を右クリックし、[新規] » [Notifier] をクリックします。
[新しい Notifier の名前を指定してください。] フィールドに、CarDealerNotifier と入力します。
[完了] をクリックします。
begin_poll イベントスクリプトを入力します。
右ウィンドウ枠で CarDealerNotifier を選択し、[ファイル] ‐ [プロパティ] をクリックします。
[イベント] タブをクリックします。
[イベント] リストから [begin_poll] を選択します。
表示されたテキストフィールドで次の SQL 文を入力します。
-- -- 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') |
begin_poll スクリプトの最初の主要セクションでは、デバイスが最新の状態でない場合は、PushRequest テーブルからの処理済み要求は削除されます。
@last_modified <= GREATER(s.last_upload_time, s.last_download_time) |
@last_modified は、統合データベース Dealer テーブルで最大の変更が行われた日です。式 greater( s.last_upload_time, s.last_download_time) は、リモートデータベースの最後の同期時間を表します。
request_delete イベントを使用して、直接 Push 要求を削除することもできます。ただし、この場合に begin_poll イベントを使用すると、リモートデータベースが同期する前に、同期期限が切れた要求や暗黙的に除外された要求が削除されないようにすることができます。
コードの次のセクションは、Dealer テーブルの last_modified カラムに加えられた変更をチェックし、ml_listening テーブルにリストされた最新の状態にないすべてのアクティブ Mobile Link Listener に対して Push 要求を発行します。
@last_modified > GREATER(s.last_upload_time, s.last_download_time) |
PushRequest テーブルが移植されると、begin_poll スクリプトが件名を 'sync' に設定します。
request_cursor スクリプトを入力します。
[イベント] リストから [request_cursor] をクリックします。
表示されたテキストフィールドで次の SQL 文を入力します。
SELECT p.req_id, 'Default-DeviceTracker', p.subject, p.content, p.mluser, p.resend_interval, p.time_to_live FROM PushRequest AS p |
PushRequest テーブルによって、request_cursor スクリプトにローが入力されます。
順序と request_cursor 結果セットの値は重要です。たとえば、2 番目のパラメーターは、デフォルトのゲートウェイ Default-DeviceTracker を定義します。デバイストラッキングゲートウェイは、ユーザーへのアクセス方法を追跡し、UDP または SMTP を自動的に選択してリモートデバイスに接続します。
request_delete スクリプトを入力します。
[イベント] リストから [request_delete] をクリックします。
表示されたテキストフィールドで次の SQL 文を入力します。
UPDATE PushRequest SET status='processed' WHERE req_id = ? |
request_delete スクリプトは、ローを削除するのではなく、PushRequest テーブルのローのステータスを 'processed' に更新します。
[OK] をクリックして Notifier イベントを保存します。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |