FileMaker 動的なポータルフィルタ
こんにちは、タダシです。今日はポータルを設定したとき、検索したいキーワードを含む行だけを表示したい場合に使えるテクニックを紹介します。
恥ずかしながら、僕自身かなりつまずいた部分なのでできるだけ丁寧に解説していきたいと思います。
担当者に紐づけた案件をポータルに表示するという設定で、成約確度ごとに動的にフィルタをかけて成約確度ごとに案件が確認できるものをつくる。
↓こんなかんじ
テーブルの設定
担当者テーブルと案件テーブルを作りました。
担当者テーブル
担当者テーブルに検索フィールドを設定しました。
(別テーブルに設定しても良いと思います)
オプション⇒データの格納 グローバル格納を選択します。
案件テーブル
案件を担当者と紐づけしますので案件テーブルにも担当者ID(外部キー)を設定します。
リレーションシップグラフの設定
担当者TO(テーブルオカレンス)と担当者_案件TO(担当者TOから見た案件TO)を作成します。
それぞれの担当者IDでをリレーションでつなげます。
ポータルの設定
担当者TOに基づいたレイアウトにポータルを作成します。
レイアウト編集モードで作成したポータルをダブルクリックするとポータル設定ウインドウが出てきます。
ポータルレコードのフィルタにチェックをします。計算式を入力していきます。
ポータルフィルタ
ポータルフィルタを設定するうえで、前提知識として理解しておきたいのが、
ポータルフィルタに設定した論理式はポータル行の一行ごとに評価され、真(0と空欄以外) と評価された行だけが表示される仕組みです。
それでは計算式を設定していきます。
IF関数を使って、検索フィールドが空欄の時はすべてを表示して、空欄でなければフィルタで絞り込むという設定にします。
まず空欄の時です、IsEmpty 関数を使用します。
IsEmpty 関数
この関数は指定したフィールドが空欄の時(真の時)は1を返します。先ほどの書いたように論理式の計算はポータルの行ごとに評価されますので、すべての行が表示されることになります。
次は検索フィールドに何かキーワードが入力されている場合です、ここではPatternCount関数を使用します。
PatternCount関数
patternCount 関数は対象のテキストに検索したいテキストがいくつ含まれているかを返してくれる関数です。
この関数では大文字と小文字は区別されません、
例えばPatternCount(”ABCab”;”ab”)とした場合、 ABとabの二つが含まれていますので【2】が返されます。
0と空欄以外の数字は真として扱われますのでこの場合は真となりポータルに表示されることになります。
オブジェクト名を指定
ここは覚えてほしいポイントですが、動的なポータルフィルタを設定する場合は必ず対象のポータルに対しオブジェクト名を指定してください。インスペクタパネルの位置タブで名前を設定できます。ここでは”ポータル1”と設定しました。
検索用フィールドの設定
レイアウト上に検索用フィールドと検索ボタン配置します。
検索ボタンの設定
検索ボタンで使用するスクリプトを書いていきます。
スクリプトの内容は非常にシンプルです。
①レコード/検索条件確定 によって、検索フィールドが入力中の場合でもフィールド内容を確定させてくれます。
②ポータルの更新によってポータルの表示内容を更新してくれます。ここで先ほどインスペクタで設定した”ポータル1”をオブジェクト名に指定します。
これですべての設定が完了しました。
いかがでしたか、こんなの当たり前と怒られそうですが、、
皆さんもぜひ試してみて下さい。
コメント