FileMakerで「ポータルレコードのフィルタ」が設定されたポータルの件数を表示する
FileMakerでポータルの件数を確認する方法を紹介します。また、単に件数を表示する他に、検索機能の追加も行ってみます。
今回は、FileMaker Pro 17 Advancedを用いています。
(https://www.filemaker.com/jp/products/filemaker-pro-advanced/17-technical-specifications.html)
テーブルとレイアウト
まず、テーブルとレイアウトを用意します。
テーブル名とレイアウト名は、「test004」
さらに、ポータルで表示対象となるデータ用のテーブルとレイアウトを用意します。テーブル名とレイアウト名は「list」
フィールド
FMP17Ad標準で、「主キー」、「作成情報タイムスタンプ」、「作成者」、「修正情報タイムスタンプ」、「修正者」というフィールドが用意される様になっています。
これは、このままにしたいと思います。
このテーブルは、ポータルを配置するので、検索入力用のフィールドのみ必要です。
下記フィールドを作成してください。
フィールド名「_g_name」タイプ「テキスト」オプション「グローバル」
レコードは1つで大丈夫です。
FMP17より前のバージョンの場合、主キーは、後ほど利用しますので、設定して頂きたいと思います。値は、「UUID」でも「1」等の数値でも大丈夫です。
フィールド2
FMP17Ad標準で、「主キー」、「作成情報タイムスタンプ」、「作成者」、「修正情報タイムスタンプ」、「修正者」というフィールドが用意される様になっています。
このテーブルは、ポータルで表示される対象となります。下記フィールドを作成してください。
フィールド名「name」タイプ「テキスト」
次に、集計用のフィールド
フィールド名「_s_集計」、タイプ「集計」、カウント、主キー
最後に、リレーション用に外部キーのフィールド
フィールド名「外部キー」、タイプ「テキスト」
リレーションの設定
ポータルにフィルターを設定するので、別テーブルの内容をポータルに表示する為のリレーションを設定します。
テーブルオカレンス「test004」の「主キー」とテーブルオカレンス「list」の外部キーにリレーション「=」を設定します。
データの用意
先のリレーションの設定から分かる通り、テーブル「test004」の「主キー」を確認する必要があります。
確認したテーブル「test004」の「主キー」を、これからデータを作成するテーブル「list」の「外部キー」に利用します。
では、テーブル「list」にデータを作成して行きましょう。
レコードを追加し、「name」に名前を入力、「外部キー」に先に確認したテーブル「test004」の「主キー」を入力してください。
名前欄は何でも構いませんが、特に無ければ、画像を参考にしてください。
ポータル
今回メインとなります、ポータルを作成していきます。
レイアウト「test004」にポータルを作成
ツールバーに「ポータルツール」というボタンがありますので、そのボタンをクリックし、
レイアウトに、ポータルを配置してください、サイズや、行数は後ほど設定しますので、小さ過ぎなければ大丈夫です。
ポータルを配置すると、ポータル設定というウインドウが出ますので、ポータルを設定しましょう。
今回は、「レコードを表示、list」「垂直スクロールを許可、常時」、「代替の行状態を使用」、「アクティブな行状態を使用」と、
「ポータルレコードのフィルタ」を設定。
ポータルレコードのフィルタを選択すると、計算式の設定ウインドウが出ます。
「ポータルレコードのフィルタ」の「計算式の設定」は、下記を設定してください。
Case(
IsEmpty(test004::_g_name); 1;
PatternCount(list::name; test004::_g_name)
)
計算式の設定を「OK」で閉じ、ポータル設定も「OK」で閉じると、
ポータルにフィールドを追加ウインドウが表示されます。
::nameを選択し、「移動」をクリックし、OKをクリックしてください。
ポータル内の「::name」フィールドを選択し、
フィールド入力にあるブラウズモードのチェックを外してください。
下図を参考に、ポータルのサイズを調整してください。
今までの手順で、上図の様なポータルが作成されているハズです。
続いて、人数を表示する為に、1行のポータルを作成します。
件数表示
件数表示用の1行ポータルを作成します。
「ポータル1」をコピーして
貼り付けし、複製してください。
複製されたポータルの名前を「ポータル2」と設定してください。
「ポータル2」は人数を表示する用の1行ポータルです。
ポータル設定を開き、下図を参考に、垂直スクロールを許可のチェックを外し、行数を1、代替の行状態を使用のチェックを外し、アクティブな行状態のチェックも外してください。
フィールド設定を開き、「::_s_集計」を選択して、OKをクリックしてください。
ポータルのサイズを調整し、「_s_集計」を中央揃えにしましょう。
次に、検索用フィールド、検索ボタンを準備します。
検索入力用フィールドと検索ボタン
検索入力用に、「_g_name」フィールドを配置してください。
次に、検索用のボタンを配置してください。
最後に、検索ボタン用のスクリプトを作成します。
検索用スクリプト
新規作成ボタンをクリックしてください。
また、スクリプト名を「検索ボタン」と変更してください。
下記内容用で、スクリプトを記述してください。
レコード/検索条件確定[ダイアログあり:オフ]
ポータルの更新[オブジェクト名:"ポータル1"]
ポータルの更新[オブジェクト名:"ポータル2"]
保存したスクリプトを、検索ボタンから呼び出される様に設定しましょう。
レイアウトモード時に、検索ボタンを右クリックし、ボタン処理より、スクリプト実行を選択してください。
スクリプト指定ウインドウで「検索ボタン」スクリプトを選択し、OKボタンをクリックしてください。
レイアウトモードを終了し、
以上で、完成です。
実際に、検索用フィールドに何か入力し、検索ボタンをクリックして動作を確認してみましょう。
「ポータル1」には一致した名称が表示され、「ポータル2」には、一致した件数が表示されていると思います。
最後に
今回は、下記2つを同時に紹介いたしました。
①ポータル内の行数を集計フィールドと1行ポータルを利用して表示する方法
②検索フィールドを設け、ポータル内が検索で絞り込まれている様に見せる方法
①と②は別々に説明した方が分かりやすかったかとは思いますが、
利用する場面では、組み合わせた場合の方が多いかと思い、同時に説明致しました。
また、FMP17Ad以外で同じ手順を行う場合、主キーと言うフィールドは自分で用意する必要があります。
以上です。