次の場合にオブジェクトを隠す
今回は皆さんもよく使われているであろう「次の場合にオブジェクトを隠す」設定について書きたいと思います。
まずは簡単に「次の場合にオブジェクトを隠す」の説明から。
インスペクタのデータタブのこの部分です。
ここに入力した計算式の結果がTrueになれば「非表示」、Falseになれば「表示」されます。
例えば配置したフィールドの値が空の場合は表示したくない、という場合には
IsEmpty ( フィールド )
というように条件式を指定すれば、そのフィールドの値が空の場合に計算結果はTrueなので「非表示」となります。
FileMaker 17より仕様が一部変更
この「次の場合にオブジェクトを隠す」にFileMaker17より仕様変更がありました。
FileMakerのホームページに以下の内容が明示されています。
FileMaker Pro 17 Advanced リリースノート
- [次の場合にオブジェクトを隠す] インスペクタオプションの計算式でエラーと評価された場合、オブジェクトは非表示になります。
バージョン16までは計算式がエラーと評価される「?」の結果を返すとこれはFalseと同じなので「表示」になります。もしくは If ( X = “?” ;・・・など結果を考慮したIF文によって表示・非表示させることができました。
ところがバージョン17の場合には計算式の中に「?」を返す式があると、「常に非表示」になってしまいます。
問題となる例
代表的な例として以下のような計算式が考えられます。
GetNthRecord ( 日付 ; Get ( レコード番号 ) – 1 ) = 日付
これはリスト形式で自分の上の行の日付が自分の日付と同じだったら表示しない、
という場合に設定するものです。
下記画像のように売上明細をリスト形式で表示するとき、上のレコードと同じ日付の場合は表示を消して見やすくするためのものです。
この計算式の場合、1行目のレコードの表示・非表示がFileMaker17と16以前のバージョンで挙動が変わります。
GetNthRecord ( 日付 ; Get ( レコード番号 ) – 1 )
部分が1レコード目の場合のみ計算式の結果が「?」(エラー)となります。(自分より上に位置するレコードが無いため)
例えば1レコード目の日付が「2019/02/07」だった場合は次のようになります。
- バージョン16まで:「2019/02/07」と「?」の比較の結果はFalseとなり、「表示」となります。
- バージョン17:計算式の結果は関係なく、「 GetNthRecord ( 日付 ; Get ( レコード番号 ) – 1 ) 」の評価が「?」(エラー)となるため「非表示」となります。
注意すべき計算式
GetNthRecordだけでなく、ExecuteSQL、Evaluate、JSON関数など計算式の結果として「?」(エラー) を返す可能性がある関数、また設定した後でフィールドやテーブルオカレンスを削除して <見つかりません::見つかりません>のままになっている場合、「次の場合にオブジェクトを隠す」の計算式に使っている場合は注意が必要です。
この仕様変更はとても影響範囲が広いにもかかわらずあまり知られていないようです。
これを見たあなたが、もしこの話を初めて聞いたという場合には今お使いのカスタムAPPの
次の場合にオブジェクトを隠す
の設定をご確認いただくことをオススメします。
【 開発者募集中 】
弊社では FileMaker を使った高度な技術力で、モバイルデバイスのビジネス利用を楽しく発展させていく仲間を随時募集しています。詳しくは採用ページをご覧ください。