削除操作のときに、対象レコードを別のテーブル(退避テーブル)へコピーしてから、元のテーブルからは物理的に削除する System Field です。「消したデータは残しておきたいが、業務で使う元テーブルには生きているデータだけを置いておきたい」という要件に応えます。
UI は持たず、Module に 1 つ置くだけで、その Module の削除ボタンの動作が「退避 + 物理削除」に切り替わります。フィールド名は予約名 DeleteArchive 固定です(LogicalDelete などと同じく、この綴りでないと退避動作が働きません)。
- 削除したデータを監査・履歴のために残したいが、元テーブルは肥大化させたくない
- 削除済みデータを別テーブル(アーカイブ)にまとめて管理したい
- 削除時に「いつ・誰が削除したか」を退避側に記録したい
「消したデータを残す」もう一つの方式である論理削除との違い:
| 方式 | 元テーブル | 復活 | 向いている場面 |
|---|---|---|---|
論理削除 (LogicalDelete 等) |
行は残り、フラグで非表示 | フラグを戻すだけで容易 | 頻繁に復活する/削除が少ない |
| 削除時データ退避 (この Field) | 行は物理削除され、退避テーブルへ移動 | 退避テーブルから手動でリストア | 元テーブルを常に「生きているデータだけ」に保ちたい |
論理削除とは併用できません。 同じ Module に
LogicalDelete/DeletedAt/Deleterを置いた状態でこの Field を追加すると、デザインチェックでエラーになります。どちらか一方の方式を選んでください。
| C#名 | 日本語表示名 | 説明 |
|---|---|---|
| - | フィールドタイプ | 削除時データ退避 固定 |
| C#名 | 日本語表示名 | 型 | 既定値 | 説明 |
|---|---|---|---|---|
| Name | 名前 | string | "" |
予約名 DeleteArchive 固定(この綴りでないと退避動作が働かない) |
| ArchiveTable | 退避先テーブル | string | "" |
退避先のテーブル名(必須)。 元テーブルと同じ列がすべて存在している必要がある |
| ArchiveDataSourceName | 退避先データソース | string | "" |
退避先のデータソース。空なら元テーブルと同じデータソースを使う |
| DeletedAtColumn | 削除日時の列 | string | "" |
退避先テーブルの「削除日時」列名(任意)。設定すると削除時に現在時刻を記録する |
| SaveDeletedAtAsUtc | 削除日時をUTCで保存 | bool | true |
削除日時を UTC で保存する。false でローカル時刻。削除日時の列を設定したときのみ有効 |
| DeleterColumn | 削除者の列 | string | "" |
退避先テーブルの「削除者」列名(任意)。設定すると削除時にログインユーザーを記録する(認証がある場合) |
DeletedAtColumn/DeleterColumnは退避先テーブル側の列名です。元テーブルには不要で、退避先にだけ用意すれば動きます。論理削除のシステムフィールドDeletedAt/Deleterとは別物です。
削除ボタンが押されると、次の順で処理されます:
- 対象レコードを元テーブルから 1 件読み取る
- その内容を退避テーブルへコピー(INSERT)する。
DeletedAtColumn/DeleterColumnを設定していれば、削除日時・削除者もあわせて記録する - 元テーブルから対象レコードを物理削除する
退避テーブルは、元テーブルと同じ列 + 任意の削除メタ列で作ります。列名でそのままコピーするため、元テーブルの全列が退避先に揃っている必要があります。
orders (元) orders_archive (退避先)
├── id ├── id
├── code → ├── code
├── amount ├── amount
├── deleted_at ← 削除日時の列 (任意)
└── deleter ← 削除者の列 (任意)
ArchiveDataSourceName に別のデータソースを指定すると、別 DB へ退避できます。この場合、元テーブルの削除と退避テーブルへの追加は別トランザクションになります(片方だけ成功したときの自動復旧は行いません)。
UI・値を持たないため、スクリプトから操作するシーンはありません。
共通プロパティは Field 共通プロパティ を参照。
- 論理削除 (削除フラグで非表示にする) ─ 消したデータを残すもう一つの方式
- Field 共通プロパティ
- Field 全体(System Field の一覧)
- Module 全体設定