動的値一覧の設定(選択肢の絞り込み)


2021年、今年もFileMakerの基本機能についてから始めさせていただきます。
どうぞよろしくお願いいたします。


今回は「動的値一覧」の設定についてです。

「動的値一覧」とは、最初の図のように、
大分類を選ぶと、大分類で指定した値に関連した中分類の値だけが選択肢に表示される。
中分類を選ぶと、大分類と中分類で指定した値に関連した商品名だけが選択肢に表示される。
というような、「ある値を元に選択肢が絞り込まれた状態」にできる機能です。

ずいぶん昔の話になってしまいますが、
FileMakerにこの機能ができたとき、とても嬉しくて使おうとしたのですが、
なかなかすんなり設定できませんでした。

思うような値を出すために、何度か試しながら設定しなければなりませんでした。
考え方がよくわかっていなかったのです。


このブログでは2つのことを取り上げています。
1つ目は、
「動的値一覧」の設定にはリレーションが必要なのですが、
いきなり「動的値一覧」を作ろうとするのではなく、まずは
動的値一覧を設定したいレイアウトに選択肢のポータルを表示させてみると作りやすい(かも)
というお話。

2つ目は、
「動的値一覧」に必要なリレーションについて、
「動的値一覧を利用したいレイアウト」に設定する「動的値一覧用のリレーション」は、
レイアウトに指定したテーブルオカレンスからのリレーションではなくてもよい
というお話です。


1つ目のお話をする前に、基礎的なお話です。
教室を受講いただくお客様の中には、初めてFileMakerを使うという方も多くいらっしゃいます。

初めて値一覧を設定する方には、「値一覧とは」という説明から始め、
最初は「カスタム値を使用」していただきます。



カスタム値で設定できるようになったら、次は「フィールドの値を使用」してみます。



ここまでは比較的スムーズにできるのですが、動的値一覧になると少し難しくなってくるようです。

考え方、覚え方はいろいろあると思いますが、
比較的多くの方が「わかりやすかった」と言ってくださった手順で書いてみようと思います。


動的値一覧を設定したいレイアウトに選択肢のポータルを表示させてみると作りやすい(かも)
<何をしたいのか?を考えてみる>


いきなり「動的値一覧を作ってみよう」と考えるわけではないと思います。

「ここで○○を選んだら、選択肢にはAとBが、
 ここで△△を選んだら、選択肢にはCとDが表示されるようにしたい」

など、具体的な要望があると思います。

要望の文章に少し補足します。

「大分類で○○を選んだら、中分類の選択肢にはAとBが、
 大分類で△△を選んだら、中分類の選択肢にはCとDが表示されるようにしたい」

つまり、
「大分類フィールドに指定した値によって、中分類フィールドで選べる選択肢が変わるようにしたい」
ということになります。


<システム上で表示する方法を考える>


キーワードは「大分類フィールドに指定した値」です。
どこのテーブルの「大分類」フィールドに値を指定するのか考えてみましょう。

その前に、今回組み込むシステムのテーブル構成を説明します。




マスターは3つのテーブルで構成されています。
1)大分類のテーブル = 大分類フィールド
2)中分類のテーブル = 大分類と中分類フィールドの2フィールド
3)商品マスタのテーブル = 大分類と中分類と、商品名、単価の4フィールド

見積書に必要なテーブルは2テーブル。
1)見積書テーブル = 見積番号、見積日、宛名の3フィールド
2)見積明細テーブル = 見積番号、大分類、中分類、商品名、単価、数量、金額の6フィールド

このようになっています。


戻ります。
どこのテーブルの「大分類」フィールドに値を指定するのか考えてみましょう。

設定するのは以下の画面です。



見積書の「明細部分」に大分類、中分類、商品名があります。
「明細部分」として設定したポータルは、「見積明細」テーブルが元になっています。

ということは、
「見積明細」テーブルの「大分類」フィールドに指定した値によって、
「見積明細」テーブルの「中分類」フィールドで選べる値が変わるようにする。

つまり、
「見積明細」テーブルの「大分類」に指定した値に関連づいた値を「中分類」の選択肢にする
ということです。

「中分類」の値として選ぶのは、
「中分類」テーブルに作成したレコードの「中分類」フィールドの値にします。

では「見積明細」テーブルを元にしたレイアウトで動的値一覧を設定してみましょう。

設定するのは下図、「見積明細」レイアウトです。



一覧表示になっています。

この画面に配置されている
見積明細テーブルの「大分類」フィールドに指定した値を元に、
         「中分類」フィールドで選べる選択肢が変わるようにしてみましょう。


<考え方を変えてみる>


ちょっと考え方を変えてみます。
いきなり値一覧を考えるのではなく、まずは
「表示させたい値が正しく関連づけられているか」を確認するために、ポータルで表示してみましょう。
「大分類」フィールドに指定した値によって表示されるレコードが変わる「中分類」テーブルのポータル作ります。

リレーションを作成します。



「見積明細」テーブルの「大分類」フィールドと、
「中分類」テーブルの「大分類」フィールドでリレーションを組みます。
(「中分類」テーブル=画面の黄色いテーブルオカレンス「見積明細_中分類Mst」)

レイアウトに戻ります。
ボディの高さを広げてポータルを配置しましょう。



レコードごとに指定した「大分類」の値によって異なるレコードが「中分類」ポータルで表示されています。

つまり、
各レコード、ポータルで表示されるレコードが選択肢になればよい
ということになります。

ではこのポータルに指定したテーブルオカレンスを利用して値一覧を設定してみましょう。



まず左上の赤枠、「最初のフィールドの値を使用」で指定するテーブルオカレンスは、
ポータルに指定したテーブルオカレンスを指定します。
今回は「見積明細_中分類Mst」です。

青く選ばれたフィールドは「中分類」フィールドを指定しています。
これが選択肢になる値の入ったフィールドです。

最後に右下の赤枠の指定をします。
「次のテーブルから関連レコードの値のみ含める」のテーブルオカレンスは、
どこのテーブルの「大分類」フィールドに値を指定するのか
の「どこの」にあたるテーブルオカレンスです。
ここでは「見積明細」テーブルオカレンスを指定します。

できた値一覧を、
「見積明細」レイアウト上に配置した「見積明細」テーブルオカレンスの「中分類」フィールドに設定します。



設定したらブラウズモードで確認します。




値一覧の選択肢の並び順はソートされているのでポータルの並び順とは異なりますが、
選択肢として表示される内容は、ポータルで表示されているレコードの値と同じになりました。
これで動的値一覧が完成です。


動的値一覧は完成しましたが、
見積書の入力画面に配置したポータルの「中分類」フィールドに動的値一覧を設定したかったはずです。

「見積書」レイアウトのポータルの元になっているテーブルオカレンス、
「見積書_見積明細」テーブルオカレンスの「大分類」に指定した値に関連づいた値を「中分類」の選択肢にしたいのです。

今回も「中分類」の値として選ぶのは、
「中分類」テーブルに作成したレコードの「中分類」フィールドの値です。

先ほどと同じくリレーションから作成してみましょう。



ポータルに利用しているテーブルオカレンスに「中分類Mst」テーブルのオカレンスを関連づけています。
リレーションができたら、値一覧を作成します。



赤枠部分の指定は、
左上は「中分類」の選択肢になる値が入っているテーブルオカレンスを指定。
右下はどこのテーブルの「大分類」フィールドに値を指定するのかを考え、
ここでは「見積書_見積明細」テーブルオカレンスを指定します。

値一覧ができたらレイアウト上のフィールドに値一覧を設定します。




これでやりたかったことができました。
動的値一覧ができました。


<考え方のまとめ>


★動的値一覧は、リレーションを利用して作成します。

A)どのテーブルのどのフィールドの値を元にするのか

B)どのテーブルのどのフィールドの値を選択肢にするか
を決められることができれば作成できるのです。

AとBのテーブルを関連づける(リレーションする)際のキーフィールドは、
A)のキーフィールドは「どのフィールドの値を元にするのか」で決めたフィールド、
B)のキーフィールドは「Aで決めたフィールドと同じ値が入っている」フィールド
をキーにする。


★「フィールドの値を使用」した値一覧を作成します。

左上は「選択肢に使用する値が入っているテーブル(オカレンス)」を、
右下は「「選択肢を絞り込む元になる値」を入力するフィールドがあるテーブル(オカレンス)」
を指定する。


これができれば後は値一覧で入力したいフィールドに値一覧を設定すればよいのです。


レイアウトに指定したテーブルオカレンスからのリレーションではなくてもよい
<もう少し整理した作りを目指します(ややこしいかもしれません)>


少し補足します。
ややこしくなるので、ここまででいいという方は読み飛ばしてください。
時間を置いて読んでいただいてもかまいません。

まとめの章ではあえて「テーブルオカレンス」ではなく「テーブル」と書きました。

実は動的値一覧は、
テーブルが同じであれば、異なったテーブルオカレンスが元になったレイアウトでも設定可能です。

今回の見積書の例でいうと、
「見積明細」レイアウトで設定した値一覧用のテーブルオカレンスと
「見積書」レイアウトの「見積書_見積明細」ポータルに設定した値一覧用のテーブルオカレンス、
同じようなリレーションが2セットできています。




どちらも「見積明細」テーブルと「中分類Mst」テーブルの関連づけを利用しています。

こういう場合、
「見積明細」テーブルと「中分類Mst」テーブルの関連づけを利用した値一覧を1つ作り、
どちらのレイアウトでも利用することができます。

なので、実際は私は下図のようにしています。



レイアウトに利用するテーブルオカレンス(グループ)は左にありますが、
それと別に黄色い線より右のテーブルオカレンス(グループ)、
VLとついたテーブルオカレンスを利用して値一覧を作成しています。



このようになっています。
今回の例にした「中分類」の値一覧の設定は下図のようになっています。



この値一覧を2つの異なるテーブルオカレンスが元になったレイアウトで使用しています。

ちなみに、、、
値一覧は英語版のFileMakerでバリューリストとされています。
VLはValueListを略したものです。

ややこしくなりましたが以上です。


話が長くなりました…すみません<(_ _)>

うまく伝わっていないような気もしますが何かしらお役に立てばうれしいです。


お約束の一文は今年も健在、、、

ここに記載した内容についてのご質問などは受け付けておりません<(_ _)>

間違いのご指摘やもっといい説明方法のご提案などいただけるとうれしいのですが、
かなりの小心者ですので、、、
間違いのご指摘などはこっそりご連絡いただけるとうれしいです。


今年もマイペース、不定期な更新になることが予想されますが、
どうぞよろしくお願いいたします。


投稿者