[FileMaker] GetFieldNameを無視してフィールドからフルフィールドをゲット

FileMaker 小ネタです。 GetFieldName という関数がありまして、フィールド名からフルフィールド名を返す関数ですが、未だかつてこれがまともに動作したことがない。GetFieldName は封印して別のやり方でゲットします。

動かないGetFieldName 関数

昔 GetFieldName 関数を初めて知ったときは「なんと便利な関数があるもんだ」と小躍りして喜びましたが、この関数、ただの一度もまともに動作したことがありません。

説明では「参照されているフィールドの完全修飾名を返します」ということですが、常に結果が「?」になります。使い物になりません。

ヘルプでは次のような例が掲載されています。

例1. GetFieldName (x) は、引数 x としてカスタム関数に渡されたフィールド参照の名前を返します。

例2.GetFieldName (Evaluate (<フィールド名>)) は、<フィールド名> に保存されているデータに基づいてフィールドの名前を返します。

例3.GetFieldName (Evaluate (Get (アクティブフィールド名))) は、実行された場合にフォーカスの対象となるフィールドの完全修飾名を返します。

https://help.claris.com/ja/pro-help/content/getfieldname.html?Highlight=getfieldname

イミフ日本語。最大関門であるEvaluateと組み合わされているもんだからますますイミフ。がんばって何度も読んで試してみましたが、やはり期待通りに動作せず「?」になります。

それで、フィールド名からフルフィールド名をゲットする方法として GetFieldName をなかったものとして封印、別のやり方で凌いできました。

その方法は後ほど記しますが、その前に謎の GetFieldName について、Claris の記述を発見したのでスッキリしたという話をしておきます。

どうやら関数の不出来でした。

たまたま偶然めぐりあったページがこれです。すべての謎が解けました。

アクティブフィールドが関連テーブルからのものである場合、計算式 GetFieldName (Evaluate (Get (アクティブフィールド名))) は “?” を返す – Claris

「問題」としてこう書かれています。

アクティブフィールドが関連テーブルからのものである場合、計算式 GetFieldName (Evaluate (Get (アクティブフィールド名))) は “?” を返します。

別に「GetFieldName (Evaluate (Get (アクティブフィールド名)))」に限らず、あらゆる「GetFieldName() 」で「?」ですけどね。

問題に対する「説明」はこうなっています。

Claris International Inc. はこの問題を認識しています。

おお。問題として認識しておられますよ。ただし「説明」は以上、解決策はありません。

別テーブルのフィールドでは機能しない

私はこれまで、GetFieldName関数を使おうとするとき、100%の確率で異なるテーブルのフィールドを対象にしてきました。だってレイアウトと同じテーブルなら関数なんか使わなくたってフルフィールド名は判りきってますからね。したがって、この関数の不具合に100%ぶち当たっていたというわけです。

これまで、GetFieldName関数の理解が足りていないからだ、Evaluate関数の理解が足りていないからだ、と自分のあほさが原因であろうと思っていましたがそうではなく、ただの関数の不出来でした。己のあほさが原因ではなかったことに少し喜び、そしてスッキリしました。スッキリしたのでこのポスト書いてます。ここが本日メインの話題でした。

GetFieldName関数の代替

そんなわけで、特定フィールドのフルフィールド名が欲しいときどうやって凌いできたかという話ですが。

大抵、フィールド名からフルフィールド名が欲しいのは汎用的なスクリプトを作っていく中で、「アクティブなフィールド」に対してだったりします。

アクティブなフィールドでない場合はごめんなさい。アクティブ限定です。

変数に仕込んでフルフィールド名を得ます。Let関数で書くとこうなります。

Let ( [
 $フィールド名 = Get(アクティブフィールド名) ;
 $テーブル名 = Get(アクティブフィールドテーブル名) ;
 $フルフィールド名 = $テーブル名 & "::" & $フィールド名
] ; "" )

フィールド名とテーブル名をゲットして繋げただけです。実に単純な話で失礼しました。

Penguin icon

あとがき

こないだ良性腫瘍を摘出する手術をやって本日抜糸、最高の医療設備と技術を駆使し数人がかりですったもんだしていただいて命を救われ保険適用でお安く治療、医療費の負担が年々上がってきているとはいえ世界に誇る保険制度、カルト与党とその手下どもはこれをなきものにしようと謀略を練っていますが何としても維持しないといけません。ところで2022年8月18日は京都ソクラテス8月20日は神戸RINKAITENに出演しますので来てください。と関係ない話をとろとろやって本日このへんでごきげんよう。

このエントリーをはてなブックマークに追加

コメント

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください