FileMaker 17 -「カスタムダイアログを表示」の入力フィールドに変数を使う

FileMaker 17がリリースされ、新機能を紹介する記事がいっせいに公開されました。
今回は私がずっと欲しいと思っていた新機能を解説したLuminFireのShawnさんの記事を紹介します。


LuminFire

FileMaker 17 – Variables for Show Custom Dialog input fields

(元記事はこちら)

Shawn A. Krueger
2018/5/15

今週、FileMaker 17がリリースされました。LuminFireでは私たちのお気に入りの機能を紹介する一連のブログ記事を書きましたので、他の記事もぜひチェックし、最新ニュースを見逃さないよう我々のブログページを参照してください。

今回紹介する機能は「羊の皮をかぶったオオカミ」とでも呼べるものです。これは小さな変更のように見えるかもしれませんが、FileMakerでのコードの書き方を一歩前進させる、大きなインパクトを持っています。それはカスタムダイアログを表示スクリプトステップの機能の拡張で、ユーザ入力フィールドに変数を指定できるようになりました。Hooray!(やったー)

「カスタムダイアログを表示」スクリプトステップ

まず復習のため、「カスタムダイアログを表示」スクリプトステップでは、ダイアログボックスにユーザに向けた情報を表示し、スクリプトを分岐させるための入力をユーザに求めます。『きみならどうする?』(分岐するストーリーを選択しながら読み進むゲームブックシリーズ)のFileMaker版だと考えてください。ボタンを3つまで指定でき、その選択肢に基づいて異なるアクションを実行することができます。「[カスタムダイアログを表示]のオプション」ウインドウの[一般]タブは以下のとおりです。

カスタムダイアログオプションを表示する

ユーザに対しては、以下のようなダイアログが表示されます。
FileMakerカスタムダイアログGet( 最終メッセージ選択 )関数を使って、ユーザが1, 2, 3のボタンのどれをクリックしたかどうかを検出します。オプション設定の画面では、上から下に順にリストされ、ボタン1は「デフォルトボタン」と表示され、カスタムダイアログには、標準ユーザインターフェイスのデザインパターンに従って、右から左の順にボタンが表示されます。これは国やロケールによって異なる場合があります。以下に、ユーザのボタンの選択に基づいた、スクリプトの分岐の基本的な例を示します。

FileMakerスクリプトの分岐

OK、それで何が変わったの?

まだ触れていないオプション設定画面がもう一つあります。[入力フィールド]タブでは、ボタンクリックよりも詳細な入力をユーザに求めることができます。ここではユーザがデータを入力するためのフィールドを3つまで指定できます。従来は、そのデータを取得するためにはフィールドが必要でした。それが便利な場合もときにはあります。ユーザに対して質問をして、カスタムダイアログを使ってフィールドに直接データを入力させることができます。これは、対象のフィールドが現在のレイアウトで表示あるいは編集できない場合、またはスクリプトの流れの都合でユーザが通常のデータ入力レイアウトから離れてしまう場合に、有効です。しかし、求めているものをフィールドに入れる必要がない場合はどうでしょうか? あるいはデータをフィールドに入れる前に、スクリプトでデータ検証やデータの加工を行う必要がある場合はどうでしょうか? 標準的な回避策は、ユーザの入力を取得するために、一時的にデータを保持する場所としてグローバルフィールドを使用する方法です。これがFileMaker 17では、代わりに変数を指定できるようになりました。

これは、チェックボックスをクリックして入力フィールドを表示するか、[指定…]ボタンをクリックすると表示されます。

FileMaker 17 - カスタムダイアログの入力フィールドを表示するための変数

今後も必要な場合はフィールドを選択できますが、新たに変数を指定することもできるようになりました。入力用のフィールドと同じように、スクリプト内で変数にすでに値が設定されている場合、その値が入った状態でフィールドが表示されます。以下は、事前に変数に値が設定されている場合にダイアログがどう表示されるかを示します。

FileMaker 17 - カスタムダイアログを表示するための変数入力フィールド1

この機能をなぜ今すぐ使うべきか

まず最初に思いつくメリットは、スクリプトでユーザに入力させる目的のためだけにグローバルフィールドを定義してデータベーススキーマを汚す必要がなくなることです。しかし、もう1つの利点はそれよりもはるかに影響が大きいものです。カスタムダイアログを使用するスクリプトが可搬モジュール化されるのです! スクリプトのためにフィールドを一つ追加することは大したことではないかもしれませんが、それはスクリプトがコンテキストに依存することを意味します。そのコードを別のファイルで再利用しようとしてスクリプトをコピー&ペーストした場合、同じ名前のテーブルとフィールドがそのファイルにない場合に問題が生じます。

LuminFireでは、コードをできる限り可搬モジュールとして使えるように書くことにしています。あるクライアントのカスタムAppで作業していて、以前に他のクライアントのために作成した部品が必要になるという場面は、いくらでもあります。そのときに車輪を再発明するのに時間を費やすよりは、他のファイルからコードを借用することで、次の課題を解決することに取りかかれます。

留意点

  • 指定できる変数は、ローカル変数($var)とグローバル変数($$var)のどちらも可です。ローカル変数のスコープは現在のスクリプト内に限られます。グローバル変数は、現在のスクリプトが終了しても保持されます。
  • 「[カスタムダイアログを表示]のオプション」の各ボタンにはデータを確定というチェックボックスがあります。これはデータがフィールドまたは変数にコミットされるかどうかを制御します。ボタンのチェックボックスが有効になっていない場合には、ユーザが入力フィールドにデータを入力してボタンをクリックしても、データはレコードにコミットされたり変数に格納されません。

ユーザーが入力する値を保存する場所を気にするよりも、ビジネスの実践に集中したい方は、私たち優れた開発者にビジネスに必要なカスタムAppの構築をおまかせください。お問い合わせはこちらから。

Leave a Reply