【Claris FileMaker 2023】 ~編集ログで使用する「Get ( 変更されたフィールド )」関数の動作変更について~
2023年05月23日 03:48 PM
Claris FileMaker 2023
Claris FileMaker Pro 2023 がリリースされました。
2021年にバージョン19がリリースされてからのメジャーアップデートとなります。
また、バージョンの呼称が、西暦を使用するようになりました。
では、今回のブログは、このリリースに含まれる「Get ( 変更されたフィールド )」関数の動作変更について見ていきたいと思います。
この動作変更は、とても重要なものと考えています。
なぜなら、新機能の「OnWindowTransaction」トリガと連携するフィールドの計算式内で使用できるからです。
リリースノート:FileMaker Pro 2023 新機能および機能強化
■□ ユーザのレコード操作 □■
まず、レコードの操作について確認しましょう。
ユーザのレコードの操作は、フィールドの値を変更するだけではありません。
少しピックアップしてみましょう。
- レコードの新規作成
- レコードの編集(値の手修正)
- インポート(レコードの新規作成)
- インポート(レコードの更新・置換)
- フィールド内容の全置換
- フィールド内容の再ルックアップ
- ドラッグ・アンド・ドロップ
少し考えただけでもこれだけあります。
しかし、バージョン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」トリガという新機能が追加されたことにより、編集ログを取得する計算式で、必要な変更がされたのだと思われます。
今回の動作変更により、
インポートやフィールド内容の全置換、再ルックアップという、
複数レコードを一度に新規作成する処理や、対象レコードに一気に値を設定したりする処理で、変更されたフィールドが取得できるようになりました。
これらの処理で編集ログの取得が可能になる今回の動作変更は、とても重要な動作変更ですので、内容をしっかり踏まえておきたいと思います。