第108回 レコード変更のログを取る
こんにちは。エヌ・ケイ・カスタマイズの大村です。
楽しい夏休み、と思いきや、コロナの感染が急激に拡大しております。皆様の体調はいかがでしょうか。感染対策に気を配りつつも、熱中症にも気をつけましょう。また、梅雨明けが早かったな、と思いきや、各地で豪雨が続いております。災害対策も万全になさってください。システム屋にとっては、天候不順や電力不足で停電になったりすると、情報インフラにも影響出てしまったりするので、なかなか落ち着かない日々ともなります。すみません、心配事ばかり挙げてしまいました。
さて、今回はレコードの変更履歴をログに取ろう、というお話です。レコードが変更された際に、フィールド単位でのログをレコードが確定されるタイミングで記録する方法です。監査証跡と呼ばれたりすることもありますね。
データベースを利用していると、「いつ変更されたんだろう?」といったことを調べる必要性が時々出てきます。今回は、ログを取るための一つの方法です。ほかにも様々な方法があり、利用場面に応じて考えていく必要がありますが、一つの方法として、参考になさってください。
今回は、題材として、アレルギー情報の変更履歴をログに取ってみます。
以下の記事は、Claris FileMaker 関数・スクリプトガイド(バージョン 19 対応)より、
Claris FileMaker 公式トレーニング教材
「21.レコード変更/閲覧のログを取る(822ページ)」を元に掲載しています。
この文献から、スクリプトトリガである「OnRecordCommit」を活用し、様々な関数からレコード変更のログ取得を学習することができました。文献の執筆者、関係者の方々に深謝いたします。
なお、このブログ記事の趣旨は、弊社所属スタッフの Claris FileMaker 学習の成果を公開することを目的とし、同時に、参考文献の内容の紹介に資するものであることを Claris International Inc. が確認しています。
考え方
- OnRecordCommit スクリプトトリガのタイミングでスクリプトを実行し、
- Get(変更されたフィールド) 関数を使って、変更されたフィールドと内容を取得します。
なかなか便利な関数ですね。
関数・スクリプト実装例
- 対象となる「アレルギー情報」テーブルとは別に、「変更ログ」テーブルを用意して、ここに変更ログを記録します。
- 今回作成するスクリプトは、OnRecordCommit スクリプトトリガのタイミングで実行されます。
これからスクリプトを、「トリガ | 変更ログ」という名称で作成していきます。このスクリプトを、[レイアウト設定] の [スクリプトトリガ] から OnRecordCommit スクリプトトリガにセットします。
- スクリプトを作成していきます。
- Get (変更されたフィールド) 関数は変更されたフィールド名を改行区切りで返します。
この関数を使って、変更されたフィールド名を取得します。戻り値が存在しない場合は修正されていないので、履歴はとりません。(1~6行目) - 変更されたフィールドの数だけ「変更ログ」テーブルにレコードを作成します。(13~22行目)
- 変更されたフィールド名を1行づつ取り出し、GetField 関数でフィールドの内容を取得します。(20~22行目)
- 「変更ログ」テーブルの作成中にタイムスタンプの誤差が出る可能性があるので、親側の修正タイムスタンプを取得しておき、記録します。(9、28行目)
- Get (変更されたフィールド) 関数は変更されたフィールド名を改行区切りで返します。
実行
各フィールドに入力して、レコードを確定すると、フィールド単位で変更のログを記録することが出来ました。
レイアウト下部に変更履歴をポータルで表示してあります。
ポータル表示のためのリレーションは、下図のとおりです。
今回、このポータル表示欄に「戻す」ボタンを配置してみました。「戻す」ボタンを押せば、変更履歴からデータ復帰することも可能です。スクリプトの中身の例は、下図をご覧ください。
[フィールドを名前で設定]スクリプトを使っています。
フィールドを名前で設定
現在のレコードの指定された計算フィールドの内容全体を計算値で置き換えます。
https://help.claris.com/ja/pro-help/content/set-field-by-name.html?cshid=26147
フィールドを指定するための計算式には、[GetFieldName]関数を使います。
GetFieldName
参照されているフィールドの完全修飾名を返します。
https://help.claris.com/ja/pro-help/content/getfieldname.html?cshid=HID_Calc_GetFieldName
ここで、[Evaluate]関数を使うのがポイントです。
GetFieldName ( Evaluate ( $フィールド名 ) )
まとめ
今回は、ログを取る方法をみてみました。いわゆる、監査証跡については、Claris のサイトに 竹内 康二様の解説動画も掲載されております。参考になさってください。
Claris FileMaker データベースでログを残そう(監査証跡)
https://community.claris.com/ja/s/article/Claris FileMaker-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%A7%E3%83%AD%E3%82%B0%E3%82%92%E6%AE%8B%E3%81%9D%E3%81%86-%E7%9B%A3%E6%9F%BB%E8%A8%BC%E8%B7%A1
次回も引き続きよろしくお願い致します。
それでは、来週もお楽しみに!
参考文献: Claris FileMaker 公式トレーニング教材 から、「Claris FileMaker 関数・スクリプトガイド」等を参考にしています
https://content.claris.com/fmb19_reg-ja