Claris FileMaker Pro のスクリプトトリガは、特定のイベントが発生したときにユーザー定義のスクリプトを実行するための重要な機能です。今回は、オブジェクトに設定できるスクリプトトリガの中でも、OnObjectValidate の発火中における計算フィールドの評価について詳しく解説します。この知識は FileMaker 開発や技術支援において非常に重要です。
OnObjectValidate と他のトリガの違い
OnObjectValidate トリガは、OnObjectSave や OnObjectExit とは異なる動作をします。これらの違いを理解することで、より効果的な FileMaker カスタム Web アプリケーションの開発が可能になります。
検証環境
Claris FileMaker Pro 20.3.2.201
テーブルの構成
Aというテーブルに「内容」「計算値」「計算フィールド」「非保存計算フィールド」の4つのフィールドがあります。
フィールドの詳細
・「内容」フィールド
- タイプ:テキスト
- 通常のテキストフィールドとして使用
・「計算値」フィールド
- タイプ:テキスト
- オプション:計算値が設定されている
- 計算式:「内容」フィールドのテキストをそのまま返す
・「計算フィールド」
- タイプ:計算
- 計算式:「内容」フィールドのテキストをそのまま返す
- 索引設定:なし
・「非保存計算フィールド」
- タイプ:計算
- 計算式:「内容」フィールドのテキストをそのまま返す
- 索引設定:「計算結果を保存せず必要時に再計算する」にチェックON
この構成により、異なる設定の計算フィールドと通常のテキストフィールドの動作を比較することができます。特に、索引設定の違いによる OnObjectValidate トリガの動作の違いを観察するのに適しています。
レイアウトモードで「内容」フィールドに対して「結果取得」という名前のスクリプトを OnObjectValidate、OnObjectSave、OnObjectExit の各トリガに設定します。このスクリプトは、フィールドの値が変更され確定されたときに、3つのトリガが順番に実行され、各フィールドの値を取得して比較するものです。
「結果取得」スクリプト
「結果取得」のスクリプトの内容は、各トリガが発火したタイミングでフィールドの値を変数に格納し、カスタムダイアログで結果を表示します。
ブラウズモードで既に「内容」に ”A” という値が入っているレコードに対して、”B”という値に変更し、レコードを確定して結果を検証してみます。
検証結果
「内容」フィールドの値を “A” から “B” に変更した際の結果を比較しました。
トリガ | 内容 | 計算値 | 計算フィールド | 非保存計算フィールド |
---|---|---|---|---|
OnObjectValidate | B | A | A | B |
OnObjectSave | B | B | B | B |
OnObjectExit | B | B | B | B |
OnObjectValidate の特徴
OnObjectValidate は、Claris FileMaker のヘルプによると「アクティブなオブジェクトが検証および保存される前にスクリプトが実行される」とされています。しかし、今回の検証で興味深い結果が得られました。
- 「計算値」と「計算フィールド」では、変更前の値 “A” が取得されました。
- 「非保存計算フィールド」では、変更後の値 “B” が取得されました。
この結果から、索引設定が「計算結果を保存せず必要時に再計算する」になっているフィールドでは、OnObjectValidate の動作が他のフィールドと異なることがわかります。
まとめ
FileMaker 開発において、OnObjectValidate トリガは入力確定後に以前の値を変数として取得したい場合などに非常に有用です。しかし、索引設定によって動作が異なる点に注意が必要です。OnObjectSave と OnObjectExit の使い分けについても押さえておきましょう:
- OnObjectSave:値が変更されたときに処理を実行したい場合
- OnObjectExit:値の変更の有無に関わらず、フィールドからカーソルが抜けた時に必ず実行したい場合
Claris FileMaker Pro のスクリプトトリガ、特に OnObjectValidate の動作を理解することは、効率的な FileMaker カスタム Web アプリケーション開発に不可欠です。本記事で紹介した検証結果を参考に、プロジェクトに最適なトリガを選択し、より洗練された FileMaker ソリューションを構築してください。