レイアウト計算

2023年9月に公開された Claris FileMaker 20.2 で、「レイアウト計算」という新しい機能が追加されました。
レイアウト計算は、レイアウト上に計算式を配置して、その計算結果を画面に表示するための機能です。
同じような目的のためには、今までにもいくつかの方法がありました。

  • 計算フィールド
  • スクリプト + マージ変数
  • ボタンバー

計算フィールドを使う方法は、たかだか1レイアウトのためにわざわざテーブル定義を触ることになり、できれば避けたいでしょう。
スクリプトでマージ変数を設定する方法も、やりたいことに対して手間がかかり過ぎに感じます。
その意味では、ボタンバーを使う方法が、表示したい場所だけで、他に影響を与えることなく設計を完結できるので、従来は一番いい方法だと思われました。(ボタンバーの機能がなかったころは、同じような考え方でタブコントロールを使うという技も過去に紹介されていました。)

レイアウト計算は、このボタンバーを使った方法を置き換える選択肢となる、本来こう実装されるべきだったのではと思わせてくれる新機能です。
ではレイアウト計算は、レイアウトに計算結果を表示するという目的で、ボタンバーを置き換えることはできるのでしょうか?
まずは新機能の仕様から見ていきたいと思います。

レイアウト計算の作成方法

「レイアウト計算」を作成する方法は3つあります。
(以下の操作は、いずれもレイアウトモードで行います)

方法1
メニューから 挿入 > レイアウト計算… を選択
計算式の編集ウインドウが表示され、使い慣れた画面で計算式を作成できます。

保存すると、以下のようなレイアウト計算オブジェクトがレイアウトに配置されます。

方法2
テキストツールアイコンを長押しして、レイアウト計算を選択
レイアウト計算を配置したい場所をクリックすると、1と同じように計算式の編集ウインドウが開きます

方法3
テキストオブジェクト内で、<<ƒ: (計算式) >> と入力すると、この<<>>で囲まれた部分が計算式として評価されます。
(ここで、ƒは option + f で入力できます [macOSの場合])
実際、レイアウト計算で作成したオブジェクトは実質的にはテキストオブジェクトと同じで、<<>>の外に記述したテキストは、評価されずにそのままテキストとして表示されます(“”は不要です)。

なお、今まで計算式を入れられなかった場所、例えばボタンの名称にこの記述(<<ƒ: (計算式) >>)を入れても計算式として評価されるようです。ただし、フィールドの右側に(計算式の編集ウインドウを開く)鉛筆アイコンは表示されないので、小さなフィールドに式を入れる必要があります。

既存のレイアウト計算の編集方法

また、作成したレイアウト計算を編集する方法は以下の2つです。

方法1
レイアウト計算 のオブジェクトをダブルクリックして直接編集

方法2
レイアウト計算 のオブジェクトを右クリックして、コンテキストメニューから「レイアウト計算を編集…」を選択し、計算式の編集ウインドウで編集

レイアウト計算の注意点

レイアウト計算を使用するにあたっては、以下に注意が必要です。

フィールド名の変更で自動更新されない
テーブル名(厳密にはテーブルオカレンス名)やフィールド名が変更された場合に、それにともなって計算式内のそれらの名称は更新されず、ブラウズモードでは「?」と表示されます。
GetFieldName関数などを使っても、この問題を回避することはできませんでした。

これは、FileMaker 中の他の部分と挙動が違うため注意が必要です。

完全修飾フィールド名を使う
計算式の編集ウインドウで、左側のフィールドインスペクタから自テーブルのフィールドを選択した場合、テーブル名は省略されるますがこれも注意が必要です。
(デフォルトの動作のまま、テーブルを指定せず)フィールド名だけでも表示は可能ですが、フィールドの値を変更したときに、レイアウトの切替や「ウインドウ内容の再表示」スクリプトステップなどで画面の再描画をするまで、計算結果が更新されません。(20.3での仕様)

フィールドをレイアウト計算の式内で使う場合は、完全修飾フィールド名(テーブル::フィールド)で記述する方がよいです。

2つのレイアウト計算 (フィールド名のみと、完全修飾フィールド名)

フィールド名のみのレイアウト計算では、値を変更しても更新されない

もうひとつの変更点

レイアウト計算の機能が追加されたタイミングで、レイアウトに配置するテキストボックスの挙動が同時に変わりました。
従来は、テキストオブジェクトの大きさは、レイアウトモードで入力したテキストがすべて表示される大きさに自動で拡大されてしまいました。これは特に、マージフィールドやマージ変数を配置する場合に、意に反してオブジェクトサイズが大きくなってしまい、テキストオブジェクトのハンドルを手でドラッグしても元に戻ってしまうという仕様でした。これを強制的に指定したサイズに縮めるためには、位置のインスペクタでサイズを数値指定するなどが必要でした。
これが20.2からは、テキストオブジェクトの大きさが、中のテキストの長さに影響されないようになりました。自分で定義したサイズが、編集後もそのまま保たれます。これは嬉しい波及効果かもしれません。

まとめ

計算式の結果をレイアウトに表示する方法が新たに一つ増えました。
どの手法を使うかは、使い所を見極めて、最適な方法を採用するようにしましょう。計算式の中にフィールドへの参照を含む場合は、注意が必要です。
新しい「レイアウト計算」の機能については、その制約も含めて、今後どのように進化するか、注目したいと思います。

参考

FileMaker Pro ヘルプ
レイアウト計算のレイアウトへの挿入

 

【 余談 】
最近、以下のリンク先へのアクセスを増やしたいと考えており、流入量が多いほどブログの価値が向上するため、ますます投稿を加速させていきたいと思います。
リンク先を開いていただけると大変助かります。
Claris International Inc. (日本語)
ご協力いただけましたら幸いです。