データの世代管理
最終更新日: 2022年8月2日
世代管理とは、あるデータに対して何らかの操作(登録・更新・削除)が行われた際、その操作直前と操作後のデータ状態をバックアップしておき、後で確認できる機能です。
「詳細」をクリックすると、その時点のデータが表示されます。赤枠部分は自動設定されます。
一つ前の状態から、変更された項目の値が赤字で表示されます。また、アスタリスク "*" も付与されます。9.1.0
その項目にマウスオーバーすると、一つ前(変更前)の値が表示されます。9.1.0
顧客管理アドオン(JSHCUSTOMER)の「顧客」モデルに世代管理機能を追加する例で説明します。
世代管理用にデータベース内部で用意されるモデルのIDを指定することができます。
モデルの詳細表示画面に、このデータの世代を表示するかを設定します。
この設定は、変更された情報だけを履歴として残すという別機能になります。通常、データごとの世代管理(このページの内容)を設定する場合、ログに変更履歴を残す設定と併用する必要はありません。
ここで追加された世代管理のための管理項目を変更することはできません。例えば検索や一覧表示の設定(チェックボックス)を追加したり削除することもできません。標準のままご利用ください。
追加された項目とそれぞれの役割は次の通りです。
システム管理者権限を有したアカウントでログオンしたとき、管理処理メニューを操作できます。このとき「管理処理>モデル定義」から、世代管理を有効にしたモデルを選択し、これらのモデルについての世代情報を確認することもできます。
操作日付、操作種別、操作者の列は自動で付与されます。
管理処理メニューから遷移した場合は「前へ」「次へ」ボタンが有効になります。
世代管理を有効にしたモデルでは、ヘルパクラスに saveAsGeneration というメソッドが生成されます。第一引数がストアモデル(entity)、第二引数がタイプ(後述)、第三引数は p です。
第二引数は
エンティティサービスの更新では、第二引数に GenerationType.AFTERUPDATE を指定しています。これを変更することはできません。
画面からの操作と同様に GenerationType.BEFOREUPDATE の状態も記録したい場合、EntityServiceを呼び出す*直前*に
を手動で呼び出すことで、変更前の状態を記録させることができます。
サブモデルで世代管理を行うと、サブモデルでの変更をメインモデル処理の世代管理操作として記録されます。サブモデルでの設定は次の点に注意してください。
対象モデルに権限設定を行った場合、世代管理にも適用されます。
概要
次の操作を行うたびに「元データ」に加えて以下の情報がデータごとに記録されます。
変更箇所の確認
設定方法
変更された項目の値を赤字で表示する機能、および一つ前の値を表示する機能は "CSS layout" のときに利用できます。9.1.0
「世代管理>世代管理用モデルを用意する」にチェックを入れます。
その他の設定
世代管理用モデルID
通常は空白とします。(空白の場合、"JSH"+[モデルID]+"GEN" が自動設定されます。)
詳細画面に履歴表示欄を用意する
標準で有効になっています。このページでは本設定を有効とした場合で説明します。
ログに変更履歴を残す
この設定の詳細は「繰り返しコンテナでデータの変更履歴を管理する」をお読みください。
これで、世代管理機能の追加は完了です。
注意
※ 設定を変更するとビルドに失敗し、正常動作しなくなる可能性があります。
世代管理テンプレートの項目
項目名 項目ID 役割
世代一覧 JSHGLAYOUTITEM レイアウト専用項目です。このあと、レイアウトの設定方法を説明します。
操作ID JSHGOPERATIONID 自動採番される値です。システム内部で用いられます。
操作日付 JSHGOPERATIONDATE 登録、変更、削除操作が行われた日付時刻です。
操作種別 JSHGOPERATIONTYPE 登録、変更、削除といった操作の種別を記します。画面からの操作による変更の場合は (前) (後) を区別します。
操作者 JSHGOPERATIONUSERID 操作を行ったユーザIDです。
操作対象モデル JSHGOPERATIONMODELID 通常は空白です。対象モデルがサブモデルの場合、サブモデルのIDが記録されます。
モデルの「レイアウト>詳細」を開くと、「世代一覧」というレイアウトが追加されています。
ラベルは任意に設定できます。ここでは "世代管理" とします。「画面表示時に折り畳んで表示する」にチェックを入れることで、世代管理に関する情報を最初は非表示とすることができます。設定後、「追加」ボタンをクリックします。
これで折り畳みレイアウトの設定は完了です。
管理処理から確認する
スクリプトでの利用
<モデルID>Helper.saveAsGeneration(entity, GenerationType.INSERT, p);//insert時
<モデルID>Helper.saveAsGeneration(entity, GenerationType.AFTERUPDATE, p);//update時
<モデルID>Helper.saveAsGeneration(entity, GenerationType.DELETE, p);//delete時
<モデルID>Helper.saveAsGeneration(entity, GenerationType.LOGICALDELETE, p);//logicalDelete(論理削除)時
jp.jasminesoft.jfc.GenerationType
となっており、次のような定数が用意されています。
public interface GenerationType {
int INSERT = 1;
int BEFOREUPDATE = 2;
int AFTERUPDATE = 3;
int DELETE = 4;
int LOGICALDELETE = 5;
}
更新の扱い
<モデルID>Helper.saveAsGeneration(変更前のentity, GenerationType.BEFOREUPDATE, p);
サブモデル9.1.0
権限9.1.3
変更履歴