概要
単一のシリアル番号を主キーとして使っていて、これが送り状番号フィールドも兼ねているとします。「$MIRRORSYNC_CLIENTID」グローバル変数を使うと便利です。この方法を使うと、MirrorSyncは同期される各ファイルに、1から始まるユニークな連番を割り当てます。この番号を、それまで使っていたシリアル番号と組み合わせてユニークな番号を作り、ユーザから見える番号としても主キーとしても使うことができます。シリアル番号はテキスト(「1.1」、「1.2」、「1.3」……)または数字(ユーザ1は10001、ユーザ2は20001、ユーザ3は30001……)になります。
この方法の利点と欠点
利点
- 妥当な短さの、ユーザから見える番号を使えます。
- レコードを作成すると、IDが即座に割り当てられます。同期するまで待つ必要はありません。
欠点
- オフラインのユーザは、レコードを作成する前にいったん同期しなくてはなりません。
- スタートアップスクリプトを実行する必要があります。したがって、カスタムのWeb公開アプリケーションでは動作しません。
- IDはシーケンシャルではないため、IDの数値が大きいからといって別のIDよりも先に作られたか後に作られたかはわかりません。
- 数字を使っている場合、コンフリクトが発生しないように、ユーザは作成するレコードの数を制限されます。
- テキストを使っている場合、主キーと外部フィールドのタイプをすべて「数字」から「テキスト」に変更する必要があります。
- フィールドの書き戻しよりも、セットアップがやや複雑です。
MIRRORSYNC_DATABASEIDをユーザから見える番号として使う方法
準備:
「MirrorSync setup」スクリプトをスタートアップスクリプトに設定します。このスクリプトでは「$$MIRRORSYNC_DATABASEID」グローバル変数がセットされます。
- すでにスタートアップスクリプトがある場合は、既存のスクリプトから「MirrorSync setup」スクリプトをコールします。
- クライアントIDは「MirrorSync」テーブルに保管されます。これはユーザが初回の同期をしたときに割り当てられます。
- 同期されるデータベースにはそれぞれ、ユニークでシーケンシャルなクライアントIDが付与されます。この時点で手動でスクリプトを実行し、先へ進む前にグローバル変数をセットします。
設定の例:
例として「serialField」という名前のフィールドがあり、リレーションシップグラフでこのフィールドがキーフィールドとして使われていると仮定します。
- まずこの「serialField」フィールドを複製して「serialField コピー」という名前の新しいフィールドを作ります
- このとき「serialField コピー」をこのテーブルの同期のレイアウトには配置しないでください。
- 「serialField」を自動入力の計算値に変更します。
- 「フィールドに既存の値が存在する場合は置き換えない」のチェックをはずします。
- 「データ入力時の値変更の禁止」もチェックをはずします。
- 計算式を設定します。
- テキストタイプのキーの場合
- この計算式の結果は、デバイス1からは「1.1」「1.2」「1.3」、デバイス2からは「2.1」「2.2」「2.3」のような主キーになります。必要に応じて変更してかまいません。フィールドタイプを数字からテキストに必ず変更してください。このフィールドと関連する外部キーもすべて、テキストに変更します。
-
$$MIRRORSYNC_DATABASEID & "." & serialField コピー
-
- この計算式の結果は、デバイス1からは「1.1」「1.2」「1.3」、デバイス2からは「2.1」「2.2」「2.3」のような主キーになります。必要に応じて変更してかまいません。フィールドタイプを数字からテキストに必ず変更してください。このフィールドと関連する外部キーもすべて、テキストに変更します。
- 数字タイプのキーの場合
- この計算式の結果は、デバイス1からは「10001」「10002」「10003」、デバイス2からは「20001」「20002」「20003」のような主キーになります。「10000」の部分は、数字の範囲を広げたり狭めたりするために任意の数字に置き換えてください
-
$$MIRRORSYNC_DATABASEID * 10000 + serialField コピー
- テキストタイプのキーの場合
- MirrorSyncの「主キーの照合」で、「デベロッパが管理」を選択し、「serialField」を主キーとして設定します。
原文:MIRRORSYNC_DATABASEID for user-visible numbers http://docs.360works.com/index.php/MirrorSync_advanced_topics#MIRRORSYNC_DATABASEID_for_user-visible_numbers
コメント
0件のコメント
サインインしてコメントを残してください。