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を上げた際、表示・非表示の状態が変わってしまう可能性がありますので、しっかり確認しておきましょう。