以前の記事「バーチャルリストで目次を生成する」の中で、裏技的にスクリプトを動的に名前で指定して実行する方法を紹介しましたが、FileMaker 17ではこれが”正式な”機能として取り込まれました。今回はこの新機能を解説したSkeleton KeyのJay Sayersさんの記事を紹介します。
FileMaker 17: Perform Script by Name
(元記事はこちら)
Jay Sayers
2018/5/15
FileMakerデベロッパーは今まで、”名前で”フィールドにアクセスしたり、値を設定したり、ファイルを参照したりすることができました。FileMaker 17で追加された[スクリプトを名前で実行]スクリプトステップは、開発者が再利用可能で動的なコードを作成するために使用できる多くの改善点の1つに過ぎません。この新機能が日々のコーディングの方法を劇的に変えることはありませんが、それがFileMakerのスイスアーミーナイフに追加されたこと、およびその取り出し方を知っておくことは重要です。
“ハードコード”されたスクリプトの歴史
デベロッパーは、ボタン、スクリプトトリガ、サブスクリプトを、FileMaker Pro Advancedのスクリプトが存在する最初から、スクリプトにハードコーディングして関連付けてきました。スクリプトをハードコーディングする場合、FileMakerは内部的にはスクリプトをIDで関連付けて管理します。このリンクの挙動によって、スクリプトの名前が変更された後でもFileMakerアプリケーションを正常に動作させることができます。右のGIFアニメーションは、スクリプトの名前を変更してもFileMaker Proがそのまま機能を維持できることを示しています。
[スクリプトを名前で実行]の歴史
FileMakerスクリプトを”名前で”実行するという考え方は全く新しいものではありません。以前のバージョンでもこれを行う方法がいくつかありました。
FMP URLプロトコル
適切にURLを構成することで、スクリプトを名前で実行することができます。URLを開くことができる状況(電子メールメッセージ、ブラウザのアドレスバー、Webページ、FileMaker ProまたはGoのWebViewer内)であればどこからでも、FileMaker Pro Advancedファイルで特定のスクリプトを起動できます。
カスタムWeb公開 (API for PHP/XML)
FileMakerのカスタムWeb公開(CWP)では、当初から、スクリプトを名前で実行することができました。デベロッパーは、上記のFMP URLプロトコルの例と似た方法でコードを組み立てることができます。
FileMaker 17 スクリプトをリストから実行
デフォルトでは、FileMaker 17の[スクリプト実行]スクリプトステップは、以前のバージョンと同じように動作しますが、見た目が少し異なります。[スクリプト実行]スクリプトステップがスクリプトに追加されると、デフォルトでは従来のスクリプトを選択する画面になりますが、新しく[指定: 一覧から]と表示されるようになりました。FileMaker 17は [指定: 一覧から] (または [指定: 名前で])と表示し、空の場合でも常にスクリプト引数の入力フィールドを表示します。
FileMaker 17 スクリプトを名前で実行
新しいスクリプトステップでは”名前で”というオプションが追加されました。デベロッパーは、FileMakerの計算ウィンドウを使用してスクリプト名を指定します。スクリプト名は、文字列、フィールドの値、ローカル変数、グローバル変数、Get( スクリプト引数 )の戻り値から取得することができます。JSONetElementを使用して、JSONオブジェクトから実行するスクリプトの名前を抽出することも可能です。
外部ファイルに存在するスクリプトを”名前で”実行するには、<FileName>::<ScriptName>という特別な構文で記述する必要があります。右の図は、この使い方の例を示しています。
[サーバー上のスクリプト実行(PSoS)]の変更点
[スクリプト実行]スクリプトステップについての説明は、すべて[サーバー上のスクリプト実行(PSoS)]スクリプトステップにもあてはまります。PSoSスクリプトも”名前で”または”一覧から”指定することができます。エラー104 スクリプトが見つかりません
エラー104はバージョン17からの新しいものではなく、またいくつかの理由で発生する可能性があります。スクリプトが削除されている場合、あるいは[スクリプトを”名前で”実行]で定義した値がスペルミスや構文エラーの場合があります。その値が、存在しないスクリプトを参照したか、単に名前が変更された場合もあります。
スクリプトステップで、”名前で”何かを参照する、または値を設定するときは、慎重な計画とエラー処理が必要です。FileMaker Pro Advanced 17の[スクリプトを”名前で”実行]スクリプトも同じです。エラー104は、FileMaker Pro Advancedが指定された名前でスクリプトを見つけることができない場合に発生します。したがって、スクリプトの名前をつけたり変更したりする際に注意が必要です。
このセクションのサンプルのアニメーションは、スクリプトを名前で呼び出すボタンを使用しています。ボタンがまず “Original Name”という名前のスクリプトを正常に呼び出します。スクリプトが「Still remember me? (まだ覚えてる?)」という名前に変更された後、ボタンは機能しなくなります。前のアニメーションでは、ボタンにハードコードされたスクリプトの名称を変更した場合はFileMaker Pro Advancedが自動的にスクリプトを”修正”したのに対して、このサンプルは対照的です。
ユースケース
以下は、Skeleton Keyで議論された[スクリプトを名前で実行]の使い方に関する提案です。
- 自己参照の[サーバー上のスクリプト実行(PSoS)]スクリプトステップ。Skeleton Keyでの背景を少し説明します。[サーバー上のスクリプト実行]で実行できるスクリプトを記述するときに、条件式で環境とプラットフォームをチェックする数行のコードを入れておく。実行するPSoSスクリプト名としてGet ( スクリプト名 ) を使用することで、時間を節約し、精度を向上させることができる。
- スクリプト名のリストをループする。複数の[スクリプト実行]ステップをハードコードする代わりに、スクリプト引数で渡される可能性のあるスクリプト名のリスト(可能性としてはJSONオブジェクトとしてフォーマットされたもの)を処理することも可能。
- スクリプト作成前のレイアウト設計。FileMaker 16以前では、あるプロジェクトから別のプロジェクトにレイアウトオブジェクトとスクリプトをコピーするときに、FileMakerデベロッパーは通常まずスクリプトを貼り付け、次にレイアウトオブジェクトを貼り付ける。この順番は、レイアウトボタンを実行するスクリプトに接続したままにするために必要。FileMaker Pro Advanced 17で、レイアウトに配置したボタンが[スクリプトを名前で実行]を使用する場合、レイアウト要素がスクリプトより前に評価される。これはボタンがクリックされたりスクリプトがトリガされるときに評価されるスクリプトの名前が関連付けられているため。これにより、すべてのプロジェクトで直ちに将来的にプログラミングに対するアプローチが変わるということはない。
その他のアイデアやユースケースについて、 FileMakerコミュニティのWebサイトの「製品のアイデア」で徹底した議論がされています。
次のステップ
[スクリプトを名前で実行]は、常に使う、あるいは、常に使わない、というものではありません。それがFileMaker Pro Advancedのいいところで、デベロッパーに選択肢を与えてくれます。アプリケーションの要件と開発アプローチをじっくり時間をかけて定義するようにしてください。スクリプトを動的に呼び出す必要が本当にありますか?スクリプトの名前を変更した場合に、それを自動的に追跡してくれるFileMaker Pro Advancedの機能を放棄しますか?ご自身で実験して、FileMakerの世界を楽しんでください!
Jay Sayersはアメリカ ミズーリ州セントルイスのSkeleton Keyに所属するFileMaker 16認定デベロッパーです。