ファイルメーカーで変更履歴を残す
2015年02月25日 09:00 AM
はじめの一歩
例えば、提案に対するお客様からの回答日を入力する営業支援のシステムがあったとします。
回答日に回答がいただけないと、改めて回答日を入力する決まりになっていたのですが、部長のAさんは変更の多い、少ないがメンバーごとに知りたいと思っていました。
しかしこのシステムには回答日のデータしかなく、いつ変更したかとか、何回変更したか等のデータが残っていないので、わからないままでした。
そんな時には日付を変更する度に、「変更前の記録」を残し、確認できるようにできたら便利ですよね?
今回は、変更履歴をとる為のワンポイントテクニックをご紹介したいと思います。
変更履歴をとる為には、「フィールド設定」と「変数」の機能を利用します。
■フィールド設定
このスクリプトステップを使うと、
“○○テーブルの○○フィールドの値を、△△テーブルの△△フィールドに書き写す”
といったようなことが可能です。
ですが、変更履歴をとる場合このステップだけでは不足があります。
変更していない時は履歴を作成しないという事を考えると、
履歴を作成するタイミングは、データを書き換えた後ということになりますが、
そのタイミングだと、2015/2/14を2015/2/28に書き換えた場合、
転記される日付は2015/2/28になってしまい、変更前の値を書き写すことができません。
そこで、変数を使った工夫を施します。
■変更前の状態を変数で記録
データが書き換わるタイミングは、「フィールドが選択された後」なので、
「そのフィールドにカーソルが入ったタイミング」で変数を作成し、変更履歴を作成することが決まったタイミングで、“その変数の値を”、履歴のテーブルに書き写すようにします。
2015/2/14という値がそこに入力されていましたよ!という情報を、別の場所に保存しておくイメージです。
この時、注意が1つあります。
FileMakerの変数には、頭に$のつくローカル変数と、頭に$$のつくグローバル変数というものがあるのですが、
ローカル変数の場合、値をスクリプト終了後に保持することができないので、
グローバル変数というものを作成する必要があります。
では、それができるとどのような動きが出来るのか実際に見てみましょう。
1)これが元の状態です。
2)回答日を変更すると、カスタムダイアログが表示されます。
変更履歴を作成したいので、「変更履歴」のボタンをクリックします。
3)一覧に戻ると、灰色だったボタンがピンクになっています。これが、変更履歴がありますよという合図です。
4)ピンクのボタンを押すと、新しいウィンドウで変更履歴が表示されます。
では、実際にどのようなスクリプトを動かしているのか解説したいと思います。
■変更前回答日の取得
回答日のフィールドに、OnObjectEnterのスクリプトトリガを設定しています。
OnObjectEnterとは、そのフィールドをクリックするか、そのフィールドにタブで移動した際に指定のスクリプトを実行して下さい。という指定に使うものです。
指定しているスクリプトの内容は、たったの1文です。
回答日を変更した後に実行するスクリプトは、OnObjectSaveに割り当てます。
OnObjectSaveとは、入力が終わったタイミングで指定のスクリプトを実行して下さい。という指定に使うものです。
スクリプトの中身は次の通りです。が、少し長文なので、小分けに説明したいと思います。
■変更履歴をとるかどうか、利用者に確認する。
「変更履歴」を押した時だけ、履歴を作成するようにしたいので、Get(最終メッセージ選択)=1のステップをいれています。
カスタムダイアログの一番右が、1番のボタンです。
ここで設定している変数は、元の画面に戻る為に必要な情報です。
(このシステムが【その担当者のその月の売上予定を表示する】というものなので)
続いて、履歴作成の部分です。
新しい履歴のレコードを作成し、必要な値を入力します。
ここで、先ほどの$$変更前回答日が登場します。
値が入力されると、次のようになります。
入力が終わったら、元のレイアウトに戻ります。
このスクリプトでは、変更履歴がある場合のみ変更履歴画面の表示ができるようにしているので、
変更履歴のフラグをたてるため、フラグのフィールドに[1]を入力しています。
確実に変更履歴を作成したレコードに対してフラグをたてる為に、IDでの検索をかけています。
最後に、最初に表示していた状態に戻す為の検索をかけています。
(このシステムが【その担当者のその月の売上予定を表示する】というものなので)
ちなみに、変更履歴を表示する際は、同一のIDを持つもののみを表示するような処理をいれています。
いかがでしたでしょうか。
少し難易度は高いかもしれませんが、紹介したスクリプトを参考に、変更履歴の取得にチャレンジしてもらえたら嬉しいです。