FileMakerで「親子ドロップダウン」(都道府県を選ぶと市区町村だけが出てくる…といった連動したプルダウン)を作りたいと思っても、どこから手を付ければいいのか迷いやすいポイントです。
本稿では、FileMakerの「関連値一覧」を使って、基本的な親子ドロップダウンを実装する手順を、できるだけ専門用語をかみくだいて解説します。
親子ドロップダウンとは何か
「親子ドロップダウン」とは、1つ目に選んだ値(親)によって、2つ目に選べる値(子)の候補が変わる仕組みのことです。
- 例:親=「商品カテゴリ」 / 子=「商品名」
- 例:親=「都道府県」 / 子=「市区町村」
これをFileMakerで実現する代表的な方法が「関連値一覧」です。
親の選択によって、子側に関連するレコードだけを一覧として表示できるため、選び間違いが減り、入力もスムーズになります。
全体の構成イメージ
ここでは、以下のようなシンプルな例で考えます。
- 親テーブル:カテゴリ(例:文房具、家電、食品)
- 子テーブル:商品(例:ボールペン、ノート、電子レンジ、など)
- 入力テーブル:受注(カテゴリと商品を選ぶ画面)
「受注」レイアウト上で、まずカテゴリを選び、その内容に応じて商品リストが絞り込まれて表示される、という流れです。
テーブルとフィールドの準備
最初に、テーブルとフィールドを整理します。すでにある場合は、構成を確認するだけでも構いません。
1. カテゴリテーブル
カテゴリテーブルカテゴリID(主キー・自動採番)カテゴリ名(例:文房具、家電…)
2. 商品テーブル
商品テーブル商品ID(主キー・自動採番)商品名カテゴリID(カテゴリテーブルとつなぐための外部キー)
3. 受注テーブル
受注テーブル受注IDカテゴリID(親ドロップダウンで選ばれる)商品ID(子ドロップダウンで選ばれる)
リレーション(テーブル同士のつながり)を作る
次に、テーブル同士の関係を設定します。「ファイル」メニューから「管理 > データベース…」を開き、「リレーションシップ」タブで設定します。
- カテゴリと商品をつなぐ
カテゴリ::カテゴリID=商品::カテゴリIDでリレーションを作成します。 - 受注とカテゴリをつなぐ
受注::カテゴリID=カテゴリ::カテゴリIDを作成します。 - 受注と商品をつなぐ
受注::商品ID=商品::商品IDを作成します。
ポイントは、「受注::カテゴリID」を使って、カテゴリテーブルや商品テーブルに関連づけられる状態を作っておくことです。
関連値一覧の作成(親・子それぞれ)
準備ができたら、実際にドロップダウンに使う「値一覧」を作ります。
1. 親ドロップダウン用の値一覧(カテゴリ一覧)
- 「ファイル > 管理 > 値一覧…」を開きます。
- 「新規」をクリックし、名前を「カテゴリ一覧」など分かりやすい名前にします。
- 「値元」を「値はフィールドから取得」に設定します。
- フィールドとして
カテゴリ::カテゴリ名を選択します(IDと名前の両方を使う構成にする方法もありますが、基本例として名前のみで進めます)。 - 必要に応じて「重複する値は含めない」にチェックを入れます。
2. 子ドロップダウン用の関連値一覧(商品一覧)
ここが親子ドロップダウンの肝になる部分です。
- 再度「ファイル > 管理 > 値一覧…」を開き、「新規」をクリックします。
- 名前を「商品_関連値一覧」などにします。
- 「値はフィールドから取得」を選び、フィールドに
商品::商品名を指定します。 - その下にある「値一覧の使用元」を「関連レコードのみ」に変更します。
- 関連元テーブルには 受注 を指定します。
この「関連レコードのみ」が重要なポイントです。
これにより、「受注」レコードから見て関連している「商品」レコードだけが、値一覧として表示されるようになります。
そして、この関連は先ほど設定した「受注::カテゴリID」経由で絞り込まれます。つまり、受注レコードでどのカテゴリを選んだかによって、商品一覧が変わってくれる、というわけです。
レイアウトへの配置と設定
最後に、実際のレイアウト上でドロップダウンを動かせるようにします。
- 受注レイアウトを開く
レイアウトモードに切り替え、「受注」テーブルベースのレイアウトを開きます。 - カテゴリ用フィールドの配置
受注::カテゴリIDもしくはカテゴリ名に相当するフィールドをレイアウトに配置します。- そのフィールドを選択し、「インスペクタ」でコントロールスタイルを「ドロップダウンリスト」または「ポップアップメニュー」に設定します。
- 値一覧に、先ほど作った「カテゴリ一覧」を指定します。
- 商品用フィールドの配置
受注::商品IDもしくは商品名に相当するフィールドをレイアウトに配置します。- 同じくコントロールスタイルを「ドロップダウンリスト」や「ポップアップメニュー」に設定します。
- 値一覧には「商品_関連値一覧」を指定します。
ここまでできたら、ブラウズモードに戻って動作を確認します。
カテゴリを選ぶと、そのカテゴリに属する商品だけが商品ドロップダウンに表示されれば成功です。
動作がおかしいときのチェックポイント
うまく絞り込まれない場合は、次のポイントを確認してみてください。
- カテゴリIDがちゃんと入っているか
受注レコードでカテゴリを選んだとき、受注::カテゴリIDに正しい値が入っているかをデータビューアなどで確認します。 - リレーションの条件が正しいか
「カテゴリID 同士」や「商品ID 同士」で正しくつながっているか、リレーションシップグラフを見直します。 - 値一覧の「関連レコードのみ」が受注ベースか
間違って別テーブルを元にしていないかチェックします。
応用へのヒント
基本の親子ドロップダウンができると、次のような応用も見えてきます。
- 親子孫の3段階(例:エリア > 都道府県 > 市区町村)
- 表示は名前、内部的にはIDを保存する構成
- スクリプトと組み合わせて、自動入力やエラーチェックを行う
まずは今回の「関連値一覧による親子ドロップダウン」の基本形を押さえておくと、こうした応用も理解しやすくなります。