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

SQL Anywhere 12.0.1 » Mobile Link クイックスタート » Mobile Link チュートリアル » チュートリアル:ダイレクトローハンドリングの使用

 

レッスン 4:同期スクリプトの追加

このレッスンは、受講者がこれまでのすべてのレッスンを終了していることを前提としています。 レッスン 1:テキストファイルデータソースの設定を参照してください。

このレッスンでは、SQL ローハンドリングとダイレクトローハンドリング用のスクリプトを統合データベースに追加します。

SQL ローハンドリングを使用すると、リモートデータを、Mobile Link 統合データベース内のテーブルと同期できます。SQL ベースのスクリプトでは、次の情報を定義します。

  • Mobile Link クライアントからアップロードするデータを統合データベースに適用する方法。

  • 統合データベースからダウンロードするデータ。

次の SQL ベースのアップロードイベントとダウンロードイベントが作成されます。

  • upload_insert   このイベントは、クライアントデータベースに挿入された新しい注文を統合データベースに適用する方法を定義します。

  • download_cursor   このイベントは、リモートクライアントにダウンロードする注文を定義します。

  • download_delete_cursor   このイベントは、アップロード専用の同期スクリプトを使用する場合に必要です。このチュートリアルでは、このイベントを無視するように Mobile Link サーバーを設定します。

ダイレクトローハンドリングを使用し、ストアドプロシージャーを使用して Mobile Link 統合データベースに同期スクリプト情報を追加します。このレッスンでは、handle_UploadData、handle_DownloadData、end_download、download_cursor、download_delete_cursor の各イベントに対応するメソッド名を登録します。独自の Java または .NET クラスをレッスンの後半で作成します。

 ♦ 統合データベースへの SQL ローハンドリングとダイレクトローハンドリング用のスクリプトの追加
  1. まだ接続していない場合は、次のコマンドを実行して、Interactive SQL から統合データベースに接続します。

    dbisql -c "DSN=mldirect_db"
  2. ml_add_table_script ストアドプロシージャーを使用して、upload_insert、download_cursor、download_delete_cursor の各イベント用の SQL ベースのテーブルスクリプトを追加します。

    Interactive SQL で次の SQL 文を実行します。upload_insert のスクリプトでは、アップロードされた order_id、product_id、quantity、order_status を Mobile Link 統合データベースに挿入します。download_cursor のスクリプトでは、タイムスタンプベースのフィルターを使用して、更新されたローをリモートクライアントにダウンロードします。



    CALL ml_add_table_script( 'default', 'RemoteOrders', 
        'upload_insert',
        'INSERT INTO RemoteOrders( order_id, product_id, quantity, order_status)
         VALUES( {ml r.order_id}, {ml r.product_id}, {ml r.quantity}, {ml r.order_status} )' );
       
    CALL ml_add_table_script( 'default', 'RemoteOrders',
        'download_cursor',
        'SELECT order_id, product_id, quantity, order_status
         FROM RemoteOrders WHERE last_modified >= {ml s.last_table_download}');
    
    CALL ml_add_table_script( 'default', 'RemoteOrders',
        'download_delete_cursor', '--{ml_ignore}');
    
    COMMIT;
  3. end_download イベント用の Java または .NET メソッドを登録します。

    Mobile Link サーバーが end_download 接続イベントを実行するときに、このメソッドを使用してメモリリソースを解放します。

    Java の場合は、Interactive SQL で次の文を実行します。

    CALL ml_add_java_connection_script( 'default',
        'end_download',
        'MobiLinkOrders.EndDownload' );

    .NET の場合は、Interactive SQL で次の文を実行します。

    CALL ml_add_dnet_connection_script( 'default',
        'end_download',
        'MobiLinkOrders.EndDownload' );

    Interactive SQL によって、ユーザー定義の EndDownload メソッドが end_download イベント用に登録されます。

  4. handle_UploadData と handle_DownloadData の各イベント用の Java または .NET メソッドを登録します。

    Java の場合は、Interactive SQL で次の文を実行します。

    CALL ml_add_java_connection_script( 'default', 
        'handle_UploadData',
        'MobiLinkOrders.GetUpload' );
       
    CALL ml_add_java_connection_script( 'default',
        'handle_DownloadData',
        'MobiLinkOrders.SetDownload' );

    .NET の場合は、Interactive SQL で次の文を実行します。

    CALL ml_add_dnet_connection_script( 'default', 
        'handle_UploadData',
        'MobiLinkOrders.GetUpload' );
       
    CALL ml_add_dnet_connection_script( 'default',
        'handle_DownloadData',
        'MobiLinkOrders.SetDownload' );

    Interactive SQL によって、ユーザー定義の GetUpload と SetDownload の各メソッドが、それぞれ handle_UploadData と handle_DownloadData の各イベント用に登録されます。これらのメソッドは次のレッスンで作成します。

  5. download_cursor と download_delete_cursor の各イベントを登録します。

    Interactive SQL で次の文を実行します。

    CALL ml_add_table_script( 'default', 'OrderComments',
        'download_cursor', '--{ml_ignore}');
    
    CALL ml_add_table_script( 'default', 'OrderComments',
        'download_delete_cursor', '--{ml_ignore}');

    同期は双方向であり、アップロード専用ではないため、スクリプトを使用するときには、OrderComments テーブル用に download_cursor と download_delete_cursor の各イベントを登録してください。 必要なスクリプトを参照してください。

  6. これまでの変更内容をコミットします。

    Interactive SQL で次の文を実行します。

    COMMIT;
  7. Interactive SQL を閉じます。

  8. レッスン 5:Mobile Link のダイレクトローハンドリングのための Java または .NET クラスの作成に進みます。

 参照