ダイレクト・ロー・ハンドリングにおいて、ダウンロードするロー・セットの作成に使用されます。
なし
なし
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 として実装できません。
次の 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(); // ... } |
次の 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(); // ... } } } |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |