FileMakerでスクリプトを書いていると、「関連レコードへ移動」ステップで思ったレイアウトやデータに移動できず、迷子になってしまうことがあります。原因の多くは「文脈(コンテキスト)」の理解不足です。この記事では、できるだけ専門用語をかみ砕きながら、「関連レコードへ移動」を思い通りに動かすための文脈設定のコツを解説します。
「関連レコードへ移動」で起こりがちなトラブル
まず、よくあるつまずきポイントを整理しておきましょう。
- 別テーブルのレイアウトに移動したつもりが、関係ないレコードが表示される
- 期待した件数より多い(または少ない)レコードが表示される
- ポータルから移動したときと、通常レイアウトから移動したときで結果が変わる
- スクリプトを別のレイアウトで使ったら、結果がおかしくなった
これらは「どのテーブルオカレンスを起点に関連レコードをたどるか」という文脈がずれていることが主な原因です。
FileMakerにおける「文脈」とは?
FileMakerでは、同じテーブルでも「テーブルオカレンス」という別名付きの入り口が複数存在します。リレーションシップグラフに表示される四角い箱がそれです。
そして、レイアウトは必ずどれかひとつのテーブルオカレンスにひも付きます。スクリプトが実行されるとき、「今どのレイアウトにいるか」で、「起点となるテーブルオカレンス=文脈」が決まります。
ポイントは次の1つです。
- 文脈=現在のレイアウトが基準になるテーブルオカレンス
「関連レコードへ移動」は、この文脈をスタート地点として、リレーションをたどっていきます。ですので、レイアウトやポータルの違いによって結果が変わるのは、スタート地点が変わっているから、というわけです。
「関連レコードへ移動」ステップの基本設定
スクリプトステップ「関連レコードへ移動」には、いくつか重要なオプションがあります。代表的なものを押さえておきましょう。
- 関連テーブル:どのリレーション(テーブルオカレンス)をたどるか
- 新規ウインドウで表示:元画面を残したまま別ウインドウに結果を表示するか
- 現在のレイアウトを使用 / レイアウトを指定:どのレイアウトで結果を表示するか
- 対象レコードのみ表示する:関連したレコードだけを抽出した状態で表示するか
ここで特に大事なのは、「関連テーブル」と「レイアウトを指定」の組み合わせです。関連テーブルとして指定したテーブルオカレンスと、移動先レイアウトの元となっているテーブルオカレンスが一致するように意識しましょう。
文脈をコントロールする基本パターン
文脈を安定させるための、よく使うパターンを紹介します。
1. 必ず特定のレイアウトから実行する
スクリプトの最初で、必ず想定しているレイアウトに移動しておく方法です。
- スクリプト冒頭で「レイアウト切り替え」で基準レイアウトに移動
- その後に「関連レコードへ移動」を実行
この方法なら、「どの画面からスクリプトを呼び出しても、いったん基準レイアウトに戻ってから関連レコードをたどる」形になるため、文脈のブレを抑えられます。
2. ポータル行を文脈の起点にする
ポータル上のボタンから「関連レコードへ移動」を行う場合は、「現在のポータル行」が文脈の一部になります。
- ポータルの元となっているテーブルオカレンスを、「関連テーブル」で指定する
- ポータル行のボタンからスクリプトを呼び出すことで、「今クリックした行」を基準にできる
このとき、移動先レイアウトのテーブルオカレンスが、ポータルのテーブルオカレンスと合っているか確認してください。
「レイアウトを指定」の考え方
「関連レコードへ移動」では、「現在のレイアウトを使用」か「レイアウトを指定」かを選べます。
現在のレイアウトを使用はシンプルですが、「今どのレイアウトにいるか」に結果が依存するため、スクリプトを使い回すときに不安定になりがちです。
一方、レイアウトを指定しておけば、「常にこのレイアウト(=この文脈)で表示する」という動きになるため、動作を読みやすくできます。ただし、そのレイアウトの元テーブルオカレンスが、指定した関連テーブルと一致していなければいけません。
迷ったときは、
- 「レイアウトを指定」を使って、スクリプト内で移動先レイアウトを固定する
- そのレイアウトのテーブルオカレンスが、関連テーブルと同じか必ず確認する
というルールにしておくと、トラブルが減ります。
デバッグ時に確認すべきチェックポイント
もし思ったとおりの関連レコードに移動できない場合は、次の順番で確認してみてください。
- スクリプト実行時点で、どのレイアウトにいるか(レイアウト名と元テーブルオカレンス)
- 「関連レコードへ移動」で指定している「関連テーブル」はどれか
- 移動先として指定しているレイアウトの元テーブルオカレンスは何か
- リレーションシップグラフで、起点から関連テーブルまでのつながりが正しいか
この4つを順にたどるだけで、ほとんどの問題は原因が見えてきます。
まとめ:文脈を意識したスクリプト設計を
「関連レコードへ移動」で迷子にならないためには、次の3点を押さえることが大切です。
- 文脈=「現在のレイアウトが基準にしているテーブルオカレンス」と理解する
- スクリプト内でレイアウトを明示的に指定し、起点と移動先のテーブルオカレンスを揃える
- ポータルや別レイアウトから呼び出すときも、「今どの文脈から実行されているか」を意識する
文脈の考え方に慣れてくると、関連レコードの移動だけでなく、集計や条件分岐など、FileMaker全体の設計がぐっと理解しやすくなります。まずは小さなスクリプトから、レイアウトとテーブルオカレンスの関係を意識して組み立ててみてください。