論理削除を有効にすると、削除ボタンが特定項目のフラグセット機能に変わります。暗黙条件と組み合わせることでみかけ上、削除されたように振る舞います。 R7.2.1

ここでは図1,図2に示すような2つのアカウントを用意して説明します。

アカウントプリンシパル説明
user一般ユーザ論理削除のみ
manager業務管理者論理削除と物理削除が行える
図1 一般ユーザ
図2 業務管理者

一般ユーザ

一般ユーザでログオンします。顧客データを1件、登録します。

図3 顧客データの登録

登録後、「削除」ボタンを押下します。この時点で、削除ボタンは論理削除として動作する仕様となっており、ボタン押下によって「有効期限」項目に日付時刻をセットして更新という動作になります。

図4 論理削除機能を実行する

暗黙条件を設定し、「有効期限」項目の値が空白(null)のみ検索するようにしています。そのため論理削除したデータは検索されません。

図5 論理削除されたデータは不可視となる(暗黙条件の設定)

業務管理者

続いて業務管理者でログオンします。暗黙条件は解除される設定のため、データは検索できます。

図6 論理削除されたデータも検索できる

詳細画面を開きます。「有効期限」項目に、論理削除を行った日付時刻がセットされていることがわかります。

図7 有効期限項目の確認
有効期限項目の名前は任意ですが、型は「文字列型」としてください。保存する値は日付時刻(を意味する文字列)になります。

物理削除を行う

業務管理者は物理削除を行うことができます。通常の削除ボタンは論理削除となっているため、新たに「物理削除」ボタンを用意します。

図8 物理削除ボタンを用意する

ボタン押下により、データベースからの削除が行われます。

図9 物理削除の実行

ここでは「顧客」モデルに論理削除機能を設定します。図10に示すように、「有効期限」項目を用意します。
(項目名、項目IDは任意ですが、型は文字列型として用意してください。)

図10 顧客モデルに有効期限項目を用意する
モデル参照の「無効判定」項目として利用できます。

今回用意した「有効期限」項目は、モデル参照の無効判定項目としても利用できます。 無効判定の使い方は"選択肢モデル > 選択肢を無効にする"をお読みください。

有効期限項目の設定

この項目は暗黙条件として用います。そのためデータベースに保存するようにします。

図11 データベースに保存する

また、入力できないよう、読込専用とします。(本番運用時には隠し設定としてもかまいません。)

図12 読込専用と設定する

暗黙条件を設定します。「値が "null" と等しい」というルールにします。 ただし適用除外権限を同時に設定します。権限名は "pdelete" となります。(後述)

これにより、データ検索時には常に SQL の where 句に "where valid IS NULL" が付加されます。

図13 暗黙条件の設定

論理削除を有効にする

「画面 > その他 > 削除」を設定します。 「データの削除を論理削除にする」を有効にします。あわせて、論理削除判定用の項目を設定します。これは図10で用意した項目になります。

図14 論理削除を有効にする

物理削除ボタンを用意する

図14の画面で、さらに物理削除ボタンをオリジナルボタンとして用意します。(図15)

図15 物理削除ボタンの設定
項目 説明 入力例
画面名 "詳細表示画面"となります。 詳細表示画面
表示する 有効にします。 表示する
表示条件 業務管理者プリンシパル "manager" を持っている場合に、物理削除ボタンを表示するようにします。 HASPRINCIPAL("manager")
ボタン名 任意の名前を指定します。 物理削除
イベント名 物理削除画面に対してSendイベントを送信する必要があります。 Send
アクション名 物理削除画面は physicalDelete<モデル名> となります。(*1) physicalDeleteCustomer
1 キャメル記法を適用します。例えばモデル名が my_funny_valentine の場合は physicalDeleteMyFunnyValentine になります。

物理削除権限を用意する

新しいパーミッション "pdelete" を用意します。これは固定名です。日本語名は任意ですが、ここでは "物理削除" とします。

このパーミッションを保有するプリンシパルを用意します。一般ユーザと区分し、ここでは業務管理者(manager)を用意しました。

図16 権限設定
  • 図1,図2で用意したアカウントは、このプリンシパルを持つように設定されています。
  • 図13の暗黙条件設定では、適用外の権限(パーミッション)として、"pdelete" を設定してます。
  • 図15のボタン追加設定では、このプリンシパル "manager" を持っている場合にボタンを表示すると設定しています。

標準では、論理削除の判定項目は(削除時に)日付時刻(を示す文字列)が格納されます。この項目が null なら削除されていない、とみなします。

このルールをカスタマイズすることができます。例として「0:正常、1:削除」というルールを設定します。

暗黙条件の設定

図13の設定を "0に等しい" とします。

図17 暗黙条件の設定

スクリプトの設定

論理削除時に動作するスクリプトを記述します。これは「画面 > スクリプト > ヘルパ」の実行タイミングに "論理削除" を指定します。

図18 論理削除時に動作するスクリプトの設定

今回は次のようなコードになります。

customer.valid = "1";

詳細画面が必要

本設定を用いる場合、対象モデルの詳細画面を用意することが必要です。

未対応の機能

  • CSV・Excelアップロード更新には未対応です。アップロード更新での削除は「物理削除」になります。
  • REST API に対応していません。現在は物理削除のみです。

ボタンの配置

ボタンの表示順序を制御することはできません。オリジナルボタンは常にボタン表示部の右側に配置されます。

Wagby Developer Day 2017