レコードの最終変更日時を示す DateTime データタイプの項目属性を指定します。
オブジェクト: Transaction 対応しているプラットフォーム: スマートデバイス (Android、iOS)
この項目属性は、サーバーからデバイスに同期する必要がある行を判断するために、タイムスタンプアルゴリズムで参照されます。つまり、デバイスでは、最終変更日時が前回の同期のタイムスタンプより新しい行が同期されます。
次回の同期時には、デバイスからサーバーにタイムスタンプが送信され、そのタイムスタンプと [ Last Modified Date Time Attribute ] の値が比較されます。前回の同期以降に変更または追加されたすべての行が考慮されます。
このプロパティは設計時にのみ適用されます。
Chat トランザクションオブジェクトが次のように定義されているものとします。
ここから分かるように、次のようにプロパティが設定されています (タイムスタンプによる同期を使用する場合は、両方のプロパティが必要です)。
また、2 人の友人がチャットシステムで通信しており、それぞれのデバイスで次の行が同期されたとします。
friend1 |
friend2 |
2017/10/12 0:00:01 |
False |
Happy birthday! |
friend2 |
friend1 |
2017/10/12 0:00:02 |
False |
Thks =) See you tomorrow at the dance club? |
friend1 |
friend2 |
2017/10/13 0:05:47 |
False |
Mom ¬¬ I'm fine.Write u later.Bye |
数分後、friend1 は、Mom 宛てのメッセージを間違えて friend2 に送信したことに気づきます。幸い、このチャットシステムでは、送信したメッセージの内容を変更できるため、friend1 はテキストを「Hey dude! I'm at the dance club. Where r u?」に変更することに決めます。
一般に、開発者がこの機能を実装する場合、New コマンド (非推奨) を使用するか、次のようにプロシージャー内でビジネスコンポーネントの Load メソッドと Commit コマンドを組み合わせます。
parm(in:&From, in:&To, &DateTime, in:&Text);
&Chat.Load(&From,&To,&DateTime)
&Chat.ChatMessage = &Text // 'Hey dude! I'm at the dance club. Where r u?"' でインスタンス化
&Chat.Save()
commit
開発者は、チャットテーブルにこの新しい行を挿入すると、ターゲットデバイスに変更が自動的に反映されるものと想定します。ただし、タイムスタンプによる同期が使われている場合、最後のメッセージが friend2 のデバイスに既に同期されているため、更新後の行は送信されません (ハッシュ比較は行われません)。したがって、適切なデータ更新 (挿入) メカニズムを開発者が実装する必要があります。この場合、上記のプロシージャーを次のコードに変更する必要があります。
&Chat.Load(&From,&To,&DateTime)
&Chat.ChatMessage = &Text // 'Hey dude! I'm at the dance club. Where r u?"' でインスタンス化
&Chat.ChatTimestamp = now() // 最終更新日時 (値 10/13/17 12:06:17 AM)
&Chat.Save()
commit
開発者が行を更新すると、両方のデバイスのオフラインデータベースに次のレコードが反映されます (friend1 にとっては好都合です)。
friend1 |
friend2 |
2017/10/12 0:00:01 |
False |
Happy birthday! |
friend2 |
friend1 |
2017/10/12 0:00:02 |
False |
Thks =) See you tomorrow at the dance club? |
friend1 |
friend2 |
2017/10/13 0:06:17 |
False |
Hey dude! I'm at the dance club. Where r u? |
プロパティの値を設定したときに、それに対応する変更を適用するには、 [ すべてリビルド ] を実行します。
このプロパティは GeneXus 15 Upgrade 8 以降で使用できます。
|