本コラムで何回か取りあげてきたFX_Fuzzy_Debugger。FX_Fuzzy_Debugger.phpをインクルードして定数「DEBUG_FUZZY」を定義することで有効になる、便利なデバッグ機能。エラーの内容によって、実在するレイアウト名やフィールド名、ファイル名をチェックし、どこが違うかを提案してくれる。「○○が見つからない」エラーで悩むデベロッパを救ってくれる、強い味方だ。

FX_Fuzzy_Debuggerで補足できるエラー

FX.php version 4.5より同梱されるようになったFX_Fuzzy_Debugger。FX_Fuzzy_Debugger.phpをインクルードして定数「DEBUG_FUZZY」を定義することで有効になる、便利なデバッグ機能。エラーの内容によって、実在するレイアウト名やフィールド名、ファイル名をチェックし、どこが違うかを提案してくれる。FileMakerエラー102や105で苦戦しているデベロッパの強い味方だ。

FX_Fuzzy_DebuggerはまずWeb公開エンジンから返るFileMakerエラーコードをチェックし、エラー番号に対応して、実在する各種レイアウト/フィールド名/ファイル名を取得する。そして実際にWeb公開エンジンにリクエストしたクエリ内容と比較をし、類似したキーワードがあればそれを提案する仕組みになっている。FX_Fuzzy_Debuggerが補足できるエラーを紹介しよう。

FileMakerエラー 102: フィールドが見つかりません (Field is missing)

指定されたレイアウト内に、指定したフィールドが配置されていない場合に返るエラー。デバッグ時のlastDebugMessageは次のとおり。

Double check the spelling of the fields specified, and be sure they're on the layout specified.
Also, be sure that the user name and password combination specified has permission to access the specified fields.

デベロッパはフィールド名のスペリングミスと、使用しているアカウント(SetDBUserPassのユーザ名/パスワードの組み合わせ)のアクセス権が該当フィールドに割りあてられているかを確認する。

このエラーの場合、FX_Fuzzy_Debuggerはレイアウトに配置されているフィールドの一覧を取得する(view_layout_objects)。この結果とFX.phpで生成されたクエリを比較し、類似するものがあれば、そのフィールド名を表示する。

指定されたフィールド名と実際に配置されているフィールドを比較。近いフィールド名があれば提案してくれる

FileMakerエラー 105: レイアウトが見つかりません (Layout is missing)

指定されたファイル内に、指定したレイアウトが存在しない場合に返るエラー。デバッグ時のlastDebugMessageは次のとおり。

Be sure that the user name and password combination specified has permission to access "(レイアウト名)".

デベロッパはレイアウト名のスペリングミスと、使用しているアカウント(SetDBUserPassのユーザ名/パスワードの組み合わせ)のアクセス権が該当レイアウトに割りあてられているかを確認する。

このエラーの場合、FX_Fuzzy_Debuggerはファイルに存在するレイアウトの一覧を取得する(view_layout_names)。この結果とFX.phpで生成されたクエリを比較し、類似するものがあれば、そのレイアウト名を表示する。

指定されたレイアウト名と実際のレイアウトを比較。類似するレイアウト名があればそれを表示。ない場合はアクセス権の設定を疑おう

FileMakerエラー 401: 検索条件に一致するレコードがありません (No records match the request)

検索条件に該当するレコードが見つからない場合に返るエラー。デバッグ時のlastDebugMessageは次のとおり。

This is a simple "No Records Found" error. Most likely, you just need to add trapping for situations where no records are found.

デバッグメッセージのとおり、レコードが見つからなかった場合のエラー処理を追加するだけで良いだろう。

FileMakerエラー 802: ファイルを開くことができません (Unable to open file)

指定されたファイル内が開いていない場合に返るエラー。デバッグ時のlastDebugMessageは次のとおり。

Be sure that you've specified the correct FileMaker Server address, that the server is running, and that the database specified is spelled correctly.
Also, be sure that the credentials used have proper extended permissions associated with them.

デベロッパはファイル名のスペリングミス、FileMaker Serverのアドレス、指定しているファイルが開いているかどうかを確認する。

このエラーの場合、FX_Fuzzy_DebuggerはFileMakerサーバ上で公開されているファイルの一覧を取得する(view_database_names)。「公開されているファイル」なので、ファイル破損やバックアップの失敗が原因で閉じてしまったファイルは候補に挙がってこないので注意されたい。

指定されたファイル名と実際に公開されているファイルを比較。近いファイル名があれば提案してくれる。候補が見つからなかった場合は、「実際にそのファイルが開いているかどうか」「ファイルのパーミッション」周りの設定を疑おう

このほかのエラーで良い解決策やデバッグ方法が浮かんだら、FX_Fuzzy_Debugger.phpのProcessErrorCode関数まわりの処理を修正してみよう。