この記事はFileMaker Advent Calender の18日目の記事です。
値一覧をマスタ化?
ユーザからデータを入力してもらうときに値一覧を使用する機会は多いと思います。
性別や血液型など、今後追加や変更する可能性がないデータであれば値一覧の「カスタム値」を使用すればいいと思いますが、今後選択肢が増える可能性があるデータというのも開発初期には存在するのではないでしょうか。
今回はこの値一覧を管理するためのマスタテーブルを作成してみたいと思います。
サンプルファイル
サンプルファイルは下記リンクからダウンロードできます。
用意するテーブル
値一覧のマスタデータを入れておくテーブルを作ります。
フィールド構成
フィールド名 | 用途 |
---|---|
__id | 主キー |
valueListName | 値一覧をリレーションする際に使用 |
valueListName_display | 管理する際の表示名に使用 |
sortNo | 値一覧の表示順序を指定 |
value | 実際の値 |
xc_sortValue | ソート順を反映させた値 |
sortValueフィールドの設定
sortValueのフィールドでは値の先頭に表示はされないBOM(ZERO WIDTH NO-BREAK SPACE)と呼ばれる文字を追加することによって、ポップアップやドロップダウンリストに表示されるデータのソートを実現しています。
BOMを使用するので「索引オプション」のデフォルト言語を「Unicode」に設定してください。
カスタム関数「valueWithBOM」
使用しているカスタム関数「valueWithBOM」の内容は以下の通りです。
While関数を使用し、sortNoの文字数分BOMを先頭にくっつける処理をしています。
While(
//––– 初期変数
[
~i = 0;
~prefix = "";
~BOM = Char(65279)
];
//––– 条件
~i < _sortNo;
//––– ロジック
[
~i = ~i + 1;
~prefix = ~prefix & ~BOM
];
//––– 結果
~prefix & _value
)
データ
サンプルデータは画像のような感じで用意しました。
リレーション
まず、参照元のテーブルに計算フィールドでvalueListNameに対応する文字列を返すだけのフィールドを作成します。
このフィールドと値一覧マスタのvalueListNameのフィールドでリレーションを作成します。
作成した値一覧のマスタを使用する際には、マスタのテーブルとリレーションを作成する必要があります。
このリレーションにより参照元のテーブルから値一覧を取得することができます。
もし同じテーブルで複数の値一覧を使用する場合は必要な個数分リレーションを作成する必要があります。
値一覧の作成
先程のリレーションを元に値一覧を作成します。
ここでもソート順を反映させるために「次の条件で値をソートしなおす」にチェックを入れ「Unicode」を指定します。
完成
あとはレイアウト上のフィールドに値一覧を割り当てします。
この例で実際にフィールドに入る値は「__id」の値になります。「値一覧でデータ書式を上書き」にチェックを入れることで値一覧の設定で選択した2番目のフィールドの内容が表示されます。
ブラウズモードに切り替えてポップアップメニューをクリックすると、このように値一覧マスタのデータが反映されていることが確認できます。
まとめ
今回紹介した値一覧をマスタ化することにより、値一覧の内容を変更すると入力済みのデータにも反映されたり、値一覧を1箇所で集中的に管理することができるメリットがありますが、複数の値一覧を使用する場合はその分マスタのTOを増やす必要があるので好みが分かれるかと思います。
いちいち「ファイル」→「管理」→「値一覧…」と辿っていかなくても、専用のレイアウトを作成することで値一覧のメンテナンスをすることが出来るため、普段FileMakerの開発をしていない担当者でも、簡単に値一覧の項目をメンテナンスしてもらえるので重宝しています。
参考にしていただけると幸いです。