概要
このCookBookでは、マスタメンテナンスアプリケーションで、すでに登録されたマスタデータの値を変更して更新する際に、どの項目がどのように変更されたかをログ出力する機能の実装方法を記載します。
重要なマスタデータでは、変更履歴のログを取得する必要があることがあり、そのようなケースにご活用頂けます。
出力するログ情報
'User 「ユーザID」 changes 「変更項目」 from 「修正前の値」 to 「修正後の値」.'
本サンプルではシステムログに出力する実装としております。
intra-mart Accel Platform ログ仕様書 システムログ
完成サンプル
以下の完成サンプルをダウンロードしてご活用ください。
このサンプルは、2025 Spring 版以降でインポートできます。
サンプルデータ:cookbook251313_sample.zip
AccelStudio のアプリケーションインポート機能を利用してインポートしてください。
手順
- マスタメンテナンスアプリケーションの作成
- 修正前の値を取得
- ログの生成
- ログの出力
マスタメンテナンスアプリケーションの作成
マスタメンテナンスアプリケーションと適当なデータを用意します。
以下に移動し、「example.xlsx」をダウンロードします。
「サイトマップ - Accel Studio - アプリケーション作成 - 業務テンプレート一覧 - マスタメンテナンス - Excelファイルを利用」

「Select Files」ボタンをクリックし、ダウンロードした「example.xlsx」を選択します。

「Upload」ボタンをクリックします。

「Create Application」ボタンをクリックします。

テンプレートビルドジョブのステータスが「COMPLETE」になったら、以下の詳細ボタンをクリックし、作成したアプリケーション詳細画面へ遷移します。


修正前の値を取得
更新時にログを出力する処理を作成します。
「Logic」タブをクリックし、「example edit process」をクリックします。

修正前と修正後の値を比較するために、修正前の値を更新が行われる前に取得します。
修正前の値を保持する変数を用意します。
「Variable Settings」ボタンをクリックします。

「IM-Repository」をクリックします。

「sample」エンティティを選択し、「OK」ボタンをクリックします。

変数が追加されます。
変数名をわかりやすい名前に変更するために、追加したIM-Repository変数を選択し、「Change Key Name」ボタンをクリックします。

「before_entity」に名前を変更し、「OK」ボタンをクリックします。

続いて、修正前の値を取得するロジックと取得した値を先程作成した変数に代入するロジックを作成します。
最初に、修正前の値を取得するロジックの作成を行います。
「IM-Repository - Acquire Entity Data」ロジックを追加します。


エンティティデータの生成を行うため、「Search」ボタンをクリックし、「Entity ID」を設定します。

「sample」エンティティを選択し、「Submit」ボタンをクリックします。

取得するエンティティデータの主キーを指定します。
「Mapping Setting」ボタンをクリックします。

主キーの紐づけを行い、「OK」ボタンをクリックします。

次は、取得したエンティティを変数に代入するロジックの作成を行います。
「Base - Variable Operation」ロジックを追加します。


マッピングの設定を行うため、追加した「Base - Variable Operation」ロジックを選択し、「Mapping Setting」ボタンをクリックします。

ヘッダ左上に位置するセレクトボックスから、先程設定したエンティティデータ取得ロジックを選択し、「Add Input」ボタンをクリックします。

追加したエンティティとbefore_entityの紐づけを行い、「OK」ボタンをクリックします。

追加したロジックをエンティティの更新ロジックの前に配置します。


ログの生成
以上の手順で用意した値を元に、修正があった場合、ログを生成するロジックを作成します。
「Add User Definition - JavaScript Definition Create Newly」をクリックします。

表示されたダイアログで、以下の内容に修正し、「Register」ボタンをクリックします。 Available Range:チェックあり User Definition ID:generate_log User Definition Name:generate_log Input Value:before_entity(IM-Repository - sample), after_entity(IM-Repository - sample), user_cd(string) ※before_entity, after_entityは、IM-Repositoryからsampleエンティティを選択し、名前を変更。 Return Value:log_items(string[]) Script:以下、変更があった場合にログを生成し、文字列の配列を返す処理を記載します。
function run(input) {
var beforeValue = input.before_entity;
var afterValue = input.after_entity;
var logItems = Object.keys(beforeValue)
.filter(function(key) {
if (
beforeValue[key] !== null
&& afterValue[key] !== null
&& typeof beforeValue[key].getTime === 'function'
&& typeof afterValue[key].getTime === 'function'
) {
return beforeValue[key].toDateString() !== afterValue[key].toDateString();
} else {
return beforeValue[key] !== afterValue[key];
}
})
.map(function(key) {
return 'User 「' + input.user_cd + '」 changes 「' + key + '」 from 「' + beforeValue[key] + '」 to 「' + afterValue[key] + '」.';
});
return {
log_items: logItems
};
}


マッピングの設定を行うため、追加した「generate_log」ロジックを選択し、「Mapping Setting」ボタンをクリックします。

ヘッダ左上に位置するセレクトボックスから、「Account Context」を選択し、「Add Input」ボタンをクリックします。

以下、紐づけを行い、「OK」ボタンをクリックします。
- Inputのエンティティをafter_entityに紐づけ。
- Variableのbefore_entityをbefore_entityに紐づけ。
- Account ContextのuserCdをuser_cdに紐づけ。

ログの出力
生成したログの配列に対して繰り返し処理を行い、ログを出力します。
「Base - Loop Start」ロジックを追加します。

繰り返し対象を選択します。
「Loop Start」を選択した状態で、「Loop Target」の「Select」ボタンをクリックします。

ログの生成ロジックの返却値を選択し、「OK」ボタンをクリックします。

続いて、ログを出力するために「Generic Tasks - Log Output」ロジックを追加します。

マッピングの設定を行うため、追加した「Generic Tasks - Log Output」ロジックを選択し、「Mapping Setting」ボタンをクリックします。

ヘッダ左上に位置するセレクトボックスから、先程追加した繰り返しロジックを選択し、「Add Input」ボタンをクリックします。

追加した繰り返しロジックのitemをログ出力の出力項目に紐づけを行い、「OK」ボタンをクリックします。

追加したロジックをエンティティの更新ロジックの後に配置します。


修正内容を保存します。
「Save」ボタンをクリックします。

「Save」ダイアログの「OK」ボタンをクリックし、保存します。

動作確認のため、更新を行います。
アプリケーション詳細画面の「example List Screen」をクリックします。

「プレビュー」ボタンをクリックします。

適当な値の編集アイコンをクリックし、編集画面へ移動します。

値を編集後、「Update」ボタンをクリックします。

ログが出力されていることを確認します。
ログ出力がデフォルトの場合「%RESIN_HOME%/webapps/imart/WEB-INF/log/platform/system.log」に出力されます。

また、アプリケーション詳細画面から、システムログを確認することも可能です。
ヘッダーメニューの「Log - System Log List」をクリックします。


