ダウンロード確認を使用する場合、このスクリプトは、パブリケーションが正常にダウンロードされたという情報を記録します。
次の表の説明では、SQL データ型を示します。Java または .NET でスクリプトを作成する場合、適切な対応するデータ型を使用します。 SQL データ型と Java データ型とSQL データ型と .NET データ型を参照してください。
SQL スクリプトでは、名前または疑問符を使用してイベントパラメータを指定できます。疑問符の使用は推奨されなくなりました。名前付きパラメータを使用することをおすすめします。1 つのスクリプト内で名前と疑問符を混在させることはできません。疑問符を使用する場合、パラメータは以下に示す順に指定する必要があり、後続のパラメータが指定されていない場合のみ省略可能です (たとえば、パラメータ 2 を使用する場合は、パラメータ 1 を使用してください)。名前付きパラメータを使用する場合は、パラメータの任意のサブセットを任意の順に指定できます。
SQL スクリプトのパラメータ名 | 説明 | 順序 (SQL では非推奨) |
---|---|---|
s.remote_id | VARCHAR(128)。Mobile Link リモート ID。名前付きパラメータを使用している場合のみ、リモート ID を参照できます。 | 適用外 |
s.username |
VARCHAR(128)。Mobile Link ユーザ名。 |
1 |
s.last_publication_download |
TIMESTAMP。同期テーブルの最後のダウンロード時刻。 |
2 |
s.publication name | VARCHAR(128)。パブリケーションの名前。 | 3 |
s.subscription_id | VARCHAR(128)。リモートサブスクリプション ID。 | 4 |
s.script_version | VARCHAR(128)。Mobile Link サーバが現在の同期に使用しているスクリプトバージョン文字列をこのパラメータに渡すことを指定する、オプションの IN パラメータ。このパラメータの指定に疑問符を使用することはできません。 | 適用外 |
このイベントを使って、リモートデータベースでこのパブリケーションのダウンロードが正常に適用された時間を記録できます。
このイベントが呼び出されるのは、ダウンロード確認を使用している場合のみです。非ブロッキングモードでは、ダウンロードが送信されたときに、ダウンロードトランザクションがコミットされ、同期が終了します。このイベントは、同期クライアントが正常なダウンロードを確認したときに、ダウンロードのパブリケーションごとに 1 回呼び出されます。このイベントは、新しい接続で、元の同期の end_synchronization スクリプトの後に呼び出されます。このイベントのアクションは、Mobile Link システムテーブルのダウンロード時刻の更新とともにコミットされます。
ダウンロードに失敗した場合、またはネットワーク接続が切断された場合は、確認は行われず、このスクリプトは呼び出されません。タイムリーなダウンロード確認が業務上重要な場合は、ダウンロード確認処理の予備として、prepare_for_download スクリプトの last_download パラメータまたは begin_publication スクリプトの last_publication_download パラメータを使用してください。
このスクリプトが持つ特殊な性質によって、同期中に設定された接続レベルの変数は、このイベントを実行するときには使用できません。
次のスクリプトは、download_pubs_acked というテーブルにレコードを追加します。レコードには、パブリケーション名、最初の認証パラメータ、ダウンロードタイムスタンプが含まれます。
INSERT INTO download_pubs_acked( pub_name, auth_parm, last_download ) VALUES( {ml s.publication_name}, {ml a.1}, {ml s.last_publication_download} ) |
次の Mobile Link システムプロシージャの呼び出しは、スクリプトバージョン ver1 を同期するときに、publicationDownloadACK という Java メソッドを publication_nonblocking_download_ack 接続イベント用のスクリプトとして登録します。
CALL ml_add_java_connection_script ( 'ver1', 'publication_nonblocking_download_ack', 'ExamplePackage.ExampleClass.publicationDownloadACK' ) |
次に示すのは、サンプルの Java メソッド publicationDownloadACK です。特に重要なパブリケーションがダウンロードされたかどうかを確認し、その結果に基づいて何らかのビジネスロジックを実行します。
package ExamplePackage; import ianywhere.ml.script.*; import java.sql.*; public class ExampleClass { DBConnectionContext _cc; public ExampleClass( DBConnectionContext cc ) { _cc = cc; } public void confirmDownload( String user, Timestamp ts, String pubName ) throws SQLException { Connection conn = _cc.getConnection(); PreparedStatement stmt = conn.prepareStatement( "INSERT INTO download_pubs_acked( rem_id, last_download, pub_name ) " + "VALUES( ?, ?, ? )" ); stmt.setString( 1, _cc.getRemoteID() ); stmt.setTimestamp( 2, ts ); stmt.setString( 3, pubName ); stmt.executeUpdate(); stmt.close(); } } |
次の Mobile Link システムプロシージャの呼び出しは、スクリプトバージョン ver1 を同期するときに、EndTableDownload という .NET メソッドを end_download テーブルイベント用のスクリプトとして登録します。
CALL ml_add_dnet_connection_script( 'ver1', 'publication_nonblocking_download_ack', 'TestScripts.Test.EndTableDownload' ) |
次に示すのは、サンプルの .NET メソッド EndTableDownload です。特に重要なパブリケーションがダウンロードされたかどうかを確認し、その結果に基づいて何らかのビジネスロジックを実行します。
using System; using iAnywhere.MobiLink.Script; namespace TestScripts { public class Test { DBConnectionContext _cc; public Test( DBConnectionContext cc ) { _cc = cc; } public void ConfirmDownload( string user, DateTime dt, string pubName ) { DBConnection conn = _cc.GetConnection(); DBCommand cmd = conn.CreateCommand(); cmd.CommandText = "INSERT INTO download_pubs_acked( rem_id, last_download, pub_name ) " + "VALUES( ?, ?, ? )"; cmd.Parameters[0] = _cc.GetRemoteID(); cmd.Parameters[1] = dt; cmd.Parameters[2] = pubName; cmd.ExecuteNonQuery(); } } } |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |