ルックアップについて
ルックアップとは、特定のフィールドにリレーションシップで得られた値を自動的に埋め込む仕組みです。FileMakerでも機能の1つとして利用できるものです。データベースの世界では、リレーショナルデータベースの考え方が優位であり、マスターテーブルとリンクして値を参照することが中心的です。しかしながら、アプリケーションを作る上では、マスター参照のように常にマスターに定義した値が得られるということがニーズであるだけでなく、その時点のマスターの値を複製しておくというニーズもあります。帳票作成では現実な方法として値を複製しておくことはよく行われます。リレーショナルデータベース的にはそれによって正規化が崩れるという主張もあるかもしれませんが、理論的な綺麗さよりも、ニーズをよりシンプルに満たす方法として、複製はよく利用されています。
ルックアップの設定
ルックアップの動作と設定をまとめた図を以下に示します。ここでは会計アプリケーションにおいて、仕分けパターンを選択すると、それに応じて借方科目と貸方科目がルックアップとして記録されるという状況を考えます。パターンと2つの科目の合計3つの項目に関して、同一のテーブルにフィールドが用意されています。いずれもマスターを持つもので、主キー値をINTEGERで保存しています。このアプリケーションはこちらのレポジトリで公開されているので、実際に手元でご利用いただけます。
「貸方科目」の設定を見てください。まず、data-imは「account_detail」コンテキストの「credit_id」フィールドが設定されています。このポップアップメニューの値はcredit_idフィールドとバインドされていて、フィールドの値とポップアップの選択結果が連動します。もちろん、optionには科目マスターの項目が並んでいます。ここまでは、普通のINTER-Mediatorの開発手法と変わりません。
これに加えて、data-im-control属性をポップアップメニューに設定しています。この属性値として、「lookup:A:B」の形式で設定を行います。これにより「Aの値が変更されれれば、Bの設定に応じて値を取り出し、data-im属性に従って値を記録する」ということを行います。
ここでAは「account_detail@assort_pattern_id」となっています。このターゲット指定は、「仕分けパターン」のポップアップメニューのdata-im属性と同一です。つまり、まず、「仕分けパターンのポップアップが変更されれば、」という定義が加わっていることになります。
Bについては、取り出し先を指定しますが、一般にはマスター参照などを行うコンテキスト定義(ここでは「assort_pattern_lookup」)をあらかじめ定義しておきます。ポップアップメニューにより、assort_pattern_idに値が設定されて、その値を利用して、assort_pattern_lookupに検索をかけます。検索条件は、assort_pattern_idの値と、assort_pattern_lookupコンテキストのrelationキーに指定したフィールド名を利用して自動的に作成されます。なお、特に理由がないのであれば、ルックアップで利用するコンテキストはqueryキーなどの検索条件はかからないようにしておくのが良いでしょう。また、recordsは自動的に1に設定されるので、コンテキストで指定する必要はありません。そして、コンテキストから検索されると、Bの@以降に記載したフィールドの値が取り出されて、ポップアップメニューのdata-im属性に指定したフィールドに保存します。要素の値が設定されるだけでなく、データベースへの更新も行われます。
なお、ルックアップの機能はポップアップにだけ機能するのではなく、テキストフィールドなどのUI要素で稼働します。