【FileMaker】条件付き値一覧の表示 階層深し編

以前、条件付き値一覧の表示という記事を書いたのですが、階層が深くなった場合はどうすればいいかをお問い合わせいただいたので、続編を書くことにしました。

もう2年半以上も経ってました。
FileMakerのバージョンも上がっていますね。
あの頃は、FM13かFM14くらいでしょうか。
とりあえずFM15でも開いたので、FM15で追加してみました。
(あの時削除しなかった過去の私に感謝)

実装自体は、そんなに難しくはありません。
ただ、ベタ書きの値一覧からすると、ファイルの内容を値一覧にすること自体が敷居が高いのだと思うので、まだ条件付き値一覧の表示を読んでいない方は、まずそちらから入ってみてください。

では、階層さらに深くなった場合の実装についてです。
まずは、動きを見てみましょう。

動き

前回は、メニューに
・タイプ(メニューを提供する区分け)
・項目(メニュー内容)
と分けていましたが、さらに、メニュー内容にオプションを追加してみました。

例えば、スープの種類にコンソメスープ、コーンスープなどなどがあります。
ディナータイムには複数のスープが選べますが、ランチタイムは限られた時間で数をこなさないとならないので、コンソメスープ一品のみの提供です。
ステーキは、ソースが選べますが、ソースなしで味わいたい人向けに、ソースなしというオプションもつけています。
記事1.png

実際にメニューを選ぶときには、こんな感じで表示されて、選択できます。
記事3.png

ちょっと項目がプルダウンで見えませんでしたが、ステーキのソースを選択しているところでした。
記事2.png
あ、チーズソースを選んだと思ったら、気が変わって和風ソースにしたみたいです。

では、実際に実装をしていきましょう。

実装

メニューテーブルと注文テーブルに、「オプション」を追加しています。
こちらは、メニューテーブルの「オプション」追加です。
記事5.png

注文テーブルの「オプション」は、メニューから選択したオプションを保持するフィールドになります。
記事6.png

オプションを選択する際の値一覧のリレーションは、「メニュー」テーブルのオカレンス「メニュー 2」において、「タイプ」と「項目」を繋げます。
記事4.png
なぜ、「項目」だけのリレーションではダメかというと、スープ項目は、ランチでもディナーでも提供されますが、
・ランチどきは「ランチタイム(タイプ)」の「コンソメスープ(オプション)」が出て欲しい
・ディナーどきは、「ディナータイム(タイプ)」の「コンソメスープ(オプション)」や「コーンスープ(オプション)」など、タイプごとに表示して欲しい
からです。

値一覧は、今までと同じように、フィールドの値を使用します。
記事7.png
このとき、メニューからの注文を保持する「注文」テーブルの「タイプ」と「項目」から値一覧を表示しますので、忘れずに「次のテーブルからの関連レコードの値を含める」部分に「注文」テーブルを指定してくださいね。

もっと階層が深くなったら、テーブルオカレンスを増やして、「タイプ」「項目」「オプション」までをリレーションして値一覧を作成します。
応用ができますね。


追記です。
条件付き値一覧で選択した項目の別フィールドを取得するを、公開しました。
こちらも参考にしてください。

では、FileMakerライフをお楽しみください。