論理削除
最終更新日: 2022年10月28日
R8 | R9
「顧客」モデルに論理削除機能を設定した例です。
「一般ユーザ」と「業務管理者」というプリンシパルを持つ2アカウントで動作を確認します。
2つのアカウントの違いは次の通りです。
※「業務管理者」は下図の通り新規追加したプリンシパルです。
業務管理者には物理削除のパーミッションを付与しました。
ボタン押下により、データベースからの削除が行われます。
業務管理者でもこの値を編集させない運用の場合は、この項目を隠し項目(または読み込み専用)としてもかまいません。
標準では、論理削除の判定項目には実行時の日付時刻(を示す文字列)が格納されます。
このルールをカスタマイズすることができます。
本設定を用いる場合、対象モデルの詳細画面を用意することが必要です。
ボタンの表示順序を制御することはできません。オリジナルボタンは常にボタン表示部の右側に配置されます。
「画面 > スクリプト > ヘルパ」の実行タイミング "論理削除" のスクリプトを用意した場合、こちらが優先されます。(この場合、論理削除項目に日付時刻をセットするJavaコードは生成されません。)
例
アカウント プリンシパル 説明 user 一般ユーザ 論理削除のみ manager 業務管理者※ 論理削除と物理削除が行える
プリンシパルの追加手順については「認証・認可 > モデル単位の制御 > 新しいプリンシパルの追加」をお読みください。
一般ユーザの場合
この時点で、削除ボタンは論理削除として動作する仕様となっています。
ボタン押下によって、「有効期限」項目に実行時の日付時刻をセットしてデータを更新します。
そのため、論理削除したデータは表示されません。
業務管理者の場合
このアカウントにおいては暗黙条件が解除される設定のため、データが表示されます。
物理削除を行う
通常の「削除」ボタンは論理削除処理となっているため、別途「物理削除」ボタンを用意しています。
定義方法
ワンポイント
保存する値は日付時刻(を意味する文字列)になります。
無効判定の使い方は「選択肢モデル > 選択肢を無効にする」をお読みください。
※「値をデータベースに保存する」設定が有効になっている必要があるため、予めこの設定を確認してください。
確認ができたら、「暗黙条件」タブより設定を行います。
今回は「値が null(未入力) と等しい」というルールにします。
これによって、この項目の値が未入力のデータのみが検索・一覧画面などで表示されるようになります。
また、適用除外権限を同時に設定します。権限名は "pdelete" とします。(後述)
ワンポイント
また、論理削除判定項目には手順1で用意した項目IDを指定します。
「画面 > その他 > 削除 > Javaソースコードの設定」より行います。
設定内容は次の通りです。
これにより、物理削除の権限をもったアカウントでは物理削除も行えるようになります。
項目
設定内容
説明
画面名
詳細表示画面
以下の設定が詳細表示画面に適用されます。
表示する
表示する
有効にします。
表示条件
HASPRINCIPAL("manager")
業務管理者プリンシパル "manager" を持っている場合に、物理削除ボタンを表示するようにします。
ボタン名
物理削除
ボタンの文言です。任意の内容を指定します。
イベント名
Send
物理削除画面に対してSendイベントを送信する必要があります。
アクション名
physicalDeleteCustomer
物理削除画面は physicalDelete<モデル名> となります。(*1)
ギアアイコンから「パーミッション追加」を選択し、物理削除が可能なパーミッション "pdelete" を追加します。
pdeleteは固定名です。日本語名は任意です。ここでは "物理削除" とします。
ギアアイコンから「プリンシパル追加」を選択し、事前に追加しておいた業務管理者(manager)のパーミッションを設定します。
判定項目を独自に設定するWDN
この項目が null なら削除されていないとみなします。
例として「値が0なら正常、1なら削除」というルールを設定します。
customer.valid = "1";
仕様・制約
詳細画面が必要
未対応の機能
ボタンの配置
スクリプトが優先される