FileMaker Advent Calendar 2015の13日目
FMC2Goスケジューラーにおけるレスポンシブ・デザイン
参加したFileMakerワークショップの当日のメモと記憶を手繰って復習してみるの続き
1つ目のテーマとしてFMC2Goスケジューラーにおいて、どうレイアウトを最適化しているのかを見てみる
FMC2Goスケジューラーで、なにをしているのか見てみる
まずとっかかりとして[ファイル]−[ファイルオプション]を見てみると、「スプリクトトリガ」で「OnFirstWindowOpen」イベントに「OnOpen」というスクリプトが設定されているのがわかる
OnFirstWindowOpen
ファイルの最初のウインドウが開かれた後でスクリプトをトリガします。
「OnOpen」というスクリプトは、なにをしている?
ウインドウタイトルを設定
単にタイトルをつけているだけのようだ
タイトルをつけないとファイル名である「FMC2Go15」になってしまう
「getReleaseInfo」というスクリプトを実行
改行区切りで「Utility::gDevCon2Go_Version」というフィールドに
15.7
June 30th, 2015
という値を設定して、スクリプトの結果として「Utility::gDevCon2Go_Version」フィールドの内容、つまり
15.7
June 30th, 2015
を返す
スクリプトの実行結果をローカル変数で受け取る
「getReleaseInfo」スクリプトの実行結果として返ってきた
15.7
June 30th, 2015
をローカル変数の「$d2g_vers
」と「$d2g_release
」に設定している
Let関数を使うことで1つのスクリプトステップで2つのローカル変数をまとめて処理している
ローカル変数
ローカル変数は現在実行中のスクリプトのスクリプトステップでのみ使用できます。ローカル変数の値はスクリプトの終了時に消去されます。
Let関数
目的
計算式の実行中に、ローカル変数の場合はスクリプトが存在する間、グローバル変数の場合はファイルが閉じられるまで、式X の結果を変数X に設定します。
構文
Let ( {[} 変数1 = 式1 {; 変数2 = 式2...]}; 計算 )
引数
変数 - 任意の変数名、ローカル変数名、グローバル変数名(変数の名前付け規則については、フィールド名の指定を参照してください)
式 = 任意の計算式、フィールド、または定数
計算 = 任意の計算式、フィールド、または定数
中カッコ { } 内の引数はオプションです。
グローバル変数「$$whoami」を設定する
グローバル変数「$$whoami
」に
DevCon2Go v15.7; June 30th, 2015
Application Version: 1401
System Platform: Windows
Device: Desktop
という値を設定している
DevCon2Go v15.7; June 30th, 2015
前段で設定したローカル変数の「$d2g_vers
」と「$d2g_release
」を使って生成されている
Application Version: 1401
Filter ( Get ( アプリケーションバージョン ) ; "0123456789" )
で生成している
Get ( アプリケーションバージョン )関数
目的
FileMaker アプリケーションおよびそのバージョンを表すテキストを返します。
構文
Get ( アプリケーションバージョン )
Get ( アプリケーションバージョン )関数は
- FileMaker Pro の場合、「Pro ( バージョン)」を返します。
- FileMaker Pro Advanced の場合、「ProAdvanced ( バージョン)」を返します。
- FileMaker Runtime の場合、「Runtime ( バージョン)」を返します。
- FileMaker Web Client の場合、「FileMaker Web Publishing ( バージョン)」を返します。
- FileMaker Server Web Client の場合、「Web Publishing Engine (バージョン)」を返します。
- xDBC Client の場合、「xDBC ( バージョン)」を返します。
- FileMaker Server の場合、「Server (バージョン)」を返します。
- FileMaker Go(iPhone または iPod touch)の場合、「Go (バージョン)」を返します。
- FileMaker Go(iPad)の場合、「Go_iPad (バージョン)」を返します。
なのですが、Filter関数で"0123456789"以外の文字をフィルタすることで、今回の環境の場合は「1401」という数字のみのバージョンを取得している
Filter関数
目的
フィルタするテキストから、フィルタテキストで指定した文字のみを、フィルタするテキストに入力されている順序で返します。
構文
Filter ( フィルタするテキスト ; フィルタテキスト )
引数
フィルタするテキスト - テキスト式またはテキストフィールド
フィルタテキスト - 指定されたテキスト内の保持する文字
System Platform: Windows
Case (
Abs ( Get ( システムプラットフォーム ) ) = 1 ; "MacOS" ;
Abs ( Get ( システムプラットフォーム ) ) = 2 ; "Windows" ;
Abs ( Get ( システムプラットフォーム ) ) = 3 ; "iOS" ;
"Unknown" )
で生成している
Get ( システムプラットフォーム )関数
目的
現在のプラットフォームを示す数値を返します。
構文
Get ( システムプラットフォーム )
Get ( システムプラットフォーム )関数が「Windows プラットフォーム」の場合「-2」を返すので
Abs関数
目的
数値の絶対値を返します。
構文
Abs ( 数値 )
を使っている
Case関数
目的
一連の条件を元に可能な結果の1つを返します。
構文
Case ( 条件1 ; 結果1 {; 条件2 ; 結果2 ; ... ; デフォルト値} )
引数
条件 - テキストまたは数値式
結果 - 式に対応する結果
中カッコ { } 内の引数はオプションです。
Device: Desktop
Case (
Left ( Get ( アプリケーションバージョン ) ; Position ( Get ( アプリケーションバージョン ) ; " " ; 1 ; 1 ) -1 ) = "Go" ; "iPhone or iPod Touch" ;
Left ( Get ( アプリケーションバージョン ) ; Position ( Get ( アプリケーションバージョン ) ; " " ; 1 ; 1 ) -1 ) = "Go_iPad" ; "iPad" ;
"Desktop"
)
で生成している
前段でGet ( アプリケーションバージョン )関数はバージョンナンバーの取得に使っていたが、今回はエディションの取得に使っている
Position関数を使って、Get ( アプリケーションバージョン )関数で取得したエディションの1つ目のスペースの前までが
- 「Go」ならiPhoneかiPod Touchで動作している
- 「Go_iPad」ならiPadで動作している
- いずれにも当てはまらなければPCで動作している
としているようだ
Position関数
目的
テキスト内で検索テキストを検索し、指定された回数目の先頭文字位置を返します。
構文
Position ( テキスト ; 検索テキスト ; 先頭文字位置 ; 回数 )
Left関数
目的
テキストの左から、指定した文字数分のテキストを返します。
構文
Left ( テキスト ; 文字数 )
とりあえず今日はここまで