Skip to content

Latest commit

 

History

History
91 lines (59 loc) · 5.35 KB

File metadata and controls

91 lines (59 loc) · 5.35 KB

DeleteArchiveField (削除時データ退避)

これは何か

削除操作のときに、対象レコードを別のテーブル(退避テーブル)へコピーしてから、元のテーブルからは物理的に削除する 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. 対象レコードを元テーブルから 1 件読み取る
  2. その内容を退避テーブルへコピー(INSERT)する。DeletedAtColumn / DeleterColumn を設定していれば、削除日時・削除者もあわせて記録する
  3. 元テーブルから対象レコードを物理削除する

退避テーブルの準備

退避テーブルは、元テーブルと同じ列 + 任意の削除メタ列で作ります。列名でそのままコピーするため、元テーブルの全列が退避先に揃っている必要があります。

orders (元)             orders_archive (退避先)
├── id                  ├── id
├── code          →     ├── code
├── amount              ├── amount
                        ├── deleted_at   ← 削除日時の列 (任意)
                        └── deleter      ← 削除者の列 (任意)

別データソースへの退避

ArchiveDataSourceName に別のデータソースを指定すると、別 DB へ退避できます。この場合、元テーブルの削除と退避テーブルへの追加は別トランザクションになります(片方だけ成功したときの自動復旧は行いません)。


スクリプトから

UI・値を持たないため、スクリプトから操作するシーンはありません。

共通プロパティは Field 共通プロパティ を参照。


関連項目