FileMakerで入力フォームを作っていると、「必須項目が空のまま保存されてしまった」「日付や数値の入力ミスに気づかず後から集計が崩れた」といったトラブルが起きがちです。フィールドの標準機能だけでもある程度チェックはできますが、もう一歩踏み込んだ柔軟な入力検証をしたい場合は、「レコード保存時にスクリプトでチェックする」方法が役に立ちます。
この記事では、レコードを保存するタイミングでスクリプトを使って入力内容を検証し、エラーがあれば保存を止める仕組みを、できるだけ専門用語を避けて分かりやすく解説します。
レコード保存時に入力検証を行うメリット
まず、「なぜスクリプトで入力検証を行うのか」を簡単に整理しておきます。
- 入力ミスを保存前に止められる:必須項目の未入力や形式違いを事前に防げます。
- 複数フィールドをまとめてチェックできる:標準のフィールド定義では難しい「Aが入力されているときはBも必須」などの条件も実装できます。
- 分かりやすいメッセージを表示できる:ユーザー向けに、丁寧で具体的なエラー文を出すことができます。
- 画面ごとにルールを変えられる:登録画面と修正画面で違うチェックルールを使う、といった柔軟な運用が可能です。
これらを実現する代表的な方法が、「レコード保存時に実行されるスクリプトトリガ」と、「その中で行う入力チェック処理」の組み合わせです。
基本の考え方:保存前にチェックして、ダメならキャンセル
大まかな流れは次のようになります。
- ユーザーがレコードを新規作成・編集し、保存しようとする
- 保存のタイミングでスクリプトトリガが動く
- スクリプトの中で各フィールドの値をチェックする
- 問題があればメッセージを表示し、保存処理をキャンセルする
- 問題がなければそのまま保存を続行する
ポイントは、「ユーザーが保存しようとした瞬間をとらえて、自動的にスクリプトを実行する」ことです。そのために使うのが「OnRecordCommit(レコード確定時)」などのスクリプトトリガです。
ステップ1:入力チェック用スクリプトの作成
まずは、入力検証を行うスクリプトを作成します。ここでは例として、次のようなチェックを行う想定にします。
- 「氏名」フィールドは必須
- 「メールアドレス」フィールドは必須かつ「@」を含む
- 「年齢」フィールドは数値で、0以上
この条件をチェックするスクリプトの流れは、次のようなイメージです。
- エラーメッセージを入れる変数(例:
$errorMessage)を用意する - それぞれのフィールドの内容を確認し、問題があればメッセージを追記する
- エラーメッセージが空でなければ、カスタムダイアログなどでユーザーに提示する
- エラーがある場合は、「スクリプト結果」としてエラーありを示す値(例:0以外の値)を返す
- エラーがない場合は、「スクリプト結果」としてエラーなしを示す値(例:0)を返す
疑似コード的に書くと、次のようなイメージです。
Set Variable [ $errorMessage ; "" ]
If [ IsEmpty ( 氏名 ) ]
Set Variable [ $errorMessage ; $errorMessage & "氏名は必ず入力してください。" & "¶" ]
End If
If [ IsEmpty ( メール ) ]
Set Variable [ $errorMessage ; $errorMessage & "メールアドレスは必ず入力してください。" & "¶" ]
Else If [ Position ( メール ; "@" ; 1 ; 1 ) = 0 ]
Set Variable [ $errorMessage ; $errorMessage & "メールアドレスの形式が正しくありません。" & "¶" ]
End If
If [ not IsEmpty ( 年齢 ) and ( not IsNumeric ( 年齢 ) or 年齢 < 0 ) ]
Set Variable [ $errorMessage ; $errorMessage & "年齢は0以上の数字で入力してください。" & "¶" ]
End If
If [ not IsEmpty ( $errorMessage ) ]
Show Custom Dialog [ "入力エラー"; $errorMessage ]
Exit Script [ Result: 1 ] // エラーありを示す(0以外)
End If
Exit Script [ Result: 0 ] // 問題なし
実際のスクリプトでは、テーブルやフィールド名に合わせて変更してください。
ステップ2:レコード保存時にスクリプトを自動実行する
次に、このスクリプトを「レコード保存(確定)」のタイミングで自動的に動くよう設定します。一般的には、対象となるレイアウトに「OnRecordCommit」のスクリプトトリガを設定します。
操作のイメージは次の通りです。
- レイアウトモードに切り替える
- メニューから「レイアウト設定」を開く
- 「スクリプトトリガ」タブを選ぶ
- 「OnRecordCommit(レコード確定時)」に先ほど作成したチェック用スクリプトを指定する
- 設定を保存してレイアウトモードを終了する
これで、ユーザーがレコードを保存しようとするたびに、必ずスクリプトが動いて入力内容を検証してくれるようになります。
ステップ3:エラー時に保存をキャンセルする仕組み
トリガ付きスクリプトから「スクリプト結果」を返すと、その結果をもとに「レコードの確定をキャンセルするかどうか」が自動的に判断されます。一般的には次のようにします。
- スクリプト結果が 0:問題なし → レコード確定をそのまま続行
- スクリプト結果が 0 以外:問題あり → レコード確定をキャンセル
つまり、先ほどのサンプルのように「エラーがあるときだけ Exit Script [ Result: 1 ]」としておけば、エラー時にはレコードが保存されず、ユーザーは入力画面にとどまることができます。
ユーザーにとっても、「エラーメッセージが表示され、修正してからもう一度保存を試す」という自然な流れで作業が進むため、操作に戸惑いが少なくなります。
よくあるチェック例と応用のヒント
スクリプトでの入力検証は、工夫次第でさまざまなチェックに応用できます。代表的な例をいくつか挙げます。
- 日付の前後関係チェック(例:開始日が終了日より後になっていないか)
- 重複登録の防止(例:同じメールアドレスのレコードがすでに存在しないか)
- 選択肢の組み合わせチェック(例:特定の「種別」の場合だけ別の項目が必須)
- 桁数や文字数の制限(例:郵便番号は7桁、電話番号は10〜11桁など)
また、エラーメッセージを一つずつ個別に出すのではなく、複数のエラーをまとめて表示することで、ユーザーが一度に必要な修正点を把握できるようにする、という工夫もおすすめです。
まとめ:運用に合わせて柔軟にルールを組み立てる
FileMakerの標準の入力検証機能だけでも一定のチェックは可能ですが、運用が進むにつれて「この画面だけ別ルールにしたい」「複数項目を組み合わせた条件でチェックしたい」といった要望が出てきます。そのようなとき、レコード保存時にスクリプトで入力検証を行う方法は、とても強力で柔軟性の高い選択肢になります。
まずは、必須項目のチェックや簡単な形式チェックから始めて、徐々に自分たちの業務に合ったルールを追加していくと、無理なく品質向上につなげられます。実装の際は、テスト用のレイアウトやテスト用ファイルで試しながら、ユーザーにとって分かりやすいメッセージや動きになっているかを確認することをおすすめします。