【Claris FileMaker 2023】 ~編集ログで使用する「Get ( 変更されたフィールド )」関数の動作変更について~

2023年05月23日 03:48 PM

Claris FileMaker 2023


Claris FileMaker Pro 2023 がリリースされました。

2021年にバージョン19がリリースされてからのメジャーアップデートとなります。
また、バージョンの呼称が、西暦を使用するようになりました。

では、今回のブログは、このリリースに含まれる「Get ( 変更されたフィールド )」関数の動作変更について見ていきたいと思います。

この動作変更は、とても重要なものと考えています。

なぜなら、新機能の「OnWindowTransaction」トリガと連携するフィールドの計算式内で使用できるからです。

リリースノート:FileMaker Pro 2023 新機能および機能強化

■□ ユーザのレコード操作 □■

まず、レコードの操作について確認しましょう。

ユーザのレコードの操作は、フィールドの値を変更するだけではありません。

少しピックアップしてみましょう。

  1. レコードの新規作成
  2. レコードの編集(値の手修正)
  3. インポート(レコードの新規作成)
  4. インポート(レコードの更新・置換)
  5. フィールド内容の全置換
  6. フィールド内容の再ルックアップ
  7. ドラッグ・アンド・ドロップ

少し考えただけでもこれだけあります。

しかし、バージョン19までの「Get ( 変更されたフィールド )」関数は、No.2のレコードの編集時しか、値を返しませんでした。

これは編集ログを取得するために使用するときに、ユーザのすべての操作を取得することはできないことを意味します。

今回動作変更がありましたが、どのような変更がされたのかを見ていきましょう。

■□ 準備 □■

「Sample.fmp12」ファイルのテーブルに、「ModifiedFields」テキストフィールドを追加します。

このフィールドの自動入力オプションの計算値に、下記計算を設定します。


      Evaluate ( Quote ( Get ( 変更されたフィールド ) ); [修正情報タイムスタンプ] )

そして、「フィールドに既存の値が存在する場合は置き換えない」のチェックを外しておきます。

この計算式に使われている「修正情報タイムスタンプ」フィールドは、レコードが変更されたときにタイムスタンプを更新するフィールドです。

つまりこの計算式は、レコードが変更されたときに「Get ( 変更されたフィールド )」関数を評価する、という意味となります。

■□ 新規レコード作成 □■

では、「新規レコード」操作から確認してみましょう。

実行してみると次のキャプチャのように、「ModifiedFields」テキストフィールドに値が設定されました。

フィールド定義の自動入力オプションにより、レコード作成時に値が設定されたフィールドの一覧が取得できました。

今まで、新規レコード時に「Get ( 変更されたフィールド )」関数でフィールド名の一覧を取得できませんでしたが、

取得できるようになったことが確認できました。

■□ インポート(新規レコード) □■

インポートも試してみましょう。

「M得意先」テーブルに追加インポートを実行してみます。

インポートの自動入力オプションは、「ModifiedFields」テキストフィールドのみチェックし、変更されたフィールドの一覧が取得できるかどうかを確認しました。

5レコードインポートしました。

インポートしたフィールドの一覧が取得できました。

■□ インポート(新規レコード・更新) □■

では、もう一度インポートを試します。
今度は、「主キー」フィールドを、照合フィールドにして、

一致するレコードは更新、一致しないレコードは新規レコードとして追加するようにして、インポートを試したいと思います。
(テストのため「ModifiedFields」テキストフィールドは、空欄にしておきます。)

では、インポートしてみます。

5レコードは更新されて、5レコードは新規レコードとして追加されるはずです。

想定通り10レコードとなりました。
「OnWindowTransaction」トリガで、取得したJSONを見てみます。

そうすると、”Modified” = 5レコード、”New” = 5レコードとなっているので、想定した結果が返ってきています。

次は、特定のフィールドだけ更新するインポートも実行してみたいと思います。
「取引先CD」フィールドを照合フィールドにして、「会社名」フィールドだけインポートしてみます。

そうすると、照合フィールドに設定した「取引先CD」と、更新した「会社名」フィールドが、変更されたフィールドとして取得されました。

フィールドマッピングしたフィールドのみ取得されるのでしょうか?
確認してみましょう。

今度は、「修正情報タイムスタンプ」も自動入力されるようにチェックを入れました。

実行すると、「修正情報タイムスタンプ」も変更されたフィールドとして取得されました。

インポート時に「Get ( 変更されたフィールド )」関数で取得できるフィールドは、

フィールドマッピングで対象としたフィールドと、自動入力で更新されるフィールドが取得できることが確認できました。

■□ フィールド内容の全置換 □■

「フィールド内容の全置換」を試したいと思います。

「T見積」のテーブルで、「得意先CD」フィールドを「フィールド内容の全置換」で対象レコードに値を一気に設定します。

「得意先名」は、「得意先CD」をもとにマスタから得意先名をルックアップさせるフィールドになっていますので、こちらにも値が設定されるはずです。

では処理を実行してみます。

「得意先CD」フィールドを「フィールド内容の全置換」で対象レコードに値を一気に設定しました。

「ModifiedFields」テキストフィールドは、全置換した「得意先CD」だけではなく、それにともない設定された「修正情報タイムスタンプ」「修正者」「得意先名」も取得されています。

■□ フィールド内容の再ルックアップ □■

それでは、「フィールド内容の再ルックアップ」も試しましょう。

「得意先名」は、「得意先CD」をもとにマスタから得意先名をルックアップさせるフィールドになっています。

すでに「得意先CD」には値が設定されているので再ルックアップにより「得意先名」に値を設定したいと思います。

「得意先CD」にカーソルを入れて、フィールド内容の再ルックアップを実行します。

実行すると、得意先名に値がルックアップされて、これにともない更新されたフィールドも変更されたフィールドの一覧に取得されました。

つまり「修正情報タイムスタンプ」「修正者」「得意先名」が、取得されています。

■□ ドラッグ・アンド・ドロップ □■

最後に「ドラッグ・アンド・ドロップ」についても確認してみたいと思います。

今まで「ドラッグ・アンド・ドロップ」という処理では、変更されたフィールド名が取得できなかったため、編集ログには含めることができませんでした。

では、今回はどうなのでしょうか?
確かめてみたいと思います。

「会社ロゴ」というオブジェクトフィールドを用意しました。

このフィールドに画像をドラッグ・アンド・ドロップして、登録してみます。

「修正情報タイムスタンプ」「修正者」「会社ロゴ」が、フィールド名として取得されています。

■□ まとめ □■

いかがでしたでしょうか?

「Get ( 変更されたフィールド )」関数に、今回大きな変更が加わっています。

おそらく「OnWindowTransaction」トリガという新機能が追加されたことにより、編集ログを取得する計算式で、必要な変更がされたのだと思われます。

今回の動作変更により、

インポートフィールド内容の全置換再ルックアップという、

複数レコードを一度に新規作成する処理や、対象レコードに一気に値を設定したりする処理で、変更されたフィールドが取得できるようになりました。

これらの処理で編集ログの取得が可能になる今回の動作変更は、とても重要な動作変更ですので、内容をしっかり踏まえておきたいと思います。