FileMakerで親子レコードをまとめて複製したい
見積書や請求書などで、ヘッダ(親)と明細行(子)をまとめてコピーしたいと思ったことはないでしょうか。
ヘッダだけなら「レコードの複製」で簡単にできますが、ポータルに表示されている明細行(子レコード)は、そのままでは一緒に複製されません。
この記事では、親レコードとポータル内の子レコードをセットで複製する考え方と基本的な操作手順を、できるだけ専門用語を省きながら紹介します。スクリプトやリレーションを使うため少しハードルはありますが、仕組みを理解すれば応用もしやすくなります。
親子レコード・ポータルの基本イメージをおさらい
まずは、よくある構成のイメージを整理しておきます。
- 親テーブル:見積・請求などの「ヘッダ」部分(例:見積番号、取引先名、日付 など)
- 子テーブル:明細行(例:商品コード、数量、単価、小計 など)
- 関係:親の「主キー(ID)」と、子の「外部キー(親ID)」でつながっている
- ポータル:親レイアウト上に、子テーブルの明細行を一覧表示・入力するエリア
通常の「レコードの複製」では、親テーブルの1行だけがコピーされ、明細(子レコード)はコピーされません。
そのため、ポータル行も含めた複製を行うには、スクリプトで子レコードを作り直す必要があります。
全体の流れ:親を複製 → 子をコピー → 子を貼り付け
一般的な流れは次のようになります。
- 現在表示している親レコード(例:見積)を複製する
- 元の親レコードにぶら下がっている子レコード(明細行)をすべて取得する
- 複製した親レコードに対して、子レコードを1行ずつ新規作成し、元の明細と同じ内容をセットする
これをスクリプトで自動化することで、ボタンひとつで「親+ポータル行」を丸ごとコピーできるようになります。
親レコードを複製するスクリプトの基本
まずは、親レコード(例:見積ヘッダ)を複製する部分です。
FileMakerのスクリプトステップでは、次のようなイメージになります。
- ステップ1:現在の親レコードの 主キー(ID) を変数に保存しておく(例:
Set Variable [ $oldParentID ; 値: 親テーブル::主キー ]) - ステップ2:「レコードを複製」ステップで親レコードを複製する
- ステップ3:複製後の親レコードの主キー(ID)も変数に保存する(例:
Set Variable [ $newParentID ; 値: 親テーブル::主キー ])
この「元の親ID」と「新しい親ID」を覚えておくことで、
「元の親IDに紐づく子レコードを、新しい親IDに付け替えて作り直す」ことができます。
ポータル行(子レコード)を1行ずつコピーする考え方
次に、ポータル内の行(子レコード)をコピーして、新しい親に紐づけて作り直す流れです。
考え方としては以下のようになります。
- 元の親レコードに関連する子レコードだけを抽出(またはリレーション経由で一覧表示)
- ループ処理で、1行ずつ子レコードを参照
- 子レコードの各フィールドの値を変数に保持
- 新しい親IDを外部キーにして、子テーブルで新規レコードを作成
- 保持しておいた値を、新しい子レコードにセット
これをすべてスクリプトで流すことで、元のポータルと同じ内容の明細が、新しい親レコード側にも自動で作られます。
ポータル上から実行する時の注意点
親レイアウト上のポータルに「複製」ボタンを置いて、そこからスクリプトを動かすこともよくあります。
このときの注意点をまとめると、次のようになります。
- スクリプトの前半で、必ず「親」テーブルを参照している状態(親テーブルのレイアウト)にしておく
- ポータルの最初の行だけをコピーするのではなく、全行を対象にしたループにする(例:
Go to Portal Row [ 最初 ]→Loop→…処理…→Go to Portal Row [ 次の;終了後:終了]→End Loop) - 行数が多い場合は、処理に時間がかかることがあるので、処理中のダイアログ表示を検討する
ポータルを経由して子レコードを操作する場合、
「ポータルの行がアクティブになっているか」「どのテーブルオカレンスを参照しているか」などが動作に影響します。
うまく動かないときは、スクリプトデバッガで1行ずつ動きを確認すると原因を見つけやすくなります。
親子レコード複製を使いやすくする工夫
単にコピーできるだけでなく、日常業務で使いやすくするためには、いくつか工夫があります。
- 複製後に、日付やステータスを自動的に初期値に戻す(例:日付を今日に、状態を「作成中」にする)
- 取引先など、一部の項目だけは空欄にする(別の取引先に流用する場合)
- 複製前に確認ダイアログを出して、誤操作を防ぐ
- 大量の行をコピーした場合に備えて、「処理が完了しました」とメッセージを出す
これらをスクリプトに組み込むことで、現場の操作ミスを減らしつつ、業務を効率化できます。
まとめ:親子レコード複製は「IDの引き継ぎ」がポイント
FileMakerで親子レコードをまとめて複製するには、単なる「レコードを複製」ステップだけではなく、子レコードを新しい親IDに結び直す処理が必要です。
そのために、
- 元の親レコードのIDを控えておく
- 親レコードを複製し、新しいIDを控える
- 元のIDに紐づく子レコードを、ループで1行ずつ新しいIDに付け替えて作成する
という流れを、スクリプトで自動化していきます。
最初は少し複雑に感じるかもしれませんが、一度仕組みを作ってしまえば、見積や注文などさまざまな場面で再利用できます。
「同じような明細を何度も手入力している」と感じたら、ぜひ親子レコード複製とポータル行コピーの仕組みを検討してみてください。