FileMaker:スクリプト:実務でエラー処理[オン]を入れるべき典型パターン5選

実務で「エラー処理[オン](Set Error Capture [On])」を入れるべき典型パターン5選を、理由・失敗例・最小コード例つきでまとめました。コピペしてすぐ使えます。


1) 検索(Find)系:該当0件でも止めずに案内したい

ありがち失敗:該当なしでFileMaker標準のダイアログが出て処理が止まる。
ねらい:静かに分岐して「見つかりません」と自前表示。

# 検索前にON
エラー処理 [ オン ]
新規検索条件
Set Field [ テーブル::項目 ; 変数や条件 ]
検索実行
If [ Get(LastError) ≠ 0 or Get(FoundCount) = 0 ]
   Show Custom Dialog [ "該当データはありませんでした。" ]
   エラー処理 [ オフ ]
   Exit Script
End If
# 必要処理…
エラー処理 [ オフ ]

2) 取込・書き出し(Import/Export/Save as PDF/Excel)

ありがち失敗:パス不正・権限不足・ファイルが無い/上書き不可で標準エラー。
ねらい:場所や権限の問題を検知してユーザーに案内。

エラー処理 [ オン ]
レコードのインポート [ 事前に保存した設定 or ダイアログ:オフ ; ソース指定 ]
If [ Get(LastError) ≠ 0 ]
   Show Custom Dialog [ "インポートに失敗しました。ファイルの場所・権限をご確認ください。" ]
   エラー処理 [ オフ ]
   Exit Script
End If
エラー処理 [ オフ ]

応用:

  • PDFとして保存 / Excel書き出し も同様に ON→結果判定→OFF。
  • 書き出し前に Get ( DocumentsPath ) でパス検証を。

3) 外部通信(「URLから挿入」「cURL」「API」)

ありがち失敗:ネット不通、認証エラー、タイムアウト。
ねらい:HTTPステータスやAPIのエラー本文まで拾って分岐。

エラー処理 [ オン ]
Set Variable [ $url ; "https://api.example.com/v1/items" ]
URLから挿入 [ 変数: $response ; $url ; cURLオプション: "-X GET --connect-timeout 10 --max-time 20" ]
Set Variable [ $fmErr ; Get(LastError) ]
If [ $fmErr ≠ 0 or IsEmpty ( $response ) ]
   Show Custom Dialog [ "通信に失敗しました。ネットワークやAPI設定をご確認ください。" ]
   エラー処理 [ オフ ]
   Exit Script
End If

# ここでJSON検証(お好みで)
If [ JSONGetElement ( $response ; "error" ) ≠ "" ]
   Show Custom Dialog [ "APIエラー: " & JSONGetElement ( $response ; "error.message" ) ]
   エラー処理 [ オフ ]
   Exit Script
End If
エラー処理 [ オフ ]

4) 破壊的操作(削除・一括置換・トランザクション)

ありがち失敗:対象ゼロ・ロック・権限不足で途中停止/データ欠落。
ねらい実行前確認実行後のエラー確認を必ず。

# 例:一括置換の前に件数チェック
If [ Get(FoundCount) = 0 ]
   Show Custom Dialog [ "対象レコードがありません。" ]
   Exit Script
End If

# 実行前に警告
Show Custom Dialog [ "見つかった " & Get(FoundCount) & " 件を置換します。よろしいですか?" ; ボタン: OK/キャンセル ]
If [ Get(LastMessageChoice) ≠ 1 ]
   Exit Script
End If

エラー処理 [ オン ]
フィールド内容の置換 [ テーブル::項目 ; 置換式 ]
If [ Get(LastError) ≠ 0 ]
   Show Custom Dialog [ "置換に失敗しました。権限/ロックをご確認ください。" ]
   エラー処理 [ オフ ]
   Exit Script
End If
エラー処理 [ オフ ]

**取引(疑似トランザクション)**では:

  • 変更前スナップショットを変数退避
  • 途中エラーで元に戻す分岐を用意
  • 最後に Commit Records/Requests の成否も確認

5) 印刷・プレビュー・外部デバイス(プリンタ/ドライバ依存)

ありがち失敗:プリンタ未設定・ドライバ不調で標準ダイアログ。
ねらい:静かに失敗検知→ユーザーに具体アドバイス。

エラー処理 [ オン ]
印刷設定 [ ダイアログ:オフ ; 既定プリンタ/オプション ]
レコードを印刷 [ ダイアログ:オフ ]
If [ Get(LastError) ≠ 0 ]
   Show Custom Dialog [ "印刷に失敗しました。プリンターの電源/接続/既定設定をご確認ください。" ]
   エラー処理 [ オフ ]
   Exit Script
End If
エラー処理 [ オフ ]

使い方のコツ(超実務メモ)

  • ONは“必要な区間だけ”:ON→(危険操作)→判定→OFF。スクリプト全体にべた掛けはNG。
  • 必ず Get(LastError) を即チェック:別の手順を挟むと値が上書きされます。
    • 必要なら Set Variable [ $err ; Get(LastError) ] で退避。
  • ユーザ向けメッセージは具体的に
    「ファイルが見つからない」「権限不足」「ネット不通」「タイムアウト」など原因別。
  • ログを残す:エラー時は時刻・ユーザー・処理名・$err・詳細をログテーブルに 新規レコード
  • 戻し方を決めておく:破壊的操作は“取り消し”戦略(バックアップ、スナップショット、再実行手順)を準備。

逆に「エラー処理[オン]が不要」な例

  • レイアウト切替、単純な変数/フィールド代入、UIナビゲーションなど失敗可能性が小さい箇所。
  • ただし権限が絡む画面遷移や外部ファイル参照が入るならONを検討。