FileMakerの計算式の中で、/* */で囲まれた部分はコメントとして扱われます。計算式を/* */で囲んでコメント化すると、ただの文字列とみなされて計算処理は行わません。
ただし、「次の場合にオブジェクトを隠す」に記述した条件式をコメント化する場合は、少し注意が必要です。
1.はじめに (「次の場合にオブジェクトを隠す」とは)
FileMakerでオブジェクトの表示・非表示の設定を行う際は、「次の場合にオブジェクトを隠す」を使用します。ここに真(True)か偽(False)かを返す条件式を記述し、結果が真(True)であれば非表示となります。
例えば、会員レイアウトにおいて、備考フィールドの「次の場合にオブジェクトを隠す」に
IsEmpty ( 会員::氏名 )
と記述すると、氏名フィールドが空の時に真(True)と判定され、備考フィールドが非表示になります。
2.現象
さて、この条件式を一時的に無効にしたい(また使うかもしれないので消さずに残しておきたい)という場合、どうすればよいでしょう。式を/* */で囲ってコメント化する、という方法を思いつくのではないでしょうか。
/*IsEmpty ( 会員::氏名 )*/
確かにこの例の場合、氏名フィールドが空であってもなくても、備考フィールドは表示されるようになります。
ところが、この方法を使っても備考フィールドが表示されないケースがあります。
例えば、条件式が
IsEmpty ( 会員::住所1 )
の場合、これをコメント化して
/*IsEmpty ( 会員::住所1 )*/
としても、住所1フィールドが空かどうかに関わらず、備考フィールドは表示されません。
この違いは一体なんなのでしょうか。
3.原因
実は、先程のように「次の場合にオブジェクトを隠す」の条件式全体をコメント化すると、自動的に" "で囲まれます。つまり、コメントではなくテキストデータとして扱われます。
FileMakerでは、真偽判定の条件式にテキストデータが与えられた場合、この文字列から数字のみを抜き出して判定に利用します。0または空であれば偽(False)、それ以外は真(True)です。
"/*IsEmpty ( 会員::氏名 )*/"
この場合、数字がありませんので、空、すなわち偽(False)と判定されます。
一方、
"/*IsEmpty ( 会員::住所1 )*/"
こちらの場合は、文字列から数字(1)が抜き出され、真(True)と判定されます。そのため、備考フィールドは表示されないのです。
条件式にコメントを記載しているときも注意が必要です。
/* 2022-05-20 氏名未入力時、非表示にする */ IsEmpty ( 会員::氏名 )
この場合、条件式の部分を/* */で囲ってコメント化すると、
"/* 2022-05-20 氏名未入力時、非表示にする */¶ /* IsEmpty ( 会員::氏名 ) */"
のように、1行目のコメント文を含めた全体が" "で囲まれ、テキストデータ扱いとなります。そして、ここから数字(20220520)が抜き出され、真(True)と判定されます。
「次の場合にオブジェクトを隠す」の条件式をコメント化した場合、計算処理は行われませんが、真偽判定が行われないわけではありません。条件式欄に何か書いている限り真偽判定は行われる、ということになります。
4.解決策
一時的にコメント化しておきたい場合は、その前か後ろに False(もしくは0) または True(もしくは 1)を書いておきましょう。
そうするとコメント化した条件式が" "で囲まれることはなく、コメントとして残ります。
/* IsEmpty ( 会員::住所1 ) */ False
5.補足
真偽判定の条件式を記述する場所としては、他にも
・ポータル:「ポータルレコードのフィルタ」
・データベースの管理:「入力値の自動化」の「計算式で制限」
などがありますが、これらは上記内容とは動きが異なります。
これらの条件式は/* */で囲っても、自動的に" "で囲まれることはなく、あくまでコメント文として残ります。その結果、空ではない、つまり真(True)と判断されます。
これらの項目は、条件式の適用・不適用をチェックボックスで制御できます。
一時的に無効にしたい場合も、(わざわざコメント化せずとも)チェックボックスをOFFにするだけで良いという点が、「次の場合にオブジェクトを隠す」と動きが異なる要因だと思われます。