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

SQL Anywhere 11.0.1 (日本語) » Mobile Link - クイック・スタート » Mobile Link テクノロジの概要 » Mobile Link Contact サンプルの解説 » Contact サンプルの同期

 

Contact サンプルの顧客窓口の同期

Contact テーブルには、顧客の会社の社員名、顧客を参照するための外部キー、窓口を識別するユニークな整数が含まれています。また、last_modified タイムスタンプと、窓口がアクティブであるかどうかを示すマーカもあります。

ビジネス・ルール

このテーブルのビジネス・ルールは、次のとおりです。

  • 窓口情報は、統合データベースでもリモート・データベースでも修正できる。

  • 各リモート・データベースには、営業担当者が割り当てられている顧客の窓口のみが含まれる。

  • 営業担当者間で顧客を再割り当てした場合は、窓口の再割り当てもする。

トリガ

Customer テーブルのトリガは、顧客情報に変更があったときに窓口が確実に選択されるようにするために使用されます。トリガは、各窓口の last_modified カラムを、その窓口に対応する顧客の情報が変更されるたびに明示的に変更します。

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

顧客が修正されるたびにすべての窓口レコードを更新することで、トリガは顧客とその関連窓口を結合します。そのため、顧客が修正されるとすべての関連窓口も修正され、次回の同期時に顧客とその関連窓口が一括してダウンロードされます。

ダウンロード
  • download_cursor   Contact の download_cursor スクリプトを次に示します。
    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

    このスクリプトは、アクティブな窓口、営業担当者が最後にダウンロードした後に (明示的に、または対応する顧客の修正によって) 変更された窓口、営業担当者に割り当てられている窓口をすべて取り出します。この営業担当者に関連付けられている窓口を識別するには、Customer テーブルと SalesRep テーブルのジョインが必要です。

  • download_delete_cursor   Contact の download_delete_cursor スクリプトを次に示します。
    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

    リモート・データベースから顧客が削除されると、Mobile Link クライアントでは、カスケード参照整合性が自動的に使用され、対応する窓口が削除されます。このため、download_delete_cursor スクリプトは、非アクティブのマークが付いている窓口のみを削除します。

アップロード

リモート・データベース側で窓口情報を挿入、更新、または削除できます。これらの操作に対応するスクリプトは、次のとおりです。

  • upload_insert   次の upload_insert スクリプトは、Contact テーブルにローを 1 つ追加して、窓口にアクティブのマークを付けます。
    INSERT INTO Contact (
     contact_id, name, cust_id, active )
    VALUES ( ?, ?, ?, 1 )

  • upload_update   次の upload_update スクリプトは、統合データベースにある窓口情報を修正します。
    UPDATE Contact
    SET name = ?, cust_id = ?
    WHERE contact_id = ?

    このテーブルでは競合検出は実行されません。

  • upload_delete   次の upload_delete スクリプトは、統合データベースで窓口に非アクティブのマークを付けます。ローは削除されません。
    UPDATE Contact
    SET active = 0
    WHERE contact_id = ?