はじめに
システム開発担当の「ほうがん」です。FileMakerでポータルにフィルタ機能があるのはご存じだと思います。この機能は便利なのですが、ポータル内のレコード数が多くなるとポータルの表示に時間が掛かるようになります。
今回はこのポータルのフィルタ機能の代わりにリレーションシップを使って高速表示可能な同等のフィルタ機能を作成していきます。
1,ポータルのフィルタ
ポータルのフィルタ機能なんて、そんな基本的な事は分かっているよと言われる方もいらっしゃるとは思いますが、おさらいで少しだけお付き合いください。
まず、FileMakerのポータルのフィルタはどのように設定して、どの様な動作となるかです。
今回は全国分の住所録の内容(※ダミーデータ)をUtilityテーブルにポータル表示して、特定の都道府県に住む人だけをフィルタして表示するポータルを作成してみたいと思います。
1,ポータルに住所録全レコードを表示するリレーションシップを作成します。
Utility 「G_1(数値1)」と住所録「C_1(計算値1)」でリレーションシップを作成してUtilityテーブルに全住所録データ全件を表示させるポータルを作成します。
このリレーションシップを使ってUtilityレイアウト上に住所録一覧を表示するポータルを作成します。
親側G_1(グローバルフィールド 値は1)と子側 住所録もC_1(計算フィールド 値は1)のリレーションシップなので、ポータル内に全件の住所録を表示するというポータルになります。
このポータルの設定中の赤枠が「ポータルレコードのフィルタ」機能の設定です。ここがチェックされ右側「設定」でポータル内のレコードとの式を構成して、その結果が1のレコードのみ表示されるという機能です。
まずは、このフィルタは使用せずにUtilityレイアウト上のポータルに住所録一覧を表示させてみます。
これで住所録レコード全件が表示されるポータルが出来ました。
上部にUtilityテーブルにある「G_都道府県」フィールドを置きましたが、ここで選択された都道府県を使ってポータルレコードのフィルタを作成します。
レイアウトモードに戻り、フィルタ部分を作成していきます。
ポータルのダブルクリックで「ポータル設定」ダイアログを表示させ、「ポータルレコードのフィルタ」を設定します。
ポータルは設定の内容は以下の通りです。
Case (
IsEmpty ( Utility::G_都道府県 ) ; 1 ; //G_都道府県が選択されていない時 全表示
Utility::G_都道府県 = Utility_住所録::都道府県 ; 1 ; //G_都道府県と同じ時該当レコードを表示
0
)
この式は、
「G_都道府県」に値が入っていなければ、全レコードを表示する
「G_都道府県」に値が入っていれば該当する都道府県分のみ表示する
それ以外は表示しないとなります。
実はここの設定だけでは、フィルタは機能しません。追加作業が必要です。
1つは、フィルタを設定するポータルに名前を付ける、もう1つが該当ポータルをスクリプトで「ポータルの更新」処理を行う必要があります。 まず、ポータルをクリックして名前を付けます。
ポータル選択して「位置タブ」「名前」に入れた名称がポータルに付けられた固有名称です。今回は「住所録一覧」としました。
(※このポータルの「名前」はレイアウトごとに固有であれば良いので、他のレイアウトで同名称があっても問題ありません。)
次にスクリプトを設定します。
スクリプト名「住所禄一覧更新」
1, ウインドウの固定
2, ポータルの更新[オブジェクト名 : “住所録一覧”]
レイアウト上の「G_都道府県」の値が変更された際にポータルを更新したいので、レイアウト上の「G_都道府県」のスクリプトトリガに先ほど作成したスクリプトを割り当てます。
これで準備完了です。動作を確認してみます。
ブラウズモードに戻ります。「G_都道府県」が空ですので、今まで通り全住所録一覧が表示されます。
では、フィルタ機能を確かめるために上部の「G_都道府県」に「滋賀県」を入力してみます。
はい、特定の都道府県の方だけが表示されるポータルのフィルタが出来上がりました。
2,リレーションシップを用いたフィルタ機能
ここからが今回の本題でリレーションシップを用いてフィルタと同等機能を実装します。昔からFileMaker使用している方はポータルのフィルタ機能なんてものがありませんでしたので、力業でこういった機能を実装していた事と思います。
このフィルタ機能のために追加でリレーションシップを設定していきます。
今回はUtilityの「G_都道府県」と住所録の「都道府県」をリレーションシップで結びます。
先ほどのレイアウトを複製してポータル部分をここで設定した「Utility_住所録#リレーション」に変更します。先ほど設定したポータルのフィルタは設定しません。「G_都道府県」に設定したスクリプトトリガも外します。
設定が終了したらブラウズモードに変更します。
今回は「G_都道府県」が空白だとポータルも空白で表示されています。これを先ほどのフィルタ時と同じように全住所録表示とする事も出来るのですが、今回は割愛します。
では、動作を確認してみます。今度は「G_都道府県」に「京都府」を入れてみます。
フィルタと同じ結果が得られました。リレーションシップで行っていることで、多対多のリレーションシップを利用する事が出来ます。
どういう事かといいますと、「滋賀県」「京都府」「大阪府」など複数の都道府県を同時選択した結果をポータルに表示する事が出来ます。これをポータルのフィルタ機能で作るとなると計算式が大変になり、更に表示が遅くなります。
3,多対多のリレーションシップを用いたフィルタ機能
先ほど作成したレイアウトを「G_都道府県」に複数の都道府県が選択できるように値一覧で「都道府県」を作成して、上部にチェックボックス形式とします。以下のような画面になります。
それでは、チェックボックスで、「長崎県」「佐賀県」を選択してみます。
はい、「長崎県」と「佐賀県」と複数の都道府県を対象としたフィルタ機能が作成出来ました。もちろん、他の都道府県を選択、解除すれば、それに応じて表示内容が変更されます。
これが多対多のリレーションシップで実現しているフィルタ機能となります。
まとめ
ポータルのフィルタ機能は便利ですが、ポータルの対象レコード数が多かったり、フィルタの式が複雑になるほどポータルの表示速度が遅くなっていきます。
適材適所ではありますが、リレーションシップを利用したフィルタ機能の方がポータルのフィルタ機能よりも手数がかからず、表示速度も速いです。
今回は「都道府県」というテキストの複数選択を対象としましたが、次回はリレーションシップを使って数値範囲、年月日の期間でポータル内のデータをフィルタする機能を作成します。