こんにちは!
今日は検索条件によってポータルの表示を変える方法について紹介していきます。
FileMaker Proには、ポータルという便利な機能があります。ポータルは、リレーションシップ先の(関連テーブル)のデータを表示できる機能で、一般的には、一対多のリレーションシップにおいて、「多」のレコードを表示するために使用します。
基本的なポータルの使い方

ポータルがよく使われるのは、この画面のように明細を表示する部分です。この画面では、経費精算の経費の部分です。

また、このように見積書、請求書、納品書といった帳票類、帳簿類などにもよく使われます。
こういった使い方をする場合は、多くの場合、ポータルの内容を動的に帰るといったことはあまり必要ありません。
ポータルのフィルタ
時には、ユーザーが入力した条件によってポータルに表示する内容を変えたい場合もあります。そんな場合に便利に使えるのが、フィルタです。
フィルタはポータルに設定しておくことで、表示する内容を変えることができます。
前提条件として、リレーションシップにはまず依存しますので、関連しないレコードを表示することはできません。
関連するレコードの中からさらにフィルタによって絞り込むというイメージなります。

まず、このようなポータルがあるとします。

このポータルに表示する内容は、このような感じです。

「text」フィールドが、検索条件を入力するためのフィールドです。

レイアウト編集画面にて、ポータルをダブルクリックしてさらに「ポータルレコードのフィルタ」にチェックを入れます。さらに、フィルタに計算式を設定するウインドウが開きますので、下記のように設定します。
Filter ( 詳細::商品名 ; test2024::text ) = test2024::text
この計算結果が「真(1)」がにあるレコードだけが表示されるようになります。
Filter関数は、第1引数のテキストに、第2引数のテキストが含まれているかをチェックします。
Filter ( "レモン" ; "レモン" )
このように設定すると、関数は「レモン」を返します。ですから、関数だけではなく「= test2024::text」が必要になります。

先ほどのポータルに検索条件「レモン」を入力するとポータルがこのようにフィルタされて、レモンだけが表示されます。
Filter関数の弱点
Filter ( "すもももももももものうち" ; "すもも" )
このような計算式があったとすると結果は「すもももももももも」が帰ってきます。これだと、先ほどポータルに設定した式では機能しません。
Position ( 詳細::商品名 ; test2024::text ; 1 ; 1 )
そんな時にはPosition(テキスト;検索テキスト;先頭文字位置;回数)関数をこのように設定してみましょう。これでも作動します。
Position関数は、第1引数のテキストの中に第2引数のテキストがどの位置にあるかを返してくれます。
Position ( 詳細::商品名 ; test2024::text ; 1 ; 1 ) ≥ 1
完全一致の場合、比較的短いテキストの場合は先ほどように設定しても作動しますが、商品名の一部に合致した時に表示したい場合などは、このように設定します。
計算式は合っているのにうまく表示されない場合
ポータルは場合によって、条件を入力しても更新されずに表示が変わらない場合もあります。そんな時には、スクリプトで解決しましょう。

このようなスクリプトを作ります。
ウインドウ内容の再表示スクリプトステップを配置したスクリプトを作成します。

さらに、このスクリプトを検索条件を入力するためのフィールドに設定します。OnObjectExitかOnObjectSaveに設定しておくと作動するはずです。
ノーコードツールにはできないFileMakerポータルの万能性
このように、ポータルにはフィルタを設定し、計算式を設定することで、いかようにも表示内容を変更することができます。これは、ノーコードツールには難しい機能です。「痒い所に手が届く」のがFileMakerの魅力で、さすが老舗といった機能ではないでしょうか。
フィルタの活用次第では、一つのレイアウトにいろいろな表示をすることもできますので、さらにFileMakerの幅が広がりますね。

