FileMakerでポータルの件数を表示する（フィルターあり）

#FileMakerで「ポータルレコードのフィルタ」が設定されたポータルの件数を表示する

FileMakerでポータルの件数を確認する方法を紹介します。また、単に件数を表示する他に、検索機能の追加も行ってみます。

今回は、FileMaker Pro 17 Advancedを用いています。
(https://www.filemaker.com/jp/products/filemaker-pro-advanced/17-technical-specifications.html)

##テーブルとレイアウト
まず、テーブルとレイアウトを用意します。
テーブル名とレイアウト名は、「test004」
さらに、ポータルで表示対象となるデータ用のテーブルとレイアウトを用意します。テーブル名とレイアウト名は「list」

##フィールド
テーブル「test004」に、次のフィールドを用意します。
![001.png](https://qiita-image-store.s3.amazonaws.com/0/235280/20cfc94a-ee70-f0bd-112d-166313e4d227.png)

FMP17Ad標準で、「主キー」、「作成情報タイムスタンプ」、「作成者」、「修正情報タイムスタンプ」、「修正者」というフィールドが用意される様になっています。
これは、このままにしたいと思います。
このテーブルは、ポータルを配置するので、検索入力用のフィールドのみ必要です。
下記フィールドを作成してください。
フィールド名「_g_name」タイプ「テキスト」オプション「グローバル」
レコードは1つで大丈夫です。

FMP17より前のバージョンの場合、主キーは、後ほど利用しますので、設定して頂きたいと思います。値は、「UUID」でも「1」等の数値でも大丈夫です。

##フィールド2
テーブル「list」に、次のフィールドを用意します。
![002.png](https://qiita-image-store.s3.amazonaws.com/0/235280/5fc37f02-f4b0-7062-23ec-852b644c55ba.png)

FMP17Ad標準で、「主キー」、「作成情報タイムスタンプ」、「作成者」、「修正情報タイムスタンプ」、「修正者」というフィールドが用意される様になっています。
このテーブルは、ポータルで表示される対象となります。下記フィールドを作成してください。
フィールド名「name」タイプ「テキスト」
次に、集計用のフィールド
フィールド名「\_s_集計」、タイプ「集計」、カウント、主キー
最後に、リレーション用に外部キーのフィールド
フィールド名「外部キー」、タイプ「テキスト」

##リレーションの設定
ポータルにフィルターを設定するので、別テーブルの内容をポータルに表示する為のリレーションを設定します。
![003.png](https://qiita-image-store.s3.amazonaws.com/0/235280/00b9fdc7-32ed-6c7b-aa5f-aee054a61f27.png)

テーブルオカレンス「test004」の「主キー」とテーブルオカレンス「list」の外部キーにリレーション「＝」を設定します。

##データの用意
先のリレーションの設定から分かる通り、テーブル「test004」の「主キー」を確認する必要があります。
確認したテーブル「test004」の「主キー」を、これからデータを作成するテーブル「list」の「外部キー」に利用します。

では、テーブル「list」にデータを作成して行きましょう。
レコードを追加し、「name」に名前を入力、「外部キー」に先に確認したテーブル「test004」の「主キー」を入力してください。
名前欄は何でも構いませんが、特に無ければ、画像を参考にしてください。
![004.png](https://qiita-image-store.s3.amazonaws.com/0/235280/22bf2d89-55a7-e2a3-502b-e0c2fd5e78bb.png)

##ポータル
今回メインとなります、ポータルを作成していきます。
###レイアウト「test004」にポータルを作成
![005.png](https://qiita-image-store.s3.amazonaws.com/0/235280/897b8be3-9ebc-b5f0-eca8-329b529cec85.png)
ツールバーに「ポータルツール」というボタンがありますので、そのボタンをクリックし、
レイアウトに、ポータルを配置してください、サイズや、行数は後ほど設定しますので、小さ過ぎなければ大丈夫です。

ポータルを配置すると、ポータル設定というウインドウが出ますので、ポータルを設定しましょう。
![006.png](https://qiita-image-store.s3.amazonaws.com/0/235280/5c884a57-5e7f-fb4b-2300-cadd5dfe8cb4.png)

今回は、「レコードを表示、list」「垂直スクロールを許可、常時」、「代替の行状態を使用」、「アクティブな行状態を使用」と、
「ポータルレコードのフィルタ」を設定。
ポータルレコードのフィルタを選択すると、計算式の設定ウインドウが出ます。
![007.png](https://qiita-image-store.s3.amazonaws.com/0/235280/2cea9270-da76-356e-728d-f4f30d8f17de.png)
「ポータルレコードのフィルタ」の「計算式の設定」は、下記を設定してください。

```
Case(
　IsEmpty(test004::_g_name); 1;
　PatternCount(list::name; test004::_g_name)
)
```

計算式の設定を「OK」で閉じ、ポータル設定も「OK」で閉じると、
ポータルにフィールドを追加ウインドウが表示されます。
![008.png](https://qiita-image-store.s3.amazonaws.com/0/235280/9d78624b-20d8-e57e-cc84-5c0ec2edb425.png)

::nameを選択し、「移動」をクリックし、OKをクリックしてください。

![009.png](https://qiita-image-store.s3.amazonaws.com/0/235280/9c2fcbfe-157d-582a-63ef-6eb3303ca41c.png)

ポータル内の「::name」フィールドを選択し、
フィールド入力にあるブラウズモードのチェックを外してください。
![021.png](https://qiita-image-store.s3.amazonaws.com/0/235280/e5460c18-325b-f5ae-e876-3bbc6596553d.png)


下図を参考に、ポータルのサイズを調整してください。

![010.png](https://qiita-image-store.s3.amazonaws.com/0/235280/ac3f445e-16ab-8dee-8ad9-970aaad1d815.png)

ポータルの名前を「ポータル1」と設定してください。
![014.png](https://qiita-image-store.s3.amazonaws.com/0/235280/1d0de3fc-4232-0e1c-2965-d399eb645e42.png)

今までの手順で、上図の様なポータルが作成されているハズです。

続いて、人数を表示する為に、1行のポータルを作成します。
###件数表示
件数表示用の1行ポータルを作成します。
「ポータル1」をコピーして
![012.png](https://qiita-image-store.s3.amazonaws.com/0/235280/b46709a8-f919-5123-ce85-db1a211885d3.png)
貼り付けし、複製してください。
![013.png](https://qiita-image-store.s3.amazonaws.com/0/235280/4a60deb1-813c-9eee-b18b-993340bacfdc.png)

複製されたポータルの名前を「ポータル2」と設定してください。
![015.png](https://qiita-image-store.s3.amazonaws.com/0/235280/aa6354b4-9c22-5fcd-39c5-37c6f6ad2168.png)

「ポータル2」は人数を表示する用の1行ポータルです。
ポータル設定を開き、下図を参考に、垂直スクロールを許可のチェックを外し、行数を1、代替の行状態を使用のチェックを外し、アクティブな行状態のチェックも外してください。
![016.png](https://qiita-image-store.s3.amazonaws.com/0/235280/921a486a-a536-0c8b-d1ae-fe96df72be96.png)

次に、「ポータル2」内の「name」フィールドを選択し、
![017.png](https://qiita-image-store.s3.amazonaws.com/0/235280/d6fac327-e850-25d6-69d4-de240590c94c.png)

フィールド設定を開き、「::\_s_集計」を選択して、OKをクリックしてください。
![018.png](https://qiita-image-store.s3.amazonaws.com/0/235280/b9295972-5e82-664a-4dcd-b70b9100d832.png)


ポータルのサイズを調整し、「\_s_集計」を中央揃えにしましょう。
![019.png](https://qiita-image-store.s3.amazonaws.com/0/235280/4cf4816b-81ae-3bee-630a-f80ae1666ab6.png)

次に、検索用フィールド、検索ボタンを準備します。
###検索入力用フィールドと検索ボタン
検索入力用に、「_g_name」フィールドを配置してください。
次に、検索用のボタンを配置してください。
![020.png](https://qiita-image-store.s3.amazonaws.com/0/235280/2e952446-cf3b-5675-4147-5cfbf34993dd.png)

下図を参考にレイアウトを整えましょう。
![022.png](https://qiita-image-store.s3.amazonaws.com/0/235280/972a3eca-a0c5-51d7-ab6c-017222f4eba1.png)

最後に、検索ボタン用のスクリプトを作成します。
###検索用スクリプト
スクリプトワークスペースを開いてください。
![023.png](https://qiita-image-store.s3.amazonaws.com/0/235280/4cf43a74-1c48-1bea-8175-3f689579d975.png)

新規作成ボタンをクリックしてください。
また、スクリプト名を「検索ボタン」と変更してください。
![024.png](https://qiita-image-store.s3.amazonaws.com/0/235280/3bc49e42-7ec9-bcab-879c-81871edbf9c4.png)

下記内容用で、スクリプトを記述してください。

```
レコード/検索条件確定[ダイアログあり：オフ]
ポータルの更新[オブジェクト名："ポータル1"]
ポータルの更新[オブジェクト名："ポータル2"]
```

![025.png](https://qiita-image-store.s3.amazonaws.com/0/235280/d20aa3bd-ad05-1b33-3272-270c5cb1f5c3.png)

記述できましたら、スクリプトを保存してください。
![026.png](https://qiita-image-store.s3.amazonaws.com/0/235280/db50725f-4571-c9a1-5c81-c014853b262a.png)

保存したスクリプトを、検索ボタンから呼び出される様に設定しましょう。

レイアウトモード時に、検索ボタンを右クリックし、ボタン処理より、スクリプト実行を選択してください。
![027.png](https://qiita-image-store.s3.amazonaws.com/0/235280/d43e229c-342f-40d6-0f33-cf5e7e11a764.png)

スクリプト指定ウインドウで「検索ボタン」スクリプトを選択し、OKボタンをクリックしてください。
![028.png](https://qiita-image-store.s3.amazonaws.com/0/235280/b34fb4b7-5c00-aab4-2871-aa59b31a94da.png)

レイアウトモードを終了し、
以上で、完成です。

実際に、検索用フィールドに何か入力し、検索ボタンをクリックして動作を確認してみましょう。
![029.png](https://qiita-image-store.s3.amazonaws.com/0/235280/95450add-d6ec-d922-c9de-c8fbf169234a.png)
「ポータル1」には一致した名称が表示され、「ポータル2」には、一致した件数が表示されていると思います。

##最後に
今回は、下記2つを同時に紹介いたしました。
①ポータル内の行数を集計フィールドと1行ポータルを利用して表示する方法
②検索フィールドを設け、ポータル内が検索で絞り込まれている様に見せる方法

①と②は別々に説明した方が分かりやすかったかとは思いますが、
利用する場面では、組み合わせた場合の方が多いかと思い、同時に説明致しました。

また、FMP17Ad以外で同じ手順を行う場合、主キーと言うフィールドは自分で用意する必要があります。

以上です。