2015年2月25日水曜日

FileMakerでデータの入力ログを記録してみるPart2~決まったフィールドだけ監視~

データの入力ログ(履歴)を記録してみる

FileMakerでデータの入力ログを記録してみるでは、テーブルの全フィールドに対して変更がされた場合のログを記録しましたが、この方法では、スクリプトなどで書き込まれた値は反映されません。

しかし、テーブルに内に20や30のフィールドがあってもログとしての変更履歴を残したいのはそれほど多くない場合もあるかもしれません。そんな場合の方法の一つです。

この場合は、スクリプトや全置換によって変更されたデータ内容も記録されます。

基本的には方法はFileMakerでデータの入力ログを記録してみると変わりありません。

方法

履歴を記録したいフィールド1つに対して、1つ記録用のフィールドを用意します。

記録用のフィールドに対して下記の計算式を設定します。
※logA はfieldAの履歴保存用のフィールドです。

logA & Get ( タイムスタンプ ) & " | "  & fieldA  & "¶"


無駄な改行が気になる場合

上記の方法では最初に改行が必ず入ります。入らないようにしたい場合はこのようにすると入らずにできます。

Let([
$count = Case (ValueCount(logA)=0 ; 1 ; 0)];
Replace ( logA & "¶" & Get ( タイムスタンプ ) & " | "  & fieldA    ; 1 ; $count ; "" )
)

ちなみに、履歴は末尾に足されていきます。

最新の履歴を上にする場合

最新の履歴を履歴の上に(降順)にする場合は下記のようにします。

Get ( タイムスタンプ ) & " | "  & fieldA  & "¶" &  logA

また、この場合終わりの改行が入りますので、気になる場合は消す必要があります。

下記のようにすればきれいになります。

Let([
 $log = Get ( タイムスタンプ ) & " | "  & fieldA  & "¶" &  logA コピー ;
 $length = Length($log);
 $m = Case ( ValueCount($log) = 1 ; 1 ; 0)
];
 Left ( $log ; $length - $m)
)