ファイルメーカー(FileMaker Pro)の スクリプトステップをブラッシュアップするヒント (「Loop」「フィールドで名前を設定する」編)

2013年10月28日 09:24 AM

ファイルメーカーのTips


今回は、ファイルメーカー(FileMaker Pro)の スクリプトステップをブラッシュアップするヒントをご紹介いたします。

同じ動作をファイルメーカーに行わせるにも、様々なスクリプトの書き方がありますが、できるだけシンプルなスクリプトにしたほうが、不具合が起きたときの見直しや追加・修正もずっと楽になります。

スクリプトのステップ数を少なくする鍵は、

同じ動作はまとめる
可変に対応する

等があげられます。

今回は「Loop」ステップと「フィールドで名前を設定する」ステップを使って、スクリプトをブラッシュアップしてみます。

では具体的な例を見てみましょう。
ある集まりの参加者の席順表です。
ファイルには、参加者人数分の12レコードがある「参加者テーブル」と、席順表を表示する1レコードのみの「席テーブル」があります。

01

02

では、参加者リストで入力した席順番号を席順表に反映してみましょう。
参加者リストを席順でソートし、1レコード目から順番に席順表に名前を設定していきます。参加者リストの1レコード目の名前は座席1に、2レコード目の名前は座席2に…と設定します。

以下のようなスクリプトができました。
03
参加者テーブルのデータを席順にソートした後、

変数 $name に参加者テーブル1番目のレコードの名前フィールドの値を設定
レイアウトを 「席(席テーブル)」 に切り替え
席テーブルの 「座席1」フィールドに $name の値を設定
レイアウトを 「参加者(参加者テーブル)」 に切り替え
次のレコードへ移動

以上を12席分実行します。

スクリプトを実行すると、席順が表示されます。

04

上手く作動しました。

今回の例では12人の参加者だけですが、100人の参加者だったらどうでしょう?
ステップ数がものすごい数になって、作成も大変です。

■Loopで共通ステップをまとめてみる

スクリプトを短くするため少し工夫してみましょう。ステップをよく見ると、

「変数を設定」、
「レイアウトを切り替え」
「レコード/検索条件/ページへ移動(次の)」

の3ステップは12人全てに共通なステップです。これを1回しか書かずに済むようにできないでしょうか?
ここで「Loop」ステップを使ってみましょう。

05

「Loop」「End Loop」の間のステップは指定があるまで繰り返されます。
この例では「レコード / 検索条件/ ページへ移動 」ステップで「次の;最後まできたら終了」を設定しているため、参加者リストの1人目のレコードから始まり、最後の12人目のレコードに到達すると繰り返しが終了します。

だいぶステップ数が少なくなりました。しかし、これでも、レコード番号に応じて席に名前を書き込むステップを 「If」 ステップで分岐しているため、100人の参加者がいたら100個の分岐を書かなければなりません。また、参加人数が100人から105人になれば、さらにステップを追加しなければなりません。
人数が何人になっても書き直しの必要がない簡潔なスクリプトにできないでしょうか?

■「フィールドを名前で設定」ステップで可変に対応する

ここで便利なステップが「フィールドを名前で設定」ステップです。
これはFileMaker Pro 10.0から使用できるようになったステップで、フィールド設定の際に設定するフィールドを可変にできます。

このステップを活用できる使い方の一つは、データベース作成時にフィールドの名前を「席順1」「席順2」「席順3」のように共通の文字+数字の形式でつけておき、スクリプトでフィールド内容を設定する、という方法です。

これを使ってスクリプトを書いてみると
06
こんなに短くなりました!
前の例で「If」を使って分岐していた部分はたったの1ステップになっています。

フィールドを名前で設定[“席::座席”&$n;$name]

変数 $nは、参加者リストのレコードが1件ずつ次のレコードに移動して、Loopがまわる毎に1ずつ増えていきます。
$nが1の時は、 “席::座席” & $n の部分が「席::座席1」となり、「席::座席1」フィールドに $name 変数の内容を設定することになります。
同様に$nが2の時は、“席::座席” & $n の部分が「席::座席2」となり、「席::座席2」フィールドに $name 変数の内容を設定。
以下同様で、「席::座席12」までをたった1ステップで設定できるようになりました。

これで人数が増えても、席順テーブルのフィールドだけ増やしていけば、スクリプトを書きなおす必要はありません。

以上のように、便利な「Loop」ステップや「フィールドを名前で設定」ステップですが、注意すべきこともあります。

「Loop」ステップでは、必ずLoopから抜けるタイミングを指定しましょう。抜けるタイミングは以下のいずれかで指定します。
1.「Exit Loop If」ステップで、条件を指定
2.「レコード / 検索条件/ ページへ移動」ステップで「次の;最後まできたら終了」を設定
3.「ポータル内の行へ移動 」ステップで「次の;最後まできたら終了」を設定
指定を忘れると無限ループに入ってしまい、強制終了しなければスクリプトを止めることができなくなることがあります。

また「フィールドを名前で設定」ステップでは、スクリプト作成後にうっかりとフィールド名を変更してしまうと、スクリプトステップが正常に作動しなくなりますので注意しましょう。

以上を参考に、みなさんも自分の作ったスクリプトを見直してみてはいかがでしょうか?