FileMaker カンファレンス 2019 の様子を 全3回 全5回 に分けてお伝えする連載レポート。弊社がお届けしたセッション、コンテンツを、当日のTwitter実況も振り返りつつまとめています。第3回は11/7と11/8に行われた「BaseElements スペシャルミーティング」についてご報告いたします。
BaseElements スペシャルミーティング
スピーカー
Nicholas Orr
オーストラリアを拠点としたFileMaker プラットフォームのコンサルティング会社である GOYA のCEOにして BaseElements の生みの親。
Shin Ninagawa
株式会社スプラッシュ代表取締役。
今日もアバター画像は 前回の記事 にて詳しく紹介しています。
から。…ついに人間じゃなくなってしまった。怒られませんように。elementalあの、ごく僅かですけど、お席ありますので、スペシャルミーティングD会場へどうぞどうぞ
— 株式会社スプラッシュ (@splashjp) November 7, 2019
2days で挙がった質問まとめ
- 条件付き書式で計算式で使用されているフィールドは探せる?
- オブジェクト名をつけてないタブコントロールはどうやって探すの?
- 間接参照されているフィールド、レイアウト、スクリプトなどはどうやって見つける?
- レイアウトオブジェクトに設定されたタブ順を見つけるには?
- 複数のファイルで、テーブル名、レイアウト名などが重複する場合混ざっちゃう可能性はないの?
- 分離モデルで複数のファイルに設定されている外部データソースを一覧で見るには?
- そもそもBaseElementsってどんな設計なの?
- ローカルで動かしていると落ちることがある。サーバーで動かす方が良い?
- ExecuteSQL関数で使用されているフィールドを調べることはできる?
既にBaseElementsを利用しているユーザさんが多い印象。それだけに突っ込んだ質問が沢山飛び交っていました。その中から1つ、ご紹介したいと思います。
間接参照されているフィールド、レイアウト、スクリプトなどはどうやって見つける?
両日で共通していた質問でした。
FileMakerでスクリプトや計算式を作成する時、フィールドやレイアウトを一覧から選んで設定します。そのようにして設定した項目は「直接参照」としてDDRに載ります。直接参照しあっている項目同士は, BaseElementsでは関連レコードに移動して行き来し調べることができます。しかし、例外的に項目を「名前」つまりテキストで指定できる場合があります。例えばこんなスクリプトステップを使用した場合です。
- [フィールドを名前で設定]ステップ
- [レイアウト切り替え] ステップで切り替え先のレイアウトを計算式で指定
- [スクリプト実行] ステップで実行するスクリプトをのレイアウトを名前で指定
このような場合BaseElementsでは参照とはみなしません。
BaaseElementsでは、どこからも直接参照されていない項目を「参照されていない」としてマークし、検索できるようになっています。そして検出された項目については、例えばフィールドだった場合は以下のような警告を表示します。
警告の通り、直接参照はないのですが間接的に参照されていた場合はこの項目を削除してしまうと知らないうちに機能が壊れてしまってバグが発生します。こわいですね。
疑わしい場合は、削除せずに残しておくのがもっとも安全ですが、結果として何も削除できず使用しない項目がどんどん溜まっていくのも困ります。できれば削除したいですよね。
では、このような項目が「間接参照」されているかどうかを探すにはどうするか。探し方は一つではありません。
例: “typeLocation” というフィールドが間接参照されているかどうか調べる
[フィールドを名前で設定] では、フィールド名にテーブルオカレンスをつけた「完全修飾フィールド名」を使用します。つまり、
"テーブルオカレンス名::フィールド名"
という形になっているはずです。
そこで
“::typeLocation” というキーワードをクイックサーチ(fmSearchResult)にかけて 横断検索してみると…
全部で48件のスクリプトステップがヒットしました。
一覧に移動してヒットしたスクリプトステップを見ていくと…
このような形で、間接的に参照されていました。(注: このDDRには “typeLocation” という名前のフィールドは1つしかありません。)
探したい項目がフィールドなのか、レイアウト名なのか、スクリプトなのか…それによっても探し方は様々ですが、色々と試行錯誤すれば探し方がなんとなく掴めてきます。
ちなみにこれは完全に余談ですが、
このような計算式になっていて、さらにここで使われている変数 $FieldName が
FieldList(FieldListFieldNames ( Get(ファイル名) ; Get(レイアウト名) ) ;
$n )
このような計算式で宣言されている場合、どこにも固定的なフィールド名の手がかりがありません。これを知らずにフィールドを削除したらバグまっしぐらです。怖い…。
今回いただいた質問については、利用方法の動画やWebセミナーなどでも掘り下げて解説していきたいと思います。
すごく良い質問が目白押し!
例えば、Q:タブ順って #BaseElements でわかるの?
➡️A:わからないのです。なぜならDDRにはその情報は無いからー!— 株式会社スプラッシュ (@splashjp) November 7, 2019
本日はここまで!次回 は 「G-26 そしてクラウドへ…..速度を落とさず移行するための実践テクニック」の内容についてレポート予定です。