ダウンロード確認を使用する場合、このスクリプトは、ダウンロードが正常に適用されたという情報を記録したり、確認するダウンロードに依存するビジネスロジックを必要に応じてトリガしたりする場所を提供します。
次の表の説明では、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_download |
TIMESTAMP。これは現在の同期の最終ダウンロード時刻です。 |
2 |
s.script_version | VARCHAR(128)。Mobile Link サーバが現在の同期に使用しているスクリプトバージョン文字列をこのパラメータに渡すことを指定する、オプションの IN パラメータ。このパラメータの指定に疑問符を使用することはできません。 | 適用外 |
このイベントを使って、リモートデータベースでダウンロードが正常に適用された時間を記録できます。
このイベントが呼び出されるのは、ダウンロード確認を使用している場合のみです。ダウンロードが送信されたときに、ダウンロードトランザクションがコミットされ、同期が終了します。このイベントは、同期クライアントが正常なダウンロードを確認したときに呼び出されます。このイベントは、新しい接続で、元の同期の end_synchronization スクリプトの後に呼び出されます。このイベントのアクションは、Mobile Link システムテーブルのダウンロード時刻の更新とともにコミットされます。
このスクリプトが持つ特殊な性質によって、同期中に設定された接続レベルの変数は、このイベントを実行するときには使用できません。
ダウンロードに失敗した場合、またはネットワーク接続が切断された場合は、確認は行われず、このスクリプトは呼び出されません。タイムリーなダウンロード確認が業務上重要な場合は、ダウンロード確認処理の予備として、prepare_for_download スクリプトの last_download パラメータまたは begin_publication スクリプトの last_publication_download パラメータを使用してください。
次のスクリプトは、テーブル download_pubs_acked にレコードを追加します。レコードには、リモート ID、最初の認証パラメータ、ダウンロードタイムスタンプが含まれます。
INSERT INTO download_pubs_acked( rem_id, auth_parm, last_download ) VALUES( {ml s.remote_id}, {ml a.1}, {ml s.last_download} ) |
次の Mobile Link システムプロシージャの呼び出しは、スクリプトバージョン ver1 を同期するときに、confirmDownload という Java メソッドを nonblocking_download_ack イベント用のスクリプトとして登録します。
CALL ml_add_java_connection_script( 'ver1', 'nonblocking_download_ack', 'ExamplePackage.ExampleClass.confirmDownload' ) |
次に示すのは、サンプルの Java メソッド confirmDownload です。指定されたユーザと、指定されたタイムスタンプまでを対象として、確認するダウンロードに基づいてビジネスロジックを実行する Java メソッドを呼び出します。
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 ) throws SQLException { Connection conn = _cc.getConnection(); PreparedStatement stmt = conn.prepareStatement( "INSERT INTO download_pubs_acked( rem_id, last_download ) " + "VALUES( ?, ? )" ); stmt.setString( 1, _cc.getRemoteID() ); stmt.setTimestamp( 2, ts ); stmt.executeUpdate(); stmt.close(); } } |
次の Mobile Link システムプロシージャの呼び出しは、スクリプトバージョン ver1 を同期するときに、ConfirmDownload という .NET メソッドを nonblocking_download_ack 接続イベント用のスクリプトとして登録します。
CALL ml_add_dnet_connection_script( 'ver1', 'nonblocking_download_ack', 'TestScripts.Test.ConfirmDownload' ) |
次に示すのは、サンプルの .NET メソッド ConfirmDownload です。指定されたユーザと、指定されたタイムスタンプまでを対象として、確認されたダウンロードに基づいてビジネスロジックを実行する、.NET メソッドを呼び出します。
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 ) { DBConnection conn = _cc.GetConnection(); DBCommand cmd = conn.CreateCommand(); cmd.CommandText = "INSERT INTO download_pubs_acked( rem_id, last_download ) " + "VALUES( ?, ? )"; cmd.Parameters[0] = _cc.GetRemoteID(); cmd.Parameters[1] = dt; cmd.ExecuteNonQuery(); } } } |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |