「次の場合にオブジェクトを隠す」の仕様変更について

, , , , , ,

FileMaker Ver13~16と、17の違い

FileMakerのVer13で登場した「次の場合にオブジェクトを隠す」は、条件式を満たす場合に該当オブジェクトを非表示にする機能です。
「条件を満たすまでボタンを押されたくない」「権限のある人にだけ値を見せたい」といった仕様を実現することができます。

 

その「次の場合にオブジェクトを隠す」機能の仕様が、Ver17から下記のように変わりました。
「条件式がエラーと評価された場合、オブジェクトは必ず非表示になる」
では、Ver16以前はエラーを含む場合でも表示されていたのかというと、必ずしもそうではありません。

 

様々なエラーを含む条件式を設定し、Ver16(以前)とVer17とで動きを確認してみましょう。

サンプルファイル: hide_object.fmp12

 

準備

「sample」テーブルを作成し、「Field1」「Field2」という名前のフィールドを作成します。

リレーションシップグラフで、「sample 2」「sample 3」というテーブルオカレンスを作成します。

sampleテーブルオカレンスを紐づけたレイアウトを作成し、ボタンオブジェクトを7つ配置します。
それぞれのボタンの「次の場合にオブジェクトを隠す」に、条件式を入力します。

A.sample::Field2

B.sample 2::Field1

C.sample 3::Field1

D.(1/0)

E.(1/0) = 2

F.(1/0) ≠ "?"

G.(1/0) = "?"

sampleテーブルからField2フィールドを削除します。

リレーションシップグラフからsample 3テーブルオカレンスを削除します。

 

結果

Ver16以前

Ver17

 

1.式内のフィールドが参照できない場合(A,B,C)

フィールドを削除した場合や、現在のレイアウトから参照できないテーブルオカレンスを参照している場合など。
Ver17では非表示なのですが、16以前では隠されません。

 

2.式全体がエラーとなる場合(D)

例えば条件式を「1/0」(ゼロ除算)とすると、式はエラーとなります。
この場合、Ver17でもVer16以前でもオブジェクトは非表示となります。

 

3.式の一部にエラーを含む場合1(E,F,G)

条件式を「(1/0) = 2」とすると、左辺がエラーとなります。
式にエラーを含んでいますので、Ver17ではオブジェクトは非表示となります。
一方Ver16以前ですが、左辺は"?"を返します。
その結果、「"?" = 2」という式になります。
この式は成立しないため、式全体としてはFalse(偽)を返します。
その結果、オブジェクトは隠されません。
どちらも非表示となりますが、その過程が異なるのです。

では、「(1/0) ≠ "?"」という条件式だとどうなるでしょうか。
もちろんVer17では非表示となります。
Ver16以前では「"?" ≠ "?"」となり、式全体としてはFalse(偽)を返します。
その結果、オブジェクトは隠されません。

さらに「(1/0) = "?"」の場合。
Ver17では非表示。
Ver16以前では「"?" = "?"」となり、式全体としてはTrue(真)。よってオブジェクトは隠されます。

 

まとめ

  削除したフィールドを参照 他のリレーショングループを参照 削除したテーブルオカレンスを参照 1/0 (1/0)=2 (1/0)≠"?" (1/0)="?"
Ver.17 非表示 非表示 非表示 非表示 非表示 非表示 非表示
Ver.13~16 表示 表示 表示 非表示(※1) 表示 表示 非表示(※2)

※1:式全体がエラーのため ※2:式が成立するため

 
こうしてみると、Ver16以前の判定はややこしく感じますね。
Ver17でスッキリ整理された、ということになるかと思います。

なお、既存のFileMakerファイルのVerを上げた際、表示・非表示の状態が変わってしまう可能性がありますので、しっかり確認しておきましょう。