FMC2Goスケジューラーにおけるレスポンシブ・デザイン


[FileMaker Advent Calendar 2015](http://www.adventar.org/calendars/865)の13日目

# FMC2Goスケジューラーにおけるレスポンシブ・デザイン
[参加したFileMakerワークショップの当日のメモと記憶を手繰って復習してみる](http://qiita.com/or2/items/3cd018e23543e8e24bf1)の続き

1つ目のテーマとしてFMC2Goスケジューラーにおいて、どうレイアウトを最適化しているのかを見てみる

## FMC2Goスケジューラーで、なにをしているのか見てみる
まずとっかかりとして[ファイル]−[ファイルオプション]を見てみると、「スプリクトトリガ」で「OnFirstWindowOpen」イベントに「OnOpen」というスクリプトが設定されているのがわかる

![151213-01.png](https://qiita-image-store.s3.amazonaws.com/0/89027/8b6bf9ef-42f4-30a6-c487-033ec16bb19c.png)

[スクリプトトリガの理解と使用](http://filemaker-jp.custhelp.com/app/answers/detail/a_id/9166/~/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%83%88%E3%83%AA%E3%82%AC%E3%81%AE%E7%90%86%E8%A7%A3%E3%81%A8%E4%BD%BF%E7%94%A8)
> OnFirstWindowOpen
ファイルの最初のウインドウが開かれた後でスクリプトをトリガします。

## 「OnOpen」というスクリプトは、なにをしている？
![151213-02.png](https://qiita-image-store.s3.amazonaws.com/0/89027/75cc45c6-0a18-ba27-0a36-b7fadaef5a28.png)

### ウインドウタイトルを設定
単にタイトルをつけているだけのようだ
タイトルをつけないとファイル名である「FMC2Go15」になってしまう

### 「getReleaseInfo」というスクリプトを実行
![151213-03.png](https://qiita-image-store.s3.amazonaws.com/0/89027/f3f3e945-c0f1-0846-3533-186a4e7c592e.png)
改行区切りで「Utility::gDevCon2Go_Version」というフィールドに
15.7
June 30th, 2015
という値を設定して、スクリプトの結果として「Utility::gDevCon2Go_Version」フィールドの内容、つまり
15.7
June 30th, 2015
を返す

### スクリプトの実行結果をローカル変数で受け取る
![151213-04.png](https://qiita-image-store.s3.amazonaws.com/0/89027/2008a8bf-7201-8d2c-e87a-b8fcd13be963.png)
「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関数
> 目的 
一連の条件を元に可能な結果の１つを返します。
構文 
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 ( テキスト ; 文字数 )

とりあえず今日はここまで