FileMakerのスクリプトトリガ(更新版)

2014年に訳したSoliant Consultingのスクリプトトリガに関する記事の後、Ver. 16までカバーした更新版の記事が書かれていたので紹介します。Ver. 17, 18ではスクリプトトリガ関連の機能追加はなかったので、これが現状での最新版ということになるかと思います。


FileMaker 14 Script Triggers

(元記事はこちら)

Mislav Kos
2015/5/12

スクリプトトリガはコンセプトは単純ですが、それぞれについて多くの詳細を学ぶ必要があります。この記事では、これらの情報をより簡単かつ効果的に学習できるよう整理するために、いくつかの異なる観点で分類しました。

過去の経緯

FileMaker 7以前

FileMaker 7

FileMaker 10

FileMaker 10

FileMaker 11

FileMaker 11

FileMaker 12

FileMaker 12

FileMaker 13

FileMaker 13

FileMaker 14

FileMaker 14

トリガの分類

スクリプトトリガは、ファイル(file)、ウィンドウ(window)、レイアウト(layout)、オブジェクト(object)の4つのレベルのいずれかで設定されます。

5つのファイル(file)レベルのトリガは次のとおり。

  • OnFirstWindowOpen, OnWindowOpen
  • OnWindowClose, OnLastWindowClose
  • OnFileAVPlayerChange

唯一のウィンドウ(window)レベルのトリガは次のとおり。

  • OnTimer

12のレイアウト(layout)レベルのトリガは次のとおり。

  • OnLayoutEnter, OnLayoutExit
  • OnModeEnter, OnModeExit
  • OnViewChange
  • OnRecordLoad, OnRecordCommit, OnRecordRevert
  • OnLayoutSizeChange
  • OnLayoutKeystroke
  • OnGestureTap
  • OnExternalCommandReceived

8つのオブジェクト(object)レベルのトリガは次のとおり。

  • OnObjectEnter, OnObjectExit
  • OnObjectKeystroke
  • OnObjectModify
  • OnObjectSave
  • OnObjectValidate
  • OnPanelSwitch
  • OnObjectAVPlayerChange

OnTimerトリガは、他のスクリプトトリガとは異なり、スクリプトステップとしてインストール(および削除)されます。他のすべてのトリガは、「スクリプトトリガ設定」ダイアログで設定されます。ファイルレベルのトリガは、「ファイルオプション」ダイアログの「スクリプトトリガ」タブで設定します。レイアウトおよびオブジェクトトリガは、レイアウトモードで、そのレイアウトまたはオブジェクトの属性として設定されます。

スクリプトトリガの起動順

単一のアクションで複数のイベントがトリガされると、それらは次の図に示す順序で処理されます。

スクリプトトリガーシーケンス

トリガが起動する順序にはルールがあります:

  1. 最初に、インターフェイス要素へ入ります(enter)。これは、ウィンドウ→レイアウト→モード→ビュー→レコード→オブジェクトの順で発生します。
  2. 次は、レイアウト上のオブジェクトとのやりとりです。たとえば、ユーザが何かを入力したり、スクリプトがデータを変更したりする、などです。これらのスクリプトトリガはオブジェクトとやりとりを行います。
    • ただし、いくつかの例外があります。OnLayoutSizeChange, OnLayoutKeystroke, OnGestureTap, OnExternalCommandReceivedは、レイアウトレベルのトリガで、OnFileAVPlayerChangeはファイルレベルのトリガです。
  3. アクションは、インターフェイス要素から出ること(exit)で完了します。これは入る時とは逆に、オブジェクト→レコード→ビュー→モード→レイアウト→ウィンドウの順に行われます。

上記の順序とは異なるように見える場合があります。たとえば、OnObjectExitトリガが設定されたテキストフィールドで入力を行い、その後でOnPanelSwitchトリガが設定されたタブコントロールオブジェクトをクリックすると、OnPanelSwitchはOnObjectExitの後に起動します。しかしこれは、以前にアクティブだったオブジェクト(テキストフィールド)が、新しくアクティブになったオブジェクト(タブコントロール)がオブジェクトレベルの一連のトリガ(この場合はOnPanelSwitchを含む)を呼び出す前に、オブジェクトレベルの一連のトリガ(この場合はOnObjectExitを含む)を完了するからです。

図に示されている順序は重要ですが、すべての場合に当てはまるわけではありません。たとえば、OnGestureTapは、OnLayoutSizeChangeではなくOnLayoutKeystrokeの後に表示されていますが、これらのイベントの両方が発生する可能性はないので、この部分の順序は重要ではありません。

トリガイベントのキャンセル(イベントの前または後)

スクリプトトリガには、トリガイベントの前に処理されるものと、その後に処理されものがあります。たとえば、フィールドをクリックすると、フォーカスがフィールドに入り、OnObjectEnterトリガが起動します。これは、イベント後のトリガと呼ばれます。ただし、フィールド外をクリックすると、OnObjectExitトリガはイベント前のトリガであるため、フォーカスがフィールドから出る前に起動します。

FileMakerでは、どのトリガがイベント前であるかを知ることが重要です。というのも、Falseでスクリプトを終了することにより、これらのトリガのトリガイベントをキャンセルできるからです。上の例では、OnObjectExitトリガによって呼び出されたスクリプトをExit [False]で終了すると、ユーザはフィールドから出ること(exit)ができません。これはたとえば、無効な値が入力された場合に役立ちます。

ただしどんなルールにも例外はあります。OnObjectSaveトリガはイベント後トリガであり、FileMakerはトリガイベントをキャンセルできます。ただし、イベントがキャンセルされても、オブジェクトの値は保存されます。これを説明するのに一つの例が役立つかもしれません。OnObjectSaveトリガが設定されたフィールドの値を変更するとします。次に、フィールドの外をクリックすると、トリガが起動し、falseで終了します。これにより、フィールドから出ることができなくなります。ただし、フィールド値に加えた変更は保存されます。

FileMaker 14の新機能

FileMaker 14では、3つの新しいスクリプトトリガが導入されました。

  • OnObjectAVPlayerChange
  • OnFileAVPlayerChange
  • OnExternalCommandReceived

これらのトリガはiOS専用で、iOS AV Playerを使用してオーディオ、ビデオ、イメージメディアが再生/一時停止/停止されたときに何が起こるかを制御する機能を開発者に提供します。

OnObjectAVPlayerChange

OnObjectAVPlayerChangeトリガは、オブジェクトフィールドに設定します。オブジェクトフィールドに保存されている画像、音声、ビデオが再生されるとき、および再生が一時停止または停止されるときに起動します。再生が全画面表示かオブジェクトフィールドに埋め込まれているか、メディア変更イベント(再生/一時停止/停止)がユーザまたはスクリプトによって開始されたかどうかに関係なく、起動します。

メディアの再生は、次の3つの新しいスクリプトステップを使用してスクリプト化できます。

  • AVPlayer 再生 – URLまたはオブジェクトフィールドからオーディオ、ビデオ、画像を再生します(レイアウト上に存在するかどうかにかかわらず)
  • AVPlayer 再生状態設定 – 再生中または一時停止中のメディアファイルの再生を一時停止/再開/停止します
  • AVPlayer オプション設定 – 再生中または一時停止中のメディアファイルの設定(全画面か埋め込みか、など)を変更します

開発者は、以下の新しい関数を使用して再生状態を決定できます。

  • GetAVPlayerAttribute (属性名) – FileMaker 13で導入されたGetContainerAttribute (フィールド ; 属性名)関数と同じように動作します

メディアの再生は、コンテナオブジェクトに埋め込まれているか、全画面で実行されます。オーディオまたはビデオメディアの再生中に、ユーザはピンチアウトしてプレーヤを全画面で表示したり、ピンチインして全画面表示を終了できます。再生が埋め込まれている場合、ユーザはピンチインでプレーヤを停止し、ダブルタップで再生と一時停止を切り替えることができます。

OnFileAVPlayerChange

OnFileAVPlayerChangeトリガはファイルに設定します。上記の新しいスクリプトステップを使用すると、オブジェクトフィールドに保存されたメディアまたはURLからストリーミングされたメディアの再生を、そのフィールドまたはWebビューアを現在のレイアウトに表示せずにスクリプト化できます。このトリガは、スクリプトステップがメディアを再生/一時停止/停止したとき、またはオーディオまたはビデオが終わりに達してメディアが自動的に停止したときに起動します。

注: 上記の新しいスクリプトステップと新しい関数(OnObjectAVPlayerChangeの項)は、OnFileAVPlayerChangeスクリプトトリガでも同様に使用可能です。

OnExternalCommandReceived

OnExternalCommandReceivedトリガはレイアウトに設定します。ユーザが外部のAV関連コントロールを押して、次のコマンドのいずれかを実行したときに起動します。

  • 再生/一時停止/停止
  • 再生/一時停止を切り替え
  • 次のメディアを再生、前のメディアを再生
  • 前方または後方への検索を開始または終了

開発者は、新しい Get (トリガ外部イベント)関数 を使用して、どの外部コマンドが押されたかを検知することができます。

外部制御の例は次のとおり。

  • EarPodボタン
  • 外部Bluetoothキーボードのメディアコントロールキー
  • iOSロック画面のコントロール
  • iOSコントロールパネルのコントロール(画面の下部から上にスワイプしてアクセス)

このトリガは、AVプレーヤがアクティブでない場合でも起動することに注意してください。たとえば、コントロールパネルの再生ボタンをタップすると、その時点でオーディオやビデオを再生していなくても、このトリガが起動します。

OnGestureTap

FileMaker 14では、3つの新しいスクリプトトリガの追加に加えて、OnGestureTapの動作が変更されました。このスクリプトトリガは、FileMaker 13ではiOS専用でしたが、Windows 8タッチデバイスでもサポートされるようになりました。サポートされているジェスチャは次のとおりです。

  • 1本、2本、3本指でのシングルタップ(iOS)
  • 1本指でのダブルタップする(iOS)
  • 2本指でのシングルタップ(Windows 8)

FileMaker 14は、他のデバイスでのピンチズームなどのジェスチャーもサポートしています。たとえばMacBookでは、トラックパッドをつまんで拡大/縮小ができます。ただし、これらのジェスチャーはOnGestureTapトリガを起動しません。

リファレンスPDFおよび検証用デモファイル

今回の概要は以上です。より完全なリファレンスとして、我々がまとめたPDFドキュメントをご覧ください。また、添付デモファイルを使ってスクリプトトリガの動作を実際に確認してください。デモファイルには、レイアウトにあらゆるタイプのフィールドとオブジェクトが配置されています。ファイル、レイアウト、各オブジェクトには、可能なかぎりすべてのスクリプトトリガが設定されています。3つのクライアント(Pro、WebDirect、Go)を使用してファイルにアクセスし、各クライアントでスクリプトトリガがどのように機能するか確認してください。

PDFとデモファイルをダウンロード

デモファイル

デモファイル

デモファイルのOnFileAVPlayerChangeのテストに関する注意:
デモファイルでトリガが起動されるたびに、ダイアログが表示されます。ビデオが全画面で再生されている場合、ダイアログが再生を停止します。したがって、OnFileAVPlayerChangeトリガをテストする場合は、事前にtoggleボタンをタップしてトリガメッセージの表示を無効にし、次に Play From Fieldボタンをタップしてください。ビデオの一時停止/再開/停止を試してみてください。次に、Historyボタンをタップして、OnFileAVPlayerChangeトリガがいつどのように発生したかを確認してください。

チートシート
カンニングペーパー

FileMaker 15以降

FileMaker 15および16では、新しいスクリプトトリガは導入されませんでした。ただしFileMaker 16には、特に言っておくべき変更が1つあります。「 領域監視スクリプトを構成 」ステップを使用すれば、iOSデバイスがある領域に出入りするときにスクリプトを実行できます。この方法は「OnTimerスクリプトのインストール」ステップに似ています。同じようにこのステップでは、あるイベントに基づいてスクリプトを実行できます。

Leave a Reply