レイアウトのヘッダーを「レイアウトごとに固定のタイトル」で終わらせていませんか?
FileMaker では、マージ変数を使うことで「開いているデータ」や「ユーザーの操作」に合わせて、ヘッダーの文字を動的に変えることができます。
ただ、マージ変数は少しとっつきにくく、「どこで設定するの?」「何を表示できるの?」と迷いやすいポイントでもあります。
この記事では、専門用語をできるだけ避けながら、マージ変数を使ってヘッダーを動的に切り替える基本的な考え方と手順を解説します。
マージ変数の「動的ヘッダー」とは何か
まず「マージ変数」とは、スクリプトや計算で中身を書き換えられる箱のようなものです。
「$$currentHeader」という箱に「今月の売上レポート」という文字を入れておけば、レイアウト上で <<$$currentHeader>> と書いた部分に、その文字が自動で表示されます。
この仕組みをヘッダーに使うと、例えば次のようなことが簡単にできます。
- 顧客一覧レイアウト:選択した担当者名をヘッダーに表示(例:「担当者:田中の顧客一覧」)
- 売上レポートレイアウト:表示期間をヘッダーに埋め込む(例:「売上レポート(2024年1月~3月)」)
- 検索結果画面:検索条件をヘッダーに出す(例:「検索結果:東京・法人顧客」)
ポイントは、「ヘッダーに何を書くか」をレイアウトではなくスクリプト側で自由に決められることです。
マージ変数を使う前の準備:変数の考え方
マージ変数の前に、まず「変数」そのものを簡単に整理しておきます。
- $変数:スクリプト内だけで使う一時的な箱
- $$グローバル変数:ファイル全体で共有される箱(レイアウトでも表示できる)
ヘッダーに表示したいのは「レイアウトから見える」情報なので、$$で始まるグローバル変数を使います。
例:$$HeaderTitle、$$SearchSummary など、後で見て意味がわかる名前にしておくのがおすすめです。
基本の流れ:動的ヘッダー実装の3ステップ
マージ変数でヘッダーを動かす流れは、とてもシンプルです。
- スクリプトでグローバル変数($$~)に文字を入れる
- レイアウトのヘッダーに、マージ変数として配置する
- 必要なタイミングでスクリプトを実行する(レイアウト切り替え時など)
この「箱に入れる → レイアウトで表示する → タイミングを決める」の3点を押さえておくと、応用もしやすくなります。
ステップ1:スクリプトでグローバル変数に文字を入れる
まずは、ヘッダーに表示したい文言をグローバル変数にセットします。
FileMaker のスクリプトワークスペースで、新しいスクリプトを作成し、以下のような手順を組みます。
Set Variable [ $$HeaderTitle ;
Value:
"売上レポート(" &
Year ( $$StartDate ) & "年" & Month ( $$StartDate ) & "月 ~ " &
Year ( $$EndDate ) & "年" & Month ( $$EndDate ) & "月" & ")"
]
ここでは少し計算式を使っていますが、単純に文字列を入れるだけでもOKです。
Set Variable [ $$HeaderTitle ;
Value: "顧客一覧(全件表示)"
]
慣れないうちは、まず上のような固定文字列で試してみて、きちんとヘッダーに表示されることを確認すると理解しやすいです。
ステップ2:レイアウトでマージ変数をヘッダーに配置
次に、レイアウトモードでヘッダー部分を編集します。
- 対象のレイアウトをレイアウトモードで開く
- ヘッダーパートをクリックして選択
- テキストツールを選び、ヘッダーの表示位置をドラッグしてテキスト枠を作る
- 枠の中に
<<$$HeaderTitle>>と入力する
入力する際の注意点は次の2つです。
<<と>>を必ず両方つける(付け忘れるとただの文字列になります)- 変数名(ここでは
$$HeaderTitle)はスクリプトで設定した名前と完全に同じにする
レイアウトモードでは <<$$HeaderTitle>> と表示されますが、
ブラウズモードに切り替え、スクリプトで変数をセットしてから画面を見ると、実際の文字に置き換わって表示されるようになります。
ステップ3:ヘッダーを更新するタイミングを決める
マージ変数は「中身を変えない限り、前の値が残り続ける」という性質があります。
そのため、いつ値を更新するかを決めておくことが重要です。
よく使うタイミングは次のようなものです。
- レイアウト切り替え時:レイアウトごとに違うヘッダーにする
- 検索実行後:検索条件をヘッダーに反映する
- 日付や担当者などの条件を変更した直後
例えば、レイアウト切り替え時にヘッダーを更新したい場合は、
- レイアウトに対して「レイアウトスクリプトトリガ」を設定する
- 「レイアウト切り替え後(OnLayoutEnter)」に、ヘッダー更新用スクリプトを指定する
こうしておくと、そのレイアウトに入るたびに、自動的にヘッダーの文言が更新されるようになります。
よくあるつまずきポイントと対処法
マージ変数の動的ヘッダーでよくあるトラブルと、そのチェックポイントをいくつか挙げておきます。
- 何も表示されない
- 変数名が間違っていないか(
$$HeaderTitleと$$headerTitleは別物) - グローバル変数($$)ではなく、ローカル変数($)を使っていないか
- スクリプトが実行されているか(デバッグやダイアログで確認)
- 変数名が間違っていないか(
- 前の画面のヘッダーが残る
- レイアウトごとに値を更新しているか
- 不要なときに空文字で上書きしているか(例:
Set Variable [ $$HeaderTitle ; Value: "" ])
- 想定と違う文言が表示される
- どのスクリプトがいつ変数を書き換えているかを整理する
- 一時的に
Show Custom Dialogで変数の中身を確認する
応用例:検索条件をヘッダーに表示する
少し応用として、「検索条件をヘッダーに表示する」イメージを紹介します。
- ユーザーが検索条件を入力するレイアウト(例:日付範囲や地域)を用意する
- 検索実行ボタンのスクリプトで、条件に応じてヘッダー用の文字列を作る
Set Variable [ $$HeaderTitle ; Value: 作成した文字列 ]でセット- 検索結果を表示するレイアウトのヘッダーに
<<$$HeaderTitle>>を配置
これだけで、「検索結果:2024年4月 東京エリア」のように、ユーザーの操作に合わせてヘッダーが変化する画面が作れます。
検索条件が複雑なシステムほど、ユーザーにとって親切な画面になります。
まとめ:マージ変数で「伝わるヘッダー」を作る
マージ変数を使った動的ヘッダーは、
- 今見ている画面が「何を表しているのか」を、ユーザーに明確に伝えられる
- レイアウトを量産せずに、1つのレイアウトを柔軟に使い回せる
- 検索条件や期間などの「文脈」を常に表示できる
といったメリットがあります。
まずはシンプルなケースから、
$$HeaderTitleに固定の文字列をセット- レイアウトのヘッダーに
<<$$HeaderTitle>>を配置 - レイアウト表示時にスクリプトトリガで更新
という流れを試してみてください。
慣れてきたら、検索条件や日付範囲、ログインユーザー名なども組み合わせて、より「伝わるヘッダー」に育てていくことができます。