FileMakerでポータルを使っていると、「行を追加するボタン」「行を削除するボタン」をきれいに付けたい、と思う場面がよくあります。ですが、ボタンの付け方やスクリプトの書き方が分からず、つい手作業で行を追加・削除してしまうことも少なくありません。
この記事では、ポータル行の追加・削除をボタンで直感的に操作できるようにする方法を、できるだけ専門用語を避けて解説します。レイアウト編集やスクリプトの基本操作が分かる方なら、すぐに取り入れられる内容です。
ポータル行の追加・削除ボタンを付けるメリット
まず、ポータル行の操作をボタン化するメリットを整理しておきます。
- ユーザーが迷わず操作できる:+ボタンで追加、ゴミ箱アイコンで削除など、直感的に使える。
- 誤操作を減らせる:削除前に確認ダイアログを出すことで、うっかり削除を防げる。
- 入力ルールを組み込みやすい:空行は追加しない、必須項目が埋まっていないと追加させない、などのチェックがしやすくなる。
- 運用ルールを統一できる:どの画面でも同じ操作感にでき、社内の問い合わせも減らしやすい。
基本の考え方:ポータル行は「関連レコード」
ポータルに表示されている1行1行は、単なる「行」ではなく、別テーブルの関連レコードです。そのため、実際には「行を追加・削除する」というより、
- 関連レコードを新規作成する(=行が増える)
- 関連レコードを削除する(=行が消える)
という動きになります。ですので、ボタンも「関連レコードの新規作成・削除」を行うスクリプトだとイメージしておくと分かりやすいです。
ポータル行に「追加ボタン」を付ける手順
ここでは、親テーブル「受注」、子テーブル「受注明細」というよくある例で説明します。「受注明細」を表示するポータルに、行追加ボタンを用意してみます。
1. スクリプトを作成する
メニューから[スクリプト]→[スクリプトワークスペース]を開き、次のような流れのスクリプトを作ります。
- ポータルのあるレイアウトを対象にする(すでに開いていればそのままでOK)
- 「関連レコードの新規レコード作成」 を実行
- 必要に応じて初期値をセットする(例:数量に「1」を入れるなど)
- 最後に必要なフィールドへカーソルを移動する
実際のステップ例:
- ステップ1:関連レコードの新規レコード作成(対象:ポータルで使っているリレーション名)
- ステップ2:フィールド設定(例:数量 = 1)
- ステップ3:フィールドへ移動(ユーザーに入力してほしいフィールド)
最低限、「関連レコードの新規レコード作成」だけでも、ポータルの新しい行が1行増えます。
2. レイアウト上にボタンを配置する
- レイアウトモードに切り替える。
- ポータルの外側に、「+」などのテキストまたはアイコンを置く。
- それを選択して[ボタン設定]で、先ほど作成したスクリプトを割り当てる。
ポータルの「中」ではなく「外」に配置することで、「常に一番下に行を追加する」ボタンとして動作させることができます。
ポータル行ごとに「削除ボタン」を付ける方法
削除ボタンは、各行の右端などに配置し、その行に対応するレコードだけを消すようにします。
1. 削除用スクリプトを作る
同様にスクリプトワークスペースで、次のようなスクリプトを作ります。
- (任意)確認ダイアログを表示する
- OKが選ばれた場合のみ、対象レコードを削除する
ステップ例:
- ステップ1:カスタムダイアログを表示
メッセージ:「この行を削除してもよろしいですか?」
ボタン:「削除する」「キャンセル」を設定。 - ステップ2:If[Get ( 最後のメッセージ選択 ) = 1]
レコード削除[ダイアログあり/なしはお好みで]
End If
この「レコード削除」は、実行されたコンテキスト(その行)のレコードに対して行われます。
2. ポータル内に削除ボタンを配置する
- レイアウトモードで、ポータルをクリックして中の行を編集できる状態にする。
- ポータル行の右端あたりに、小さなテキスト「×」やゴミ箱アイコンを配置する。
- それをボタンにし、削除スクリプトを割り当てる。
ポイントは、ボタンが「ポータル行の中」に入っていることです。こうすることで、どの行のボタンが押されたかをFileMakerが判断し、その行のレコードを削除してくれます。
よくあるつまずきポイントと対処法
削除ボタンで「違う行が消える」場合
削除ボタンがポータル行の外に出てしまっていることが多いです。レイアウトモードで、ボタンがポータルの内側に収まっているかを確認しましょう。
追加したはずなのに行が増えない場合
- リレーション条件に合う値がセットされていないと、ポータルに表示されません(親側の主キーが空など)。
- 親レコードがまだ保存されていない場合にも表示されないことがあります。親側のレコードを先に確定させておきましょう。
誤削除が不安な場合
- 必ず確認ダイアログを挟む。
- 削除せず、「フラグ」を立てる方式にして、後でまとめて無効行を処理する運用にする。
少し応用:最後の空行を自動で無くす工夫
よくある要望として、「空の行がいつまでも残るのは見た目が悪い」というものがあります。そんな場合は、
- 追加スクリプトで、必須項目が空なら新規レコードを作らない
- 削除スクリプトで、最後の1行だけは削除せず、空行として残す/残さないを決める
といったルールをスクリプトに組み込むことができます。最初から完璧を目指さず、まずは「+で追加」「×で削除」ができるようになってから、少しずつ改良していくと運用に合った仕組みになりやすいです。
まとめ
- ポータル行は「関連レコード」なので、追加・削除はレコード操作として考える。
- 行追加は「関連レコードの新規レコード作成」ステップを使う。
- 行削除はポータル行内のボタンから「レコード削除」スクリプトを呼び出す。
- 確認ダイアログや入力チェックを組み込むことで、誤操作を防げる。
ポータル行に追加・削除ボタンを実装しておくと、ユーザーの操作性がぐっと上がり、トラブルも減らしやすくなります。まずはシンプルなスクリプトで動かしてみて、使いながら少しずつ改善していきましょう。