「次の場合にオブジェクトを隠す」の条件式をコメント化しても無効にできない?

, ,

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にするだけで良いという点が、「次の場合にオブジェクトを隠す」と動きが異なる要因だと思われます。