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 サンプルの顧客の同期

Customer テーブルの同期スクリプトは、「タイムスタンプベースの同期」とローの分割の例を示しています。これらの方法では、同期中に転送されるデータの量が最小限になり、テーブル・データの整合性が保持されます。

次の項を参照してください。

ビジネス・ルール

顧客を規定するビジネス・ルールは、次のとおりです。

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

  • 営業担当者間で、顧客の再割り当てを定期的に変更できる。このプロセスは、一般に領域の再編成と呼ばれる。

  • 各リモート・データベースには、割り当てられている顧客のみが保持される。

ダウンロード
  • download_cursor   次の download_cursor スクリプトは、最後の正常なダウンロード以後に情報が変更されたアクティブな顧客のみをダウンロードします。また、営業担当者別に顧客をフィルタリングします。
    SELECT cust_id, Customer.name, Customer.rep_id
    FROM Customer key join SalesRep
    WHERE Customer.last_modified >= ?
    AND SalesRep.ml_username = ?
    AND Customer.active = 1

  • download_delete_cursor   次の download_delete_cursor スクリプトは、最後の正常なダウンロード以後に情報が変更された顧客のみをダウンロードします。また、非アクティブのマークが付いているか、指定された営業担当者に割り当てられていない顧客を、すべて削除します。
    SELECT cust_id
    FROM Customer key join SalesRep
    WHERE Customer.last_modified >= ?
    AND ( SalesRep.ml_username != ? OR Customer.active = 0 )

    統合データベースにある Customer テーブルからローが削除されると、この結果セットには表示されないため、リモート・データベースからは削除されません。代わりに、顧客には非アクティブのマークが付きます。

    領域が再編成されると、このスクリプトは営業担当者への割り当てから外れた顧客を削除します。また、他の営業担当者に移された顧客も削除します。このような追加の削除にはフラグとして SQLCODE 100 が設定されますが、同期の妨げにはなりません。より複雑なスクリプトを作成すれば、現在の営業担当者から外された顧客のみを識別できます。

    Mobile Link クライアントはリモート・データベースでカスケード削除を実行するため、このスクリプトによって、他の営業担当者に割り当てられた顧客のすべての窓口が削除されます。

アップロード

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

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

  • upload_update   次の upload_update スクリプトは、統合データベースにある顧客情報を修正します。このテーブルでは競合検出は実行されません。
    UPDATE Customer
    SET name = ?, rep_id = ?
    WHERE cust_id = ?

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