レコードの削除に関する情報を含むブール値の項目属性を指定します。この項目属性の値が True の場合、レコードは削除されたものと見なされます。
データベーステーブルからの行の削除は、通常、次の 2 つに分類されます:
- 物理的な削除
行がデータベースから完全に削除されます (別名: ハード削除)。GeneXus でこの削除を実行するには、For Each コマンドと Delete コマンドを組み合わせるか、ビジネスコンポーネントの Delete メソッドを使用します。
- 論理的な削除
物理的な削除とは対照的に、行はデータベースから削除されません (別名: ソフト削除)。代わりに、開発者は、関連テーブルに特別なブール値の項目属性 (IsDeleted など) を追加し、行を削除済み (True) または未削除 (False) としてマークします。これは更新と見なすことができます。
タイムスタンプによる同期を使用してサーバーとデバイスの間でデータを交換する場合、サーバー側での物理的な削除は非生産的です。この方法で削除された行は、以降の同期でデバイスのオフラインデータベースから削除されないためです。この概念を明確に理解するため、「例」のセクションを参照してください。
このプロパティは設計時にのみ適用されます。
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? |
friend1 |
friend2 |
2017/10/13 3:57:03 |
False |
Hey dude! U still in the dance club? Can't find u.Call me. |
数分後、friend1 は friend2 を見つけ、最後に送信したメッセージを削除することに決めます。通常、開発者は、次のコードを使用してプロシージャーを作成します。
parm(in:&From,in:&To,in:&DateTime);
For each Chat
Where ChatUsernameFrom = &From // 'friend1' でインスタンス化
and ChatUsernameTo = &To // 'friend2' でインスタンス化
and ChatTimestamp = &DateTime // 10/13/17 03:57:03 AM でインスタンス化
delete
EndFor
削除は物理的に実行されることに留意してください。以降の同期では、タイムスタンプによる同期メカニズムに起因して、friend2 のデバイスには元の行がすべて残る (3 行目が削除されない) のに対し、サーバーと friend1 には最初の 2 行のみが残ります。このように動作する理由は、サーバー側で各デバイスのデータが認識されず、最終変更日時の項目属性に基づいてデータが送信されるだけであるためです。この問題は完全に開発者の責任によるものであり、プロシージャー内の削除コードを次に置き換えて修正する必要があります:
For each Chat
Where ChatUsernameFrom = &From // 'friend1' でインスタンス化
and ChatUsernameTo = &To // 'friend2' でインスタンス化
and ChatTimestamp = &DateTime // 10/13/17 03:57:03 AM でインスタンス化
ChatIsDeleted = True // 論理的な削除
ChatTimestamp = Now() // 削除によるテーブルの更新 (値 10/13/17 04:15:17 AM)
EndFor
この場合、サーバー側で物理的な削除は実行されず、データベースの状態は次のようになります:
friend1 |
friend2 |
2017/10/12 0:00:01 |
False |
Happy birthday! |
friend2 |
friend1 |
2017/10/12 0:00:02 |
False |
Thks =) See you tomorrow? |
friend1 |
friend2 |
2017/10/13 4:15:17 |
True |
Hey dude! U still in the dance club? I can't find u.Call me. |
今回は、タイムスタンプアルゴリズムに基づいて新たに同期が行われた後に、オフラインデータベース (friend1 と friend2 の両方) に削除済みメッセージが残ることはありません。
friend1 |
friend2 |
2017/10/12 0:00:01 |
False |
Happy birthday! |
friend2 |
friend1 |
2017/10/12 0:00:02 |
False |
Thks =) See you tomorrow? |
このプロパティは GeneXus 15 Upgrade 8 以降で利用できます。
オブジェクト: Transaction 対応しているプラットフォーム: スマートデバイス (Android、iOS)
|