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 CustDB サンプルの解説 » CustDB の同期

 

CustDB サンプルでの注文の同期

ビジネス・ルール

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

  • 注文は、承認されていないか、ステータスが NULL である場合にかぎりダウンロードされる。

  • 注文は、統合データベースでもリモート・データベースでも修正できる。

  • 各リモート・データベースには、従業員に対応する注文のみが保持される。

ダウンロード

統合データベースでは、注文を挿入、削除、更新できます。これらの操作に対応するスクリプトは、次のとおりです。

  • download_cursor   download_cursor スクリプトの最初のパラメータは、最終ダウンロード・タイムスタンプです。これは、最後の同期以後にリモート・データベースまたは統合データベースのいずれかで修正されたローのみをダウンロードするために使用されます。2 番目のパラメータは従業員 ID です。この ID は、ダウンロードするローを判断するために使用されます。

    CustDB の download_cursor スクリプトを次に示します。

    CALL ULOrderDownload( {ml s.last_table_download}, {ml s.username} )

    CustDB の ULOrderDownload プロシージャを次に示します。

    CREATE PROCEDURE ULOrderDownload ( IN LastDownload timestamp, IN EmployeeID integer )
    BEGIN`
      SELECT o.order_id, o.cust_id, o.prod_id, o.emp_id, o.disc, o.quant, o.notes, o.status
        FROM ULOrder o, ULEmpCust ec
        WHERE o.cust_id = ec.cust_id
        AND ec.emp_id = EmployeeID
        AND ( o.last_modified >= LastDownload
        OR ec.last_modified >= LastDownload)
        AND ( o.status IS NULL  OR  o.status != 'Approved' )
        AND ( ec.action IS NULL )
    END

  • download_delete_cursor   CustDB の download_delete_cursor スクリプトを次に示します。
    SELECT o.order_id, o.cust_id, o.prod_id, o.emp_id, o.disc, o.quant, o.notes, o.status
        FROM ULOrder o, dba.ULEmpCust ec
      WHERE o.cust_id = ec.cust_id 
        AND ( ( o.status = ''Approved'' AND o.last_modified >= {ml s.last_table_download} ) 
        OR ( ec.action = ''D''  )  )
        AND ec.emp_id = {ml s.username}

アップロード

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

  • upload_insert   CustDB の upload_insert スクリプトを次に示します。
    INSERT INTO ULOrder ( order_id, cust_id, prod_id, emp_id, disc, quant, notes, status )
       VALUES( {ml r.order_id, r.cust_id, r.prod_id, r.emp_id, r.disc, r.quant, r.notes, r.status } )

  • upload_update   CustDB の upload_update スクリプトを次に示します。
    UPDATE ULOrder 
      SET cust_id = {ml r.cust_id},
          prod_id = {ml r.prod_id},
          emp_id = {ml r.emp_id},
          disc = {ml r.disc},
          quant = {ml r.quant},
          notes = {ml r.notes},
          status = {ml r.status}
        WHERE order_id = {ml r.order_id}

  • upload_delete   CustDB の upload_delete スクリプトを次に示します。
    DELETE FROM ULOrder WHERE order_id = {ml r.order_id}

  • upload_fetch   CustDB の upload_fetch スクリプトを次に示します。
    SELECT order_id, cust_id, prod_id, emp_id, disc, quant, notes, status
       FROM ULOrder WHERE order_id = {ml r.order_id}

  • upload_old_row_insert   CustDB の upload_old_row_insert スクリプトを次に示します。
    INSERT INTO ULOldOrder ( order_id, cust_id, prod_id, emp_id, disc, quant, notes, status )
       VALUES( {ml r.order_id, r.cust_id, r.prod_id, r.emp_id, r.disc, r.quant, r.notes, r.status } )

  • upload_new_row_insert   CustDB の upload_new_row_insert スクリプトを次に示します。
    INSERT INTO ULNewOrder ( order_id, cust_id, prod_id, emp_id, disc, quant, notes, status )
       VALUES( {ml r.order_id, r.cust_id, r.prod_id, r.emp_id, r.disc, r.quant, r.notes, r.status } )

競合解決
  • resolve_conflict   CustDB の resolve_conflict スクリプトを次に示します。
    CALL ULResolveOrderConflict

    CustDB の ULResolveOrderConflict プロシージャを次に示します。

    CREATE PROCEDURE ULResolveOrderConflict()
    BEGIN
      -- approval overrides denial
      IF 'Approved' = (SELECT status FROM ULNewOrder) THEN
        UPDATE ULOrder o
        SET o.status = n.status, o.notes = n.notes
        FROM ULNewOrder n
        WHERE o.order_id = n.order_id;
      END IF;
      DELETE FROM ULOldOrder;
      DELETE FROM ULNewOrder;
    END