FileMaker Advent Calendar 2015の14日目
「FMC2Goスケジューラーにおけるレスポンシブ・デザイン」の続き
前回のFMC2Goスケジューラーにおけるレスポンシブ・デザインの続きです
引き続き「OnFirstWindowOpen」イベントに設定されている「OnOpen」スクリプトを見ていく
「OnOpen」というスクリプトは、なにをしている?
グローバル変数「$$device」を設定する
グローバル変数「$$device」に
Desktop
という値を設定している
Let ( [
// set $$debug to "iPhone" or "iPad" to spoof the device type on a desktop machine; set to 1 to help troubleshoot on-device; set to empty to disable debug mode.
$$debug = ""
] ;
Case (
PatternCount ( Get ( アプリケーションバージョン ) ; "Go_iPad" ) or $$debug = "iPad" ;
"iPad" ;
PatternCount ( Get ( アプリケーションバージョン ) ; "Go" ) or $$debug = "iPhone" ;
"iPhone or iPod Touch" ;
"Desktop"
)
)
まずLet関数でグローバル変数「$$debug」を設定しているようだ
グローバル変数はファイル内にある計算式またはスクリプト、たとえば他のスクリプトやファイルパスなどで使用できます。グローバル変数の値はファイルが閉じられるときに消去されます。
このグローバル変数「$$debug」に値を設定することでPC環境でも
- 「iPad」を設定するとiPad
- 「iPhone」を設定するとiPhone、 iPod Touch
を使った時の動作を確認(デバッグ)できるようだ
FileMakerPro Advanced版では「データビューア」を使って変数の値を書き換えることができるので、その機能のないFileMakerProでも確認できるように実装されているのでしょう
ここではPatternCount関数を使って判定を行っているようだ
Get ( アプリケーションバージョン )関数で取得したものに
- 「Go」が含まれていたらiPhoneかiPod Touchで動作している
- 「Go_iPad」が含まれていたらiPadで動作している
- いずれにも当てはまらなければPCで動作している
としているようだ
PatternCount関数
目的
テキストに、検索テキストで指定された文字列がいくつ含まれているのかを返します。
構文
PatternCount ( テキスト ; 検索テキスト )
同じスクリプトの中で、値に「Go」なり「Go_iPad」なりが含まれているかの判定に
- Left関数+Position関数を使ったアプローチ
- PatternCount関数を使ったアプローチ
の両方を使って実装されているのは、このソリューションの作成者がスクリプト実装のお手本としても使わせようとしている意図でしょうか
もしかして各地で読書会ならぬスクリプト分析会が行われているのでしょうか?
まだまだ「OnOpen」スクリプトは続くが、レスポンシブ・デザインに絡みそうな部分はここまでのようなので、ここまでにしておく
「OnOpen」スクリプトで定義したグローバル変数はどう使われているか
ソリューションには各機能について
と
のレイアウトが定義されている
※このソリューションではPCはiPad用のレイアウトを使用している
レイアウト名の末尾がiPhoneとiPadになっている同じ機能のレイアウトが用意されているのがミソ
ソリューションが開かれた時に「OnOpen」スクリプトを実行することで、いくつかのグローバル変数を定義し値を保存している
そのグローバル変数の値を基にレイアウトの切り替えを行うことで適切なレイアウトへのナビゲートを実現している
あるスクリプトの例
グローバル変数「$$device」を基にレイアウトを特定するためのローカル変数「$suffix」を設定
遷移先として指定されたレイアウトにローカル変数「$suffix」を結合して存在するレイアウト名に読み替えをする
グローバル変数「$$device」から直接切り替えるレイアウトを決める
いままで書いてきたような方法で各デバイスに最適なレイアウトの選択(=レスポンシブ・デザイン)を実現している