第50話 スクリプトの使い方

エヌ・ケイ・カスタマイズの沖田です

今回で、このNKC-StaffBlogも50話を迎えることとなりました。今後100話、200話と続けていきたいと思っております。何事も「継続は力なり」で取り組んでいきます!

さて前回は、スクリプトの作成方法について学んでいきました。
では、実際にどのようなところから、作成したスクリプトを使用していくのか。。。
スクリプトを割り当てることができる対象はいくつかあります。

・ボタン
・トリガ
・メニュー
・スクリプト

ボタンからのスクリプト

レイアウトオブジェクトの「ボタン」は、これまでにも何度か作成してきました。ブラウズモードでユーザがボタンをクリックすると割り当てられた処理が実行されます。ボタンによる処理の実行は最もわかりやすい実行方法です。そして単一ステップを割り当てできるのはボタンだけです。

ボタンとしてスクリプトを割り当てることができるものが他にもあります。

・ フィールド
・ ボタン以外の線や四角、テキストなどのグラフィックオブジェクト

ボタン以外にもボタン設定が可能

グラフィックオブジェクトとは
レイアウト上に、線、長方形、角丸長方形、楕円を描いたり、テキストを直接入力して配置することが可能です。項目を囲ったり、線で分けたりしてわかりやすいレイアウト作成に使用します。

グラフィックオブジェクトツール

設定方法
(1) [書式]-[ボタン設定]メニュー(または右クリックで[ボタン設定])を選択します。
(2) [ボタン設定]ダイアログが表示されます。
   ・スクリプトステップを直接1 つだけ割り当てる場合は「単一ステップ」を選択
   ・用意されたスクリプトを実行する場合は「スクリプト実行」を選択

[ボタン設定]ダイアログ

 ボタンに単一ステップを設定していたけれど、それだけでは足りないなと思ったら、単一ステップでの処理をスクリプトに変換して内容を編集できます。FileMaker Pro Advanced には、スクリプト作成の思考をスムーズに反映できる便利な仕組みが用意されています。

作成したボタンの設定を変更するには、ボタンオブジェクトをダブルクリックするなどして[ボタン設定]ダイアログを表示します。

(1) 「タスク一覧」レイアウトでレイアウトモードに切り替えます。

(2) ボタンをつくります。

(3) [ボタン設定]ダイアログを設定します。
  a. ボタン名は「新規タスク」とします。
  b. [何もしない]をクリックしてプルダウンから「スクリプト実行」を選択します。
  c. [スクリプトの指定]で「新規タスク作成」スクリプトを選択します。
  d. [OK]ボタンをクリックします。

ボタンにスクリプトを割り当て

(4) レイアウトを保存してブラウズモードに戻り、ボタンを押して、スクリプト通りに動作するかを確認します。

スクリプトトリガから

ボタンをクリックではなく、『あるきっかけ』でスクリプトを実行する仕組みのことを「スクリプトトリガ」と呼びます。ボタンやスクリプトメニューの場合、ユーザが任意のタイミングで操作しますが、トリガはユーザが意識していなくても指定したイベントが発生するとスクリプトが実行されます。


トリガとして指定可能なイベントがたくさん用意されています。例えば、レイアウトの切り替えやレコードの移動などです。主に設定するのは3 箇所です。

 ・ファイルのスクリプトトリガ
 ・レイアウトのスクリプトトリガ
 ・レイアウトオブジェクトのスクリプトトリガ

ファイルのスクリプトトリガ
 ファイルを開いたり閉じたりするタイミングでスクリプトを実行します。詳細は以下に記載します。
  ・OnFirstWindowOpen: ファイルの最初のウインドウが開かれた後に実行される
  ・OnLastWindowClose: ファイルの最後のウインドウが閉じられる前に実行される
  ・OnWindowOpen: ウインドウが開かれた後に実行される
  ・OnWindowClose: ウインドウが閉じられる前に実行される
  ・OnFileAVPlayerChange: フィールドまたはURLのAV Player状態を変更したときに実行される

 設定方法
 [ファイル]-[ファイルオプション]メニューを選択し[スクリプトトリガ]タブで設定します。 

ファイルのスクリプトトリガ

レイアウトのスクリプトトリガ
 レイアウトの移動、レコードの移動・確定、モードの切り替え時に使用します。詳細は以下に記載します。
  ・OnRecordLoad: レイアウトにおいて現在のレコードが切り替わった後に実行される
  ・OnRecordCommit: レイアウト上でレコード変更の確定が行われた際に実行される
  ・OnRecordRevert: レイアウト上でレコード復帰の確定が行われた後に実行される
  ・OnLayoutKeystroke: レイアウトまたはこのレイアウト上のオブジェクトでキー入力が行われ、OnObjectKeystrokeスクリプトトリガで処理が行われない際に実行される。
  ・OnLayoutEnter: レイアウトがロードされた後に実行される
  ・OnLayoutExit: レイアウトから移動する際に実行される
  ・OnLayoutSizeChange: レイアウトのサイズ変更後に実行される
  ・OnModeEnter: レイアウト上で新しいモードに切り替えた後に実行される
  ・OnModeExit: レイアウト上で現在のモードから移動する際に実行される
  ・OnViewChange: レイアウトでフォーム形式、リスト形式、表形式に切り替えた後に実行される
  ・OnGestureTap: レイアウトでタップジェスチャが受信されたときに実行される
  ・OnExternalCommandReceived: 外部コマンドが受信されたときに実行される

 設定方法
 レイアウトモードで、[レイアウト]-[レイアウト設定]メニューを選択し[スクリプトトリガ]タブで設定します。

レイアウトのスクリプトトリガ

レイアウトオブジェクトのスクリプトトリガ
次のようなタイミングでスクリプトを実行します。
 ・ レイアウト上のフィールドやタブコントロール、ボタンなどのオブジェクトがアクティブになる
 ・ キーボード入力、値の変更などユーザのアクションによる細かなきっかけ
詳細は以下に記載します。
 ・OnObjectEnter: 選択したオブジェクトがアクティブな状態になった後に実行される
 ・OnObjectKeystroke: 選択したオブジェクトがアクティブな状態でキー入力が行われた際に実行される
 ・OnObjectModify: 選択したオブジェクトがアクティブな状態で内容が変更された後に実行される
 ・OnObjectValidate: 選択したオブジェクトから移動する際に行われる入力値の検証の前に実行される
 ・OnObjectSave: 選択したオブジェクトがアクティブな状態で入力値の検証が行われ保存された後に実行される
 ・OnObjectExit: 選択したオブジェクトから移動する際に実行される
 ・OnPanelSwitch: パネルコントロールがパネルを変える場合にスクリプトが実行される
 ・OnObjectAVplayerChange: レイアウトオブジェクトのAVPlayer状態を変更したときにスクリプトが実行される

 設定方法
 レイアウトモードで対象のレイアウトオブジェクトを選択してから[書式]-[スクリプトトリガ設定]メニューを選択して設定します。

レイアウトオブジェクトのスクリプトトリガ

  ※OnPanelSwitchが非アクティブなのは、このイベントがパネルコントロール(タブコントロールとスライドコントロール)用のイベントに対応しているトリガだからです。

スクリプトメニューから
[スクリプト]メニューから実行するスクリプトを選択します。[スクリプト]メニューに表示する/しないは[スクリプトワークスペース]で指定します。

スクリプトメニューからのスクリプト


 ※参考(ショートカット機能)
 FileMaker Pro Advanced では[スクリプト]メニューに表示する最初の10 個のスクリプトには自動でキーボードショートカットが割り当てられます([command +数字(1 ~ 0)(macOS) または[Ctrl +数字(1 ~ 0)](Windows))

スクリプトから
スクリプトからスクリプトを実行することが可能です。[スクリプト実行]スクリプトステップは、スクリプトを実行するためのものです。
 ※スクリプト内からスクリプトを実行する際に、実行される(呼びされれる)スクリプトを「サブスクリプト」と呼びます

 例えば、用紙設定などの常に「決まった処理をおこなう機能」を他のスクリプトと共用して利用する場合に複数のスクリプトを組み合わせて使うことができます。

その他
他にもFileMaker Server のスケジュールからのスクリプト、カスタムメニューからのスクリプトなど、いくつかスクリプトを指定できる箇所があります。

今回は、スクリプトの使い方について記載しました。まずはメインとなるボタンからのスクリプトから学んでいき、Appを開発する上でスクリプトトリガなど使用する機会も出てくると思います。
初めから不具合なくAppが開発できることはありませんので、いろいろとテストをして、最終的に、不具合のないAppを目指していきましょう!
次回もよろしくお願いします。

Follow me!