データの世代管理

最終更新日: 2022年8月2日

概要

世代管理とは、あるデータに対して何らかの操作(登録・更新・削除)が行われた際、その操作直前と操作後のデータ状態をバックアップしておき、後で確認できる機能です。
次の操作を行うたびに「元データ」に加えて以下の情報がデータごとに記録されます。

  • 操作日時
  • 操作種別(登録・更新・削除)
  • 操作者(ログオンID)
データの操作履歴(一覧)

「詳細」をクリックすると、その時点のデータが表示されます。赤枠部分は自動設定されます。

操作時点のデータを表示
※ 世代管理の詳細画面では「前へ」「次へ」ボタンは無効となっています。このボタンは後述する「管理処理から確認する」を行ったときに有効となります。

変更箇所の確認

一つ前の状態から、変更された項目の値が赤字で表示されます。また、アスタリスク "*" も付与されます。9.1.0

変更された項目の値が赤字で表示される

その項目にマウスオーバーすると、一つ前(変更前)の値が表示されます。9.1.0

一つ前(変更前)の値を表示した例

設定方法

顧客管理アドオン(JSHCUSTOMER)の「顧客」モデルに世代管理機能を追加する例で説明します。

顧客管理アドオンの顧客モデル
  1. 世代管理機能を追加したいモデルのレイアウトが "CSS layout" となっていることを確認します。
    変更された項目の値を赤字で表示する機能、および一つ前の値を表示する機能は "CSS layout" のときに利用できます。9.1.0
    レイアウトの確認
  2. 世代管理機能を追加したいモデルの編集画面から「画面>その他」タブを開きます。
    「世代管理>世代管理用モデルを用意する」にチェックを入れます。
    世代管理の設定

    その他の設定

    世代管理用モデルID

    世代管理用にデータベース内部で用意されるモデルのIDを指定することができます。
    通常は空白とします。(空白の場合、"JSH"+[モデルID]+"GEN" が自動設定されます。)

    詳細画面に履歴表示欄を用意する

    モデルの詳細表示画面に、このデータの世代を表示するかを設定します。
    標準で有効になっています。このページでは本設定を有効とした場合で説明します。

    ログに変更履歴を残す

    この設定は、変更された情報だけを履歴として残すという別機能になります。通常、データごとの世代管理(このページの内容)を設定する場合、ログに変更履歴を残す設定と併用する必要はありません。
    この設定の詳細は「繰り返しコンテナでデータの変更履歴を管理する」をお読みください。

  3. 「項目」タブに戻り、「ギアアイコン>テンプレート>世代管理項目」をクリックします。
    世代管理用のテンプレート追加
  4. 世代管理を行うのに必要なモデル項目が追加されました。
    これで、世代管理機能の追加は完了です。

    注意

    ここで追加された世代管理のための管理項目を変更することはできません。例えば検索や一覧表示の設定(チェックボックス)を追加したり削除することもできません。標準のままご利用ください。
    ※ 設定を変更するとビルドに失敗し、正常動作しなくなる可能性があります。

    世代管理用のテンプレート項目

    世代管理テンプレートの項目

    追加された項目とそれぞれの役割は次の通りです。

    項目名項目ID役割
    世代一覧JSHGLAYOUTITEMレイアウト専用項目です。このあと、レイアウトの設定方法を説明します。
    操作IDJSHGOPERATIONID自動採番される値です。システム内部で用いられます。
    操作日付JSHGOPERATIONDATE登録、変更、削除操作が行われた日付時刻です。
    操作種別JSHGOPERATIONTYPE登録、変更、削除といった操作の種別を記します。画面からの操作による変更の場合は (前) (後) を区別します。
    操作者JSHGOPERATIONUSERID操作を行ったユーザIDです。
    操作対象モデルJSHGOPERATIONMODELID通常は空白です。対象モデルがサブモデルの場合、サブモデルのIDが記録されます。
  5. 次に、世代管理機能の追加後、詳細画面で表示する更新履歴を折りたたみ可能にする手順を説明します。
    モデルの「レイアウト>詳細」を開くと、「世代一覧」というレイアウトが追加されています。
    レイアウト設定画面
  6. 左端メニューで「タイトルペイン」タブをクリックして開きます。
    ラベルは任意に設定できます。ここでは "世代管理" とします。「画面表示時に折り畳んで表示する」にチェックを入れることで、世代管理に関する情報を最初は非表示とすることができます。設定後、「追加」ボタンをクリックします。
    折り畳みレイアウトの適用(1)
  7. レイアウト専用項目 "世代一覧" をクリックして選択します。この項目だけを(前の手順で用意した)折り畳みレイアウトにドラッグ&ドロップします。
    折り畳みレイアウトの適用(2)
  8. 「レイアウト設定保存」ボタンをクリックし、編集したレイアウトを保存します。
    これで折り畳みレイアウトの設定は完了です。
    折り畳みレイアウトの適用(2)
  9. 最後にレイアウト専用項目の設定「出力制御 > その他 > レイアウト対象ID」を確認します。 これまでの手順通りに行なっていた場合、この部分は自動で設定されています。もし空白の場合は手動で "JSH" + モデルID + "GEN" と入力してください。
    レイアウト対象ID

管理処理から確認する

システム管理者権限を有したアカウントでログオンしたとき、管理処理メニューを操作できます。このとき「管理処理>モデル定義」から、世代管理を有効にしたモデルを選択し、これらのモデルについての世代情報を確認することもできます。

管理処理>モデル定義
モデルごとにメニューが用意される

操作日付、操作種別、操作者の列は自動で付与されます。

操作日付、操作種別、操作者項目

管理処理メニューから遷移した場合は「前へ」「次へ」ボタンが有効になります。

前へ、次へボタン

スクリプトでの利用

世代管理を有効にしたモデルでは、ヘルパクラスに saveAsGeneration というメソッドが生成されます。第一引数がストアモデル(entity)、第二引数がタイプ(後述)、第三引数は p です。

<モデル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;
}

更新の扱い

エンティティサービスの更新では、第二引数に GenerationType.AFTERUPDATE を指定しています。これを変更することはできません。

画面からの操作と同様に GenerationType.BEFOREUPDATE の状態も記録したい場合、EntityServiceを呼び出す*直前*に

<モデルID>Helper.saveAsGeneration(変更前のentity, GenerationType.BEFOREUPDATE, p);

を手動で呼び出すことで、変更前の状態を記録させることができます。

※ 変更前のentityをメモリ上にもっておく必要があります。こちらは開発するスクリプト内で意識して保持するようにしてください。

サブモデル9.1.0

サブモデルで世代管理を行うと、サブモデルでの変更をメインモデル処理の世代管理操作として記録されます。サブモデルでの設定は次の点に注意してください。

  • 「画面>その他>世代管理>世代管理用モデルを用意する」を有効にします。
  • 「詳細画面に履歴表示欄を用意する」はチェックしません
  • 世代管理項目群を付与してはいけません

権限9.1.3

対象モデルに権限設定を行った場合、世代管理にも適用されます。

変更履歴

  • R9.1.3より、対象モデルに権限設定を行った場合、世代管理にも同じ権限が適用されます。(R9.1.2までは個別の権限を適用すると、世代管理部分が表示されません。)
  • R9.1.0より、一つ前の状態から、変更された項目の値が赤字で表示されます。その項目にマウスオーバーすると、一つ前(変更前)の値が表示されます。
  • R9.1.0より、世代管理の詳細画面から元のモデルの詳細画面へ戻るボタンが用意されます。
  • R9.1.0より、詳細画面に用意された世代一覧表示で、行クリックによる世代詳細画面への遷移を行えるようになりました。(これまでは「詳細」ボタンのみで遷移できていた。)
  • R9.1.0より、サブモデルに世代管理を適用することができるようになりました。
  • R9.0.2より、親子モデルで、子モデル同時更新を設定した場合、親モデルで世代管理を有効にすることができるようになりました。
  • R9.0.2より、CSVアップロード更新からの修正も世代管理に反映されるようになりました。