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

 

modify_last_download_timestamp 接続イベント

このスクリプトを使用して、現在の同期の最終ダウンロード時刻を修正できます。

パラメータ

次の表の説明では、SQL データ型を示します。Java または .NET でスクリプトを作成する場合、適切なデータ型を使用してください。SQL データ型と Java データ型SQL データ型と .NET データ型を参照してください。

SQL スクリプトでは、名前または疑問符を使用してイベント・パラメータを指定できますが、スクリプト内に名前と疑問符を混在させることはできません。疑問符を使用する場合、パラメータは以下に示す順に指定する必要があり、後続のパラメータが指定されていない場合のみ省略可能です (たとえば、パラメータ 2 を使用する場合は、パラメータ 1 を使用してください)。名前付きパラメータを使用する場合は、パラメータの任意のサブセットを任意の順に指定できます。

SQL スクリプトのパラメータ名

説明

順序

s.last_download

TIMESTAMP。同期テーブルの最後のダウンロード時刻。これは INOUT パラメータです。

1

s.remote_id

VARCHAR(128)。Mobile Link リモート ID。名前付きパラメータを使用している場合のみ、リモート ID を参照できます。

適用不可

s.username

VARCHAR(128)。Mobile Link ユーザ名。

2

デフォルトのアクション

なし

備考

このスクリプトは、現在の同期に対する last_download タイムスタンプを修正するために使用します。このスクリプトが定義されている場合、Mobile Link サーバは、ダウンロード・スクリプトに渡す last_download タイムスタンプとして、修正した last_download タイムスタンプを使用します。通常、このスクリプトは、リモートで失われたデータをリカバリするために使用します。つまり、last_download タイムスタンプを 1900-01-01 00:00 などの過去の時間にリセットして、次の同期ですべてのデータをダウンロードできます。

modify_last_download_timestamp イベントの SQL スクリプトは、ストアド・プロシージャとして実装してください。Mobile Link サーバは、ストアド・プロシージャへの最初のパラメータとして last_download タイムスタンプを渡し、タイムスタンプをストアド・プロシージャが渡した最初の値で置き換えます。

このスクリプトは、同じトランザクション内にある prepare_for_download スクリプトの直前に実行されます。

参照
SQL の例

次の SQL 文はストアド・プロシージャを作成します。次は Oracle 統合データベース用の構文です。

CREATE PROCEDURE ModifyDownloadTimestamp(
        download_timestamp  OUT DATE,
        user_name   IN VARCHAR )
        AS
        BEGIN
         -- N is the maximum replication latency in the consolidated cluster
        download_timestamp := download_timestamp - N;
        END;

次は、SQL Anywhere、Adaptive Server Enterprise、SQL Server 統合データベース用の構文です。

CREATE PROCEDURE ModifyDownloadTimestamp
        @download_timestamp DATETIME OUTPUT,
        @t_name    VARCHAR( 128 )
        AS
        BEGIN
         -- N is the maximum replication latency in consolidated cluster
        SELECT @download_timestamp = @download_timestamp - N
        END

次は DB2 メインフレーム統合データベース用の構文です。

CREATE PROCEDURE modify_ldts( 
        OUT ts      TIMESTAMP,
        IN  t_name  VARCHAR(128) )
        LANGUAGE SQL
        BEGIN
            set ts = TIMESTAMP_FORMAT('2000-01-02 03:04:05','YYYY-MM-DD HH24:MI:SS');
        END

次の Mobile Link システム・プロシージャ・コールは、ModifyDownloadTimestamp ストアド・プロシージャを modify_last_download_timestamp イベントに割り当てます。次は SQL Anywhere 統合データベース用の構文です。

CALL ml_add_connection_script(
  'my_version',
  'modify_last_download_timestamp',
  '{CALL ModifyDownloadTimestamp(
   {ml s.last_download}, 
   {ml s.username} ) }' )
Java の例

次の Mobile Link システム・プロシージャ・コールは、スクリプト・バージョン ver1 を同期するときに、modifyLastDownloadTimestamp という Java メソッドを modify_last_download_timestamp 接続イベント用のスクリプトとして登録します。

CALL ml_add_java_connection_script(
  'ver1',
  'modify_last_download_timestamp',
  'ExamplePackage.ExampleClass.modifyLastDownloadTimestamp' )

次に示すのは、サンプルの Java メソッド modifyLastDownloadTimestamp です。このメソッドは、現在の新しいタイムスタンプを出力し、渡されたタイムスタンプを修正します。

public String modifyLastDownloadTimestamp(
     Timestamp lastDownloadTime,
     String userName ) {
   java.lang.System.out.println( "old date: " +
    lastDownloadTime.toString() );
   lastDownloadTime.setDate(
    lastDownloadTime.getDate() -1 );
   java.lang.System.out.println( "new date: " +
    lastDownloadTime.toString() );
   return( null ); 
}
.NET の例

次の Mobile Link システム・プロシージャ・コールは、スクリプト・バージョン ver1 を同期するときに、ModifyLastDownloadTimestamp という .NET メソッドを modify_last_download_timestamp 接続イベント用のスクリプトとして登録します。

CALL ml_add_dnet_connection_script(
  'ver1',
  'modify_last_download_timestamp',
  'TestScripts.Test.ModifyLastDownloadTimestamp' )

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

public string ModifyLastDownloadTimestamp(
  DateTime lastDownloadTime,
  string userName ) {
  System.Console.WriteLine( "old date: " +
   last_download_time.ToString() );
  last_download_time = DateTime::Now;
  System.Console.WriteLine( "new date: " +
   last_download_time.ToString() );
  return( null );
}