スクリプトで検索0件時に新規レコード作成
スクリプト

スクリプトで検索0件時に新規レコード作成

2026年6月5日 admin スクリプト

スクリプトで「検索0件」のときに自動で新規レコードを作成したい

FileMakerで検索を自動化していると、スクリプトで検索した結果が「0件」だった場合に、手動で新規レコードを作成している方は多いと思います。

「該当データがなければ、新規レコードを自動で作ってほしい」
「スクリプト1本で、検索→なければ新規作成 まで完結させたい」

こうした場面では、スクリプトの中で「検索結果が0件かどうか」を判定し、0件のときだけ「新規レコード/検索条件の保存」などを実行する方法が有効です。本稿では、その考え方と具体的なスクリプト例を、できるだけやさしい表現で解説します。

基本的な考え方:エラー番号で検索0件を判定する

FileMakerのスクリプトでは、「検索結果が何件だったか」を直接返す関数はありません。しかし、検索(検索実行)の直後に Get ( 最後のエラー ) 関数を使うと、検索の成否を判定できます。

  • エラー番号 0:検索成功(1件以上ヒット)
  • エラー番号 401:該当レコードなし(=検索結果0件)

つまり、「検索実行」の後に

  • If[ Get ( 最後のエラー ) = 401 ]
    → 新規レコード作成の処理を行う

という流れにすれば、「検索で0件のときだけ新規レコードを作る」ロジックが組めます。

よくある場面の例:顧客IDで検索して、なければ新規登録

例として、「顧客ID」を入力して顧客を検索し、該当する顧客がいなければ自動で新規顧客レコードを作成するスクリプトを考えてみます。

前提:

  • レイアウトは「顧客」テーブルを元にしている
  • グローバルフィールド「g_顧客ID_検索用」に検索したい顧客IDが入力されている

このときのスクリプト例です。

# 顧客IDで検索し、0件なら新規レコードを作成する一連の処理

# 1. 検索モードに切り替え
検索モードに切り替え [ 一時停止: オフ ]

# 2. 検索条件をセット
フィールド設定 [ 顧客::顧客ID ; グローバル::g_顧客ID_検索用 ]

# 3. 検索実行
検索実行 [ ]

# 4. 検索結果を判定
If [ Get ( 最後のエラー ) = 401 ]
  # 検索結果0件だった場合の処理

  新規レコード/検索条件の保存
  フィールド設定 [ 顧客::顧客ID ; グローバル::g_顧客ID_検索用 ]
  # 必要に応じて、他の初期値もここでセット

Else
  # 検索で1件以上ヒットした場合の処理
  # (特に何もしない、あるいは対象レコードに対する処理を続ける)
End If

ポイントは、「検索実行」の直後に Get ( 最後のエラー ) を見ていることです。ここで 401 なら、「レコードが見つからなかった=0件」だと判断できます。

ユーザーにとって自然な動きにする工夫

単に「0件なら新規レコードを作る」だけだと、ユーザーから見ると少しわかりづらい場合があります。例えば、ユーザーが入力ミスをしているのに、新規レコードがどんどん増えてしまう、といった問題です。

そこで、次のような工夫をすると、使いやすさが向上します。

1. 確認ダイアログを挟む

本当に新規レコードを作るかどうか、ユーザーに確認する方法です。

If [ Get ( 最後のエラー ) = 401 ]
  カスタムダイアログを表示 [ タイトル: "確認" ; メッセージ: 
    "該当する顧客が見つかりませんでした。新規レコードを作成しますか?" ; 
    ボタン: “作成”; “キャンセル” ]
  
  If [ Get ( 最後のメッセージ選択 ) = 1 ]  # 「作成」が押された場合
    新規レコード/検索条件の保存
    フィールド設定 [ 顧客::顧客ID ; グローバル::g_顧客ID_検索用 ]
  Else
    # キャンセル時の処理(何もしない、など)
  End If
End If

これにより、ユーザーが意図しない新規レコード作成を防ぐことができます。

2. 入力チェックを先に行う

顧客IDや商品コードなど、検索条件として使う値が空のままスクリプトを実行してしまうと、「0件だから新規作成」が連発してしまいます。これを防ぐために、検索前に「検索キーが入力されているか」をチェックしておくと安心です。

If [ IsEmpty ( グローバル::g_顧客ID_検索用 ) ]
  カスタムダイアログを表示 [ メッセージ: "顧客IDを入力してください。" ]
  スクリプト終了 [ 結果: 0 ]
End If

このように、先に入力チェックを入れることで、「空欄での検索→0件→新規作成」という誤動作を避けられます。

複数条件で検索する場合の注意点

顧客IDだけでなく、氏名や電話番号など複数の項目を組み合わせて検索することも多いと思います。この場合も考え方は同じですが、検索条件のセットを丁寧に行うことが重要です。

  • 本当に一意に特定したい条件だけで検索する
  • あいまい検索(前方一致・部分一致)をする場合は、新規レコード作成の条件を慎重に考える

例えば、「氏名が部分一致」で検索して0件のときに新規顧客を自動作成すると、同じような名前が登録されやすくなり、重複データの原因になりがちです。新規レコードを自動で作成する場合は、できるだけ「ID」や「メールアドレス」など、ユニークな値を使うとよいでしょう。

スクリプトを共通部品として使い回す

「検索して、なければ新規レコード作成」という処理は、顧客・商品・担当者など、さまざまなテーブルで繰り返し使うパターンです。

毎回スクリプトを1から書くのではなく、「検索+新規レコード作成」の部分を小さなサブスクリプトとして作っておき、他のスクリプトから呼び出すようにしておくと、保守がとても楽になります。

  • 引数で「検索したい値」や「対象とするテーブル」を渡す
  • サブスクリプト側でエラー判定・新規作成の流れを共通化する

こうして整理しておくことで、後から検索条件を変更したい場合でも、「共通のスクリプト」だけを修正すれば済むようになるため、開発効率と安全性が大きく向上します。

まとめ:検索0件時の新規作成は「401エラーの活用」がカギ

FileMakerで「検索0件なら新規レコード作成」を実現するポイントは、次のとおりです。

  • 検索実行の直後に Get ( 最後のエラー ) を確認する
  • エラー番号 401 は「該当レコードなし(=0件)」を意味する
  • 401 のときだけ「新規レコード/検索条件の保存」などの処理を行う
  • ユーザーの入力ミスや誤操作を想定して、「確認ダイアログ」や「入力チェック」を組み合わせる
  • 処理をサブスクリプトとして共通化すると、他のテーブルにも使い回しやすい

これらを押さえておくと、「検索→なければ新規作成」という一連の流れをスムーズに自動化でき、ユーザーにとっても自然で使いやすい画面を作りやすくなります。まずは単純なパターンから試し、徐々に条件や確認ダイアログを追加して、現場の運用に合ったスクリプトに育てていくとよいでしょう。

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