実務で「エラー処理[オン](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を検討。
