繰り返しコンテナでデータの変更履歴を管理する
最終更新日: 2021年5月6日
R8 | R9
更新処理を行ったとき、ログファイル(logs/system.log)に次のような記録を残すことができます。
この機能は標準では無効になっています。有効にする場合は「画面>その他>世代管理>ログに変更履歴を残す」を有効にします。
本設定は変更のみならず、値の追加ならびに削除時にもログが出力されます。
ここでは繰り返しコンテナを用いて、任意のデータに関するすべての変更履歴を画面に表示する例を紹介します。
変更履歴を管理する5つの項目を追加します。(項目名、項目IDはここに示した以外でもかまいません。)
コンテナの先頭に、最新の変更履歴を格納しようとしています。
「出力制御>スタイル>ラベルの幅」を 5% とします。(以降、ラベルの幅設定の説明は省略します。)
日付時刻型とします。
読込専用とします。
日付時刻型の項目は標準でコンテナ内のソート機能が有効になっています。これを解除します。
上の日付項目だけでなく、コンテナのソート機能はすべて無効としてください。
登録・更新時の初期値を次のように式で設定します。
CIDは繰り返しコンテナでのみ使える特別な関数で、コンテナ内の位置を返します。この式は、先頭の行にはNOW関数の結果を適用し、それ以外は現時点の値をそのまま維持する、というものです。
読込専用とします。
登録・更新時の初期値を次のように式で設定します。
この式は、先頭の行には現在ログオンしているアカウントのuseridを適用し、それ以外は現時点の値をそのまま維持する、というものです。
入力項目の種類を「テキストエリア」とします。また、読込専用とします。
内容の初期値を次のように式で設定します。
この式は、先頭の行にはCHANGELOG関数の結果を適用し、それ以外は現時点の値をそのまま維持する、というものです。
変更履歴内容を管理する項目の型が「テキストエリア」となっていない場合、標準で格納できる文字列の最大数は255文字に制限されます。
上の例は、繰り返しコンテナ「変更履歴」の先頭に、最新の更新履歴を追加するものでした。
これをコンテナの末尾に追加するように変更する方法を説明します。
図4の「繰り返し項目の自動増減」を「先頭に追加」から「末尾に追加」に変更します。
続いて、初期値の式でFIRST関数をLAST関数へ変更します。(日付時刻、ユーザID、内容項目のいずれも変更します。)
これでコンテナの末尾に、最新の変更履歴が格納されます。
複数のモデルで変更履歴を扱うような場合は、テンプレートモデルにすると便利です。
ここでは「システム」タブ内の jfcDesignerUserTemplateModelitem1 を「変更履歴」テンプレートとする例を示します。
システムタブ一覧には、作成した変更履歴テンプレートを確認できます
任意のモデルに対して、ギアアイコンから「テンプレート>変更履歴」を選択してみます。
変更履歴に関する5つの項目がモデルに追加されます。
最後に、このモデルの変更履歴機能を有効にします。
変更履歴を有効にする
updateCustomer|DoUpdate:1000|
モデル'customer'の項目'顧客名'の値'鈴木 花子'が'佐藤 花子'に変更されました。
ワンポイント
モデルの詳細画面に変更履歴を表示する(1) - 先頭に追加される
例
定義方法
項目名
項目ID
型
ラベルの幅
読み込み専用
変更履歴
changelog
繰り返しコンテナ
-
-
No
changelog/cid
繰り返しコンテナID
5%
○
日付時刻
changelog/cdate
日付時刻
20%
○
ユーザID
changelog/cuserid
文字列(ユーザID)
10%
○
内容
changelog/ccontent
文字列(テキストエリア)
65%
○
繰り返しコンテナ changelog
ワンポイント
繰り返しコンテナID changelog/cid
日付時刻 changelog/cdate
ソートは無効とすること
本機能はコンテナの先頭(または末尾)に変更履歴を追加することを前提としてるため、ユーザが任意に(コンテナの並びを)ソートしてしまうと、動作を保証できなくなります。
IF(CID()==FIRST(${changelog/cid}),NOW(),${changelog/cdate})
ユーザID changelog/cuserid
IF(CID()==FIRST(${changelog/cid}),USERINFO("userid"),${changelog/cuserid})
内容 changelog/ccontent
内容項目(新規登録)
IF(
CID()==FIRST(${changelog/cid}),
"データを新規に登録しました。",
${changelog/ccontent}
)
内容項目(更新)
IF(
CID()==FIRST(${changelog/cid}),
CHANGELOG(),
${changelog/ccontent}
)
注意
モデルの詳細画面に変更履歴を表示する(2) - 末尾に追加される
設定の変更
日付時刻項目
IF(CID()==LAST(${changelog/cid}),NOW(),${changelog/cdate})
ユーザID項目
IF(CID()==LAST(${changelog/cid}),USERINFO("userid"),${changelog/cuserid})
内容項目(新規登録)
IF(
CID()==LAST(${changelog/cid}),
"データを新規に登録しました。",
${changelog/ccontent}
)
内容項目(更新)
IF(
CID()==LAST(${changelog/cid}),
CHANGELOG(),
${changelog/ccontent}
)
ワンポイント
テンプレートモデルとして用意する
適用例
仕様・制約