同期しているパブリケーションに関する有用な情報を提供します。このスクリプトを使って、ファイルベースのダウンロードの世代番号を管理できます。
次の表の説明では、SQL データ型を示します。Java または .NET でスクリプトを作成する場合、適切な対応するデータ型を使用します。 SQL データ型と Java データ型とSQL データ型と .NET データ型を参照してください。
SQL スクリプトでは、名前または疑問符を使用してイベントパラメータを指定できます。疑問符の使用は推奨されなくなりました。名前付きパラメータを使用することをおすすめします。1 つのスクリプト内で名前と疑問符を混在させることはできません。疑問符を使用する場合、パラメータは以下に示す順に指定する必要があり、後続のパラメータが指定されていない場合のみ省略可能です (たとえば、パラメータ 2 を使用する場合は、パラメータ 1 を使用してください)。名前付きパラメータを使用する場合は、パラメータの任意のサブセットを任意の順に指定できます。
SQL スクリプトのパラメータ名 | 説明 | 順序 (SQL では非推奨) |
---|---|---|
s.generation_number |
INTEGER。これは INOUT パラメータです。使用している配備環境でファイルベースのダウンロードを使用しない場合、このパラメータは無視できます。デフォルトは 1 です。 |
1 |
s.remote_id | VARCHAR(128)。Mobile Link リモート ID。名前付きパラメータを使用している場合のみ、リモート ID を参照できます。 | 適用外 |
s.username |
VARCHAR(128)。Mobile Link ユーザ名。 |
2 |
s.publication_name |
VARCHAR(128)。パブリケーションの名前。 |
3 |
s.last_publication_upload |
TIMESTAMP。このパブリケーシヨンが最後に正常にアップロードされた時刻。 |
4 |
s.last_publication_download |
TIMESTAMP。パブリケーシヨンの最後のダウンロード時刻。 |
5 |
s.subscription_id |
VARCHAR(128)。リモートサブスクリプション ID。 |
6 |
s.script_version | VARCHAR(128)。Mobile Link サーバが現在の同期に使用しているスクリプトバージョン文字列をこのパラメータに渡すことを指定する、オプションの IN パラメータ。このパラメータの指定に疑問符を使用することはできません。 | 適用外 |
デフォルトの世代番号は 1 です。このイベントにスクリプトが定義されていない場合、リモートデータベースに送信される世代番号は必ず 1 になります。
このイベントを使って、現在同期されているパブリケーションに基づいて、同期論理を設計できます。このイベントは、begin_synchronization イベントと同じトランザクションで呼び出され、begin_synchronization イベントの後で呼び出されます。このイベントは、パブリケーションが同期するたびに 1 回呼び出されます。
このイベントは、使用されるパブリケーションに基づいてダウンロードされるものに影響を与えることができます。たとえば、優先度パブリケーション (PriorityPub) と全テーブル用のパブリケーション ( AllTablesPub ) の双方の一部であるテーブルを考えます。begin_publication イベントのスクリプトは、Java クラスまたは SQL 変数やパッケージにパブリケーション名を保存できます。ダウンロードスクリプトは、パブリケーションが PriorityPub と同期するか AllTablesPub と同期するかにより、異なった動作ができます。
Ultra Light リモートデータベースが UL_SYNC_ALL を使用して同期されている場合、このイベントは 'unknown' というパブリケーション名で 1 回呼び出されます。
generation_number パラメータは、特にファイルベースのダウンロード用です。世代番号の出力値は、begin_publication スクリプトから end_publication スクリプトへ渡されます。generation_number の意味は、現在の同期がダウンロードファイルを作成するために使用されているか、現在の同期にアップロードが含まれているかによって異なります。
ファイルベースのダウンロードでは、世代番号の変更によって、ダウンロードの前にアップロードを強制的に行います。世代番号が変わらない間は、リモートデータベースでは、アップロードの必要なく、多数のファイルベースのダウンロードを処理できます。世代番号は、ダウンロードファイルに保存されます。アップロードを持つ同期中に、パブリケーションに対するサブスクリプションごとに 1 つの世代番号が出力されます。この番号はアップロード確認でリモートデータベースへ送信され、SYSSYNC.generation_number に保存されます。
同期されるパブリケーションごとに情報を記録する必要がある場合があります。次の例では、ml_add_connection_script を呼び出して、RecordPubSync というストアドプロシージャにイベントを割り当てます。
CALL ml_add_connection_script( 'version1', 'begin_publication', '{CALL RecordPubSync( {ml s.generation_number}, {ml s.username}, {ml s.publication_name}, {ml s.last_publication_upload}, {ml s.last_publication_download}, {ml s.subscription_id} )}' ); |
次の Mobile Link システムプロシージャコールは、スクリプトバージョン ver1 を同期するときに、beginPublication という Java メソッドを begin_publication 接続イベント用のスクリプトとして登録します。
CALL ml_add_java_connection_script( 'ver1', 'begin_publication', 'ExamplePackage.ExampleClass.beginPublication' ) |
次に示すのは、サンプルの Java メソッド beginPublication です。このメソッドは後で使用する各パブリケーションの名前を保存します。
package ExamplePackage; public class ExampleClass { java.util.ArrayList<String> _publicationNames; int _numPublications = 0; public void beginPublication( ianywhere.ml.script.InOutInteger generation_number, String user, String pub_name ) { _numPublications++; _publicationNames.add( pub_name ); } } |
次の Mobile Link システムプロシージャコールは、スクリプトバージョン ver1 を同期するときに、BeginPub という .NET メソッドを begin_publication 接続イベント用のスクリプトとして登録します。
CALL ml_add_dnet_connection_script( 'ver1', 'begin_publication', 'TestScripts.Test.BeginPub' ) |
次に示すのは、サンプルの .NET メソッド BeginPub です。このメソッドは後で使用する各パブリケーションの名前を保存します。
using System.Collections.Generic; namespace TestScripts { class Test { List<string> _publicationNames = new List<string>(); int _numPublications = 0; public void BeginPub( ref int generation_number, string user, string pub_name ) { _numPublications++; _publicationNames.Add( pub_name ); } } } |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |