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 イベント » 同期イベント

 

handle_DownloadData 接続イベント

ダイレクト・ロー・ハンドリングにおいて、ダウンロードするロー・セットの作成に使用されます。

パラメータ

なし

デフォルトのアクション

なし

備考

handle_DownloadData イベントを使用すると、ダイレクト・ロー・ハンドリングを使用して Mobile Link クライアントにダウンロードする操作を決定できます。

ダイレクト・ロー・ハンドリングは、Mobile Link でサポートされている統合データベース以外のデータ・ソースと同期するために使用されます。ダイレクト・ロー・ハンドリングを参照してください。

ダイレクト・ダウンロードを作成するには、Java または .NET 用 Mobile Link サーバ API の DownloadData クラスと DownloadTableData クラスを使用できます。

Java の場合、DBConnectionContext の getDownloadData メソッドは、現在の同期に対する DownloadData インスタンスを返します。DownloadData はすべてのダウンロード操作をカプセル化して、リモート・クライアントに送信します。DownloadData の getDownloadTables メソッドと getDownloadTableByName メソッドを使用して DownloadTableData インスタンスを取得できます。DownloadTableData は、特定のテーブルに対するダウンロード操作をカプセル化します。getUpsertPreparedStatement メソッドを使用して、挿入と更新操作の準備文を取得できます。DownloadTableData の getDeletePreparedStatement メソッドを使用して、削除操作の準備文を取得できます。

.NET の場合、DBConnectionContext の GetDownloadData メソッドは、現在の同期に対する DownloadData インスタンスを返します。DownloadData はすべてのダウンロード操作をカプセル化して、リモート・クライアントに送信します。DownloadData の GetDownloadTables メソッドと GetDownloadTableByName メソッドを使用して DownloadTableData インスタンスを取得できます。DownloadTableData は、特定のテーブルに対するダウンロード操作をカプセル化します。GetUpsertCommand メソッドを使用して、挿入と更新操作のコマンドを取得できます。DownloadTableData の getDeleteCommand メソッドを使用して、削除操作のコマンドを取得できます。

Java の場合については、DBConnectionContext インタフェースを参照してください。.NET の場合については、DBConnectionContext インタフェースを参照してください。

handle_DownloadData または他の同期イベントでダウンロードを作成できます。Mobile Link にはこの柔軟性があるので、データがアップロードされたときまたは特定のイベントが発生したときのダウンロード操作を設定できます。handle_DownloadData 以外のイベントでダイレクト・ダウンロードを作成する場合は、含まれているメソッドが何も処理をしない handle_DownloadData スクリプトを作成してください。Mobile Link でダイレクト・ロー・ハンドリングを有効にするには、このスクリプトが定義されている必要があります。アップロード専用同期の場合を除き、Mobile Link サーバでは、少なくとも handle_DownloadData スクリプトが 1 つ定義されている必要があります。

ダイレクト・ダウンロードを handle_DownloadData 以外のイベントで作成する場合、そのイベントは begin_synchronization イベントより前または end_download イベントより後に実装できません。

注意

このイベントは SQL として実装できません。

参照
Java の例

次の Mobile Link システム・プロシージャ・コールは、スクリプト・バージョン ver1 を同期するときに、handle_DownloadData 接続イベントに対して handleDownload という Java メソッドを登録します。Mobile Link 統合データベースに対してこのシステム・プロシージャを実行します。

CALL ml_add_java_connection_script( 
 'ver1',
 'handle_DownloadData',
 'MyPackage.MyClass.handleDownload' )

ml_add_java_connection_script システム・プロシージャを参照してください。

次の例は、handleDownload メソッドを使用してダウンロードを作成する方法を示します。

次のコードは、クラス・レベルの DBConnectionContext インスタンスを MobiLinkOrders クラスのコンストラクタ内で設定します。

import ianywhere.ml.script.*;
import java.io.*;
import java.sql.*;
import java.lang.System;

public class  MobiLinkOrders{

  DBConnectionContext _cc;

  public MobiLinkOrders( DBConnectionContext cc ) {
    _cc = cc;
  }

HandleDownload メソッドでは、DBConnectionContext の getDownloadData メソッドを使用して、現在の同期に対する DownloadData インスタンスを返します。DownloadData の getDownloadTableByName メソッドは、remoteOrders テーブルの DownloadTableData インスタンスを返します。DownloadTableData の getUpsertPreparedStatement メソッドは java.sql.PreparedStatement を返します。ダウンロードに操作を追加するには、すべてのカラム値を設定して、executeUpdate メソッドを呼び出します。

次に示すのは、MobiLinkOrders クラスの handleDownload メソッドです。ここでは、remoteOrders テーブル用のダウンロードに 2 つのローを追加しています。

// Method used for the handle_DownloadData event.
public void handleDownload() throws SQLException {
  // Get DownloadData instance for current synchronization.
  DownloadData downloadData = _cc.getDownloadData();
 
  // Get a DownloadTableData instance for the remoteOrders table.
  DownloadTableData td = downloadData.getDownloadTableByName("remoteOrders");

  // Get a java.sql.PreparedStatement for upsert (update/insert) operations.
  PreparedStatement upsertPS = td.getUpsertPreparedStatement();

  // Set values for one row.
  upsertPS.setInt( 1, 2300 ); 
  upsertPS.setInt( 2, 100 );

  // Add the values to the download.
  int updateResult = upsertPS.executeUpdate();

  // Set values for another row.
  upsertPS.setInt( 1, 2301 );
  upsertPS.setInt( 2, 50 );
  updateResult = upsertPS.executeUpdate();

  upsertPS.close();

  // ... 
}
.NET の例

次の Mobile Link システム・プロシージャ・コールは、スクリプト・バージョン ver1 を同期するときに、HandleDownload という .NET メソッドを handle_DownloadData 接続イベント用のスクリプトとして登録します。これは SQL Anywhere 統合データベース用の構文です。

CALL ml_add_dnet_connection_script(
   'ver1', 'handle_DownloadData',
   'TestScripts.Test.HandleDownload'
)

次に示すのは、サンプルの .NET メソッド HandleDownload です。

using System;
using System.Data;
using System.IO;
using iAnywhere.MobiLink.Script;
using iAnywhere.MobiLink;

namespace MyScripts
{
    /// <summary>
    /// Tests that scripts are called correctly for most sync events.
    /// </summary>
    public class MobiLinkOrders
    {
 private DBConnectionContext _cc;

 public MobiLinkOrders( DBConnectionContext cc )
 {
     _cc = cc;
 }

 ~MobiLinkOrders()
 {
 }

 public void handleDownload()
 {
     // Get DownloadData instance for current synchronization.
     DownloadData my_dd = _cc.GetDownloadData();
     
     // Get a DownloadTableData instance for the remoteOrders table.
     DownloadTableData td = my_dd.GetDownloadTableByName("remoteOrders");

     // Get an IdbCommand for upsert (update/insert) operations.
     IDbCommand upsert_stmt = td.GetUpsertCommand();

     IDataParameterCollection parameters = upsert_stmt.Parameters; 

     // Set values for one row.
     parameters[ 0 ] = 2300;
     parameters[ 1 ] = 100;

     // Add the values to the download.
     int update_result = upsert_stmt.ExecuteNonQuery();

     // Set values for another row.
     parameters[ 0 ] = 2301;
     parameters[ 1 ] = 50;
     update_result = upsert_stmt.ExecuteNonQuery();

     // ...
 }

    }
}