以前、条件付き値一覧の表示という記事を書いたのですが、階層が深くなった場合はどうすればいいかをお問い合わせいただいたので、続編を書くことにしました。
もう2年半以上も経ってました。
FileMakerのバージョンも上がっていますね。
あの頃は、FM13かFM14くらいでしょうか。
とりあえずFM15でも開いたので、FM15で追加してみました。
(あの時削除しなかった過去の私に感謝)
実装自体は、そんなに難しくはありません。
ただ、ベタ書きの値一覧からすると、ファイルの内容を値一覧にすること自体が敷居が高いのだと思うので、まだ条件付き値一覧の表示を読んでいない方は、まずそちらから入ってみてください。
では、階層さらに深くなった場合の実装についてです。
まずは、動きを見てみましょう。
動き
前回は、メニューに
・タイプ(メニューを提供する区分け)
・項目(メニュー内容)
と分けていましたが、さらに、メニュー内容にオプションを追加してみました。
例えば、スープの種類にコンソメスープ、コーンスープなどなどがあります。
ディナータイムには複数のスープが選べますが、ランチタイムは限られた時間で数をこなさないとならないので、コンソメスープ一品のみの提供です。
ステーキは、ソースが選べますが、ソースなしで味わいたい人向けに、ソースなしというオプションもつけています。
実際にメニューを選ぶときには、こんな感じで表示されて、選択できます。
ちょっと項目がプルダウンで見えませんでしたが、ステーキのソースを選択しているところでした。
あ、チーズソースを選んだと思ったら、気が変わって和風ソースにしたみたいです。
では、実際に実装をしていきましょう。
実装
メニューテーブルと注文テーブルに、「オプション」を追加しています。
こちらは、メニューテーブルの「オプション」追加です。
注文テーブルの「オプション」は、メニューから選択したオプションを保持するフィールドになります。
オプションを選択する際の値一覧のリレーションは、「メニュー」テーブルのオカレンス「メニュー 2」において、「タイプ」と「項目」を繋げます。
なぜ、「項目」だけのリレーションではダメかというと、スープ項目は、ランチでもディナーでも提供されますが、
・ランチどきは「ランチタイム(タイプ)」の「コンソメスープ(オプション)」が出て欲しい
・ディナーどきは、「ディナータイム(タイプ)」の「コンソメスープ(オプション)」や「コーンスープ(オプション)」など、タイプごとに表示して欲しい
からです。
値一覧は、今までと同じように、フィールドの値を使用します。
このとき、メニューからの注文を保持する「注文」テーブルの「タイプ」と「項目」から値一覧を表示しますので、忘れずに「次のテーブルからの関連レコードの値を含める」部分に「注文」テーブルを指定してくださいね。
もっと階層が深くなったら、テーブルオカレンスを増やして、「タイプ」「項目」「オプション」までをリレーションして値一覧を作成します。
応用ができますね。
追記です。
条件付き値一覧で選択した項目の別フィールドを取得するを、公開しました。
こちらも参考にしてください。
では、FileMakerライフをお楽しみください。