FileMakerで親子レコード複製とポータル行コピー
基礎知識

FileMakerで親子レコード複製とポータル行コピー

2026年5月13日 admin 基礎知識

FileMakerで親子レコードをまとめて複製したい

見積書や請求書などで、ヘッダ(親)と明細行(子)をまとめてコピーしたいと思ったことはないでしょうか。
ヘッダだけなら「レコードの複製」で簡単にできますが、ポータルに表示されている明細行(子レコード)は、そのままでは一緒に複製されません。

この記事では、親レコードとポータル内の子レコードをセットで複製する考え方と基本的な操作手順を、できるだけ専門用語を省きながら紹介します。スクリプトやリレーションを使うため少しハードルはありますが、仕組みを理解すれば応用もしやすくなります。

親子レコード・ポータルの基本イメージをおさらい

まずは、よくある構成のイメージを整理しておきます。

  • 親テーブル:見積・請求などの「ヘッダ」部分(例:見積番号、取引先名、日付 など)
  • 子テーブル:明細行(例:商品コード、数量、単価、小計 など)
  • 関係:親の「主キー(ID)」と、子の「外部キー(親ID)」でつながっている
  • ポータル:親レイアウト上に、子テーブルの明細行を一覧表示・入力するエリア

通常の「レコードの複製」では、親テーブルの1行だけがコピーされ、明細(子レコード)はコピーされません。
そのため、ポータル行も含めた複製を行うには、スクリプトで子レコードを作り直す必要があります。

全体の流れ:親を複製 → 子をコピー → 子を貼り付け

一般的な流れは次のようになります。

  1. 現在表示している親レコード(例:見積)を複製する
  2. 元の親レコードにぶら下がっている子レコード(明細行)をすべて取得する
  3. 複製した親レコードに対して、子レコードを1行ずつ新規作成し、元の明細と同じ内容をセットする

これをスクリプトで自動化することで、ボタンひとつで「親+ポータル行」を丸ごとコピーできるようになります。

親レコードを複製するスクリプトの基本

まずは、親レコード(例:見積ヘッダ)を複製する部分です。
FileMakerのスクリプトステップでは、次のようなイメージになります。

  • ステップ1:現在の親レコードの 主キー(ID) を変数に保存しておく(例:Set Variable [ $oldParentID ; 値: 親テーブル::主キー ]
  • ステップ2:「レコードを複製」ステップで親レコードを複製する
  • ステップ3:複製後の親レコードの主キー(ID)も変数に保存する(例:Set Variable [ $newParentID ; 値: 親テーブル::主キー ]

この「元の親ID」と「新しい親ID」を覚えておくことで、
元の親IDに紐づく子レコードを、新しい親IDに付け替えて作り直す」ことができます。

ポータル行(子レコード)を1行ずつコピーする考え方

次に、ポータル内の行(子レコード)をコピーして、新しい親に紐づけて作り直す流れです。
考え方としては以下のようになります。

  1. 元の親レコードに関連する子レコードだけを抽出(またはリレーション経由で一覧表示)
  2. ループ処理で、1行ずつ子レコードを参照
  3. 子レコードの各フィールドの値を変数に保持
  4. 新しい親IDを外部キーにして、子テーブルで新規レコードを作成
  5. 保持しておいた値を、新しい子レコードにセット

これをすべてスクリプトで流すことで、元のポータルと同じ内容の明細が、新しい親レコード側にも自動で作られます。

ポータル上から実行する時の注意点

親レイアウト上のポータルに「複製」ボタンを置いて、そこからスクリプトを動かすこともよくあります。
このときの注意点をまとめると、次のようになります。

  • スクリプトの前半で、必ず「親」テーブルを参照している状態(親テーブルのレイアウト)にしておく
  • ポータルの最初の行だけをコピーするのではなく、全行を対象にしたループにする(例:Go to Portal Row [ 最初 ]Loop…処理…Go to Portal Row [ 次の;終了後:終了]End Loop
  • 行数が多い場合は、処理に時間がかかることがあるので、処理中のダイアログ表示を検討する

ポータルを経由して子レコードを操作する場合、
「ポータルの行がアクティブになっているか」「どのテーブルオカレンスを参照しているか」などが動作に影響します。
うまく動かないときは、スクリプトデバッガで1行ずつ動きを確認すると原因を見つけやすくなります。

親子レコード複製を使いやすくする工夫

単にコピーできるだけでなく、日常業務で使いやすくするためには、いくつか工夫があります。

  • 複製後に、日付やステータスを自動的に初期値に戻す(例:日付を今日に、状態を「作成中」にする)
  • 取引先など、一部の項目だけは空欄にする(別の取引先に流用する場合)
  • 複製前に確認ダイアログを出して、誤操作を防ぐ
  • 大量の行をコピーした場合に備えて、「処理が完了しました」とメッセージを出す

これらをスクリプトに組み込むことで、現場の操作ミスを減らしつつ、業務を効率化できます。

まとめ:親子レコード複製は「IDの引き継ぎ」がポイント

FileMakerで親子レコードをまとめて複製するには、単なる「レコードを複製」ステップだけではなく、子レコードを新しい親IDに結び直す処理が必要です。
そのために、

  • 元の親レコードのIDを控えておく
  • 親レコードを複製し、新しいIDを控える
  • 元のIDに紐づく子レコードを、ループで1行ずつ新しいIDに付け替えて作成する

という流れを、スクリプトで自動化していきます。
最初は少し複雑に感じるかもしれませんが、一度仕組みを作ってしまえば、見積や注文などさまざまな場面で再利用できます。
「同じような明細を何度も手入力している」と感じたら、ぜひ親子レコード複製とポータル行コピーの仕組みを検討してみてください。

※ 本稿は、生成AIを使用して執筆しています。重要な内容については、必ずご自身でマニュアル等をご確認ください。