ダイレクトローハンドリングにおいて、ダウンロードするローセットの作成に使用される非 SQL データスクリプトです。
なし。
なし。
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 インターフェイス [Mobile Link サーバー Java]を参照してください。
.NET の場合については、DBConnectionContext インターフェイス [Mobile Link サーバー .NET]を参照してください。
handle_DownloadData または他の同期イベントでダウンロードを作成できます。Mobile Link にはこの柔軟性があるので、データがアップロードされたときまたは特定のイベントが発生したときのダウンロード操作を設定できます。handle_DownloadData 以外のイベントでダイレクトダウンロードを作成する場合は、含まれているメソッドが何も処理をしない handle_DownloadData スクリプトを作成してください。アップロード専用同期の場合を除き、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.MobiLinkOrders.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.MobiLinkOrders.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(); // ... } } } |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |