作成日:2025年01月20日
FileMakerでフィールド名を直接書いて失敗した話


どうも、にゃん太です
計算式などでフィールド名を参照する場合は多いですが、同じような感じで使用していると問題が発生する事があります
今回のメモでは、何も考えずに作業して失敗した事例を書いていきます
フィールド名を参照した計算式
FileMakerでアプリ開発を行う場合、内部に保存されたデータを参照して計算を行う事はあたりまえにあります
例えば、商品価格から税込金額を算出する場合に次の様に記述します
スクリプト
フィールド設定 [税込金額; Int ( 商品価格 * 1.1 )]
「商品価格」というフィールドを参照して計算を行う単純な式です
こうして計算式を作成した後で、「税込金額」に対して「商品価格」では分かりにくいからと「税抜金額」にフィールド名を変えたとします
この場合、FileMakerは自動的に計算式を変更してくれます
スクリプト
フィールド設定 [税込金額; Int ( 税抜金額 * 1.1 )]
その為、開発者はフィールド名の変更を気軽に行う事ができます
フィールド名変更が問題になる場合
しかし、フィールド名の変更が常に問題なく行える訳ではありません
スクリプト
変数を設定 [$商品コード; 値: "100001"] 変数を設定 [$商品価格; 値: ExecuteSQL ( "SELECT \"商品価格\" FROM \"商品マスタ\" WHERE \"商品コード\"=?"; ""; ""; $商品コード )] カスタムダイアログを表示 [$商品価格]
例えばこんな計算式の場合ではフィールド名がテキストとして扱われているため、フィールド名の変更が自動反映されません
そのため正しく動作しなくなってしまい、上記の例では「?」がダイアログに表示される結果となります
同様の事が「FileMaker Data APIを実行」や「フィールドを名前で設定」を使用する場合に発生します
フィールド名変更への対策
こうした場合への対策として、フィールド名をGetFieldName関数で取得する方法があります
スクリプト
変数を設定 [$フィールド名; 値: GetFieldName ( 商品マスタ::商品価格 )]
こんな計算式であれば計算式内のフィールド名は参照となっているため、フィールド名の変更を行っても自動で変更を反映してくれます
これを踏まえて先ほどの処理を変更してみます
スクリプト
変数を設定 [$商品コード; 値: "100001"] 変数を設定 [$フィールド名1; 値: GetValue ( Substitute ( GetFieldName ( 商品マスタ::商品価格 ); "::"; ¶ ); 2 )] 変数を設定 [$フィールド名2; 値: GetValue ( Substitute ( GetFieldName ( 商品マスタ::商品コード ); "::"; ¶ ); 2 )] 変数を設定 [$商品価格; 値: ExecuteSQL ( "SELECT \"" & $フィールド名1 & "\" FROM \"商品マスタ\" WHERE \"" & $フィールド名2 & "\"=?"; ""; ""; $商品コード )] カスタムダイアログを表示 [$商品価格]
これでフィールド名の変更による問題は解決ですね
その他の名称問題
今回、フィールド名の変更による問題だけを書きましたが、他にもテーブル名、レイアウト名、ファイル名も使用する場合があります
個人的には、自ファイルからインポートを行う場合にファイル名を直接記述してトラブルになってしまう場合が多いでしょうか
記述量が増えるためについつい疎かにしがちではありますが、後々のリスク回避のために意識して対応していきましょう

以上で今日のメモ書きは終了です
内容はいかがでしたか?
もしご意見やご要望、誤りの指摘などありましたら、下記フォームよりお気軽にご連絡ください