Claris FileMaker における「サーバー上のスクリプト実行」のデバッグ方法

「サーバー上のスクリプト実行」とは

「サーバー上のスクリプト実行」スクリプトステップは、指定したスクリプトを FileMaker Pro ではなく、FileMaker Server Script Engine (以下 FMSE) が実行します。この方法は、多くの場合で FileMaker Pro でスクリプトを実行するよりも速く結果を得られます。また、FileMaker Server Admin Console の「スクリプトと検証スケジュール」で設定したスケジュールスクリプトも FMSE で実行されます。

サーバー上のスクリプト実行時のデバッグ

通常、スクリプトを作成しテストする際にはスクリプトデバッガを使用してデバッグを行います。スクリプトデバッガでは、スクリプトを1行ずつ、あるいは指定した行で一時停止するなど、確認しながらスクリプトを検証できます。しかし、「サーバー上のスクリプト実行」では、スクリプトデバッガを開いていてもデバッグできません。

それでも、スクリプトデバッガを使わずにデバッグを行う方法はいくつか存在します。以下では、注意すべきポイントと対処法、そして具体的なデバッグ方法をご紹介します。

注意すべきポイントと対処法

デバッグの方法を知る前に「サーバー上のスクリプト実行」の注意点を見ていきます。

スクリプトトリガ「OnFirstWindowOpen」

「サーバー上のスクリプト実行」でスクリプトを実行すると、最初にそのファイルに設定された「OnFirstWindowOpen」のスクリプトが実行されます。このスクリプトで時間がかかるような処理をしている場合は、「サーバー上のスクリプト実行」でスクリプトを実行する際に、その箇所をスキップすると良いでしょう。

同様に、「サーバー上のスクリプト実行」で実行されたスクリプトが終了するときにも「OnLastWindowClose」で設定されたスクリプトが実行されます。

起動時のレイアウト

「サーバー上のスクリプト実行」でスクリプトを実行すると、最初に表示されるレイアウトは、ファイルオプションの「表示するレイアウト」に設定されたレイアウトになります。設定されていなければ、ファイルを FileMaker Server にアップロードしたときに、最後に開いていたレイアウトになります。

この特性を理解せずに「サーバー上のスクリプト実行」を実行すると、意図しないレイアウトでスクリプトが実行されることになり、想定外の事象が発生する確率が高くなります。そのため、「サーバー上のスクリプト実行」でスクリプトを実行する場合は、まずスクリプトの冒頭で、想定しているレイアウトに移動するようにしましょう。

「サーバー上のスクリプト実行」スクリプトステップが使用できないケース

「サーバー上のスクリプト実行」スクリプトステップで実行しているスクリプトから、再度「サーバー上のスクリプト実行」スクリプトステップは使用できません。その場合は、「スクリプト実行」スクリプトステップを使用しましょう。

グローバルフィールド・グローバル変数

「サーバー上のスクリプト実行」で実行されたスクリプト内で設定された、グローバルフィールドの値とグローバル変数は、呼び出し元のスクリプトなどでは使用できません。これは、呼び出し元のユーザと FMSE は異なるアカウントとして扱われるためです。

グローバルフィールドやグローバル変数を呼び出し元のスクリプトで使用する場合は、スクリプトの結果として呼び出し元スクリプトに渡すようにしましょう。

互換性

「サーバー上のスクリプト実行」に限らず、互換性の製品が「FileMaker Server」のところのサポートが「いいえ」になっている場合は使用できません。この場合は、別の機能を使うようにしましょう。

FileMaker ヘルプページ
カスタムダイアログを表示 より

「終了するまで待つ」オプション

「終了するまで待つ」オプションをオンにすると、呼び出し元のスクリプトは、「サーバー上のスクリプト実行」で呼び出したスクリプトが終わるまで待ちます。この時、「サーバー上のスクリプト実行」で呼び出されたスクリプトに設定されたスクリプトの結果は、呼び出し元スクリプトで、Get ( スクリプトの結果 ) 関数で取得できます。

一方、「終了するまで待つ」オプションがオフの場合は、スクリプトが終了するまで待ちませんし、スクリプトの結果も取得できません。スクリプトの終了を待つ必要がある場合やスクリプトの結果が欲しい場合は、必ずこのオプションはオンにしましょう。

FileMaker 2023 から追加された「コールバックを使用してサーバー上のスクリプト実行」では、このオプションはオフと同じ状態といえます。

詳細はこちらをご参照ください。

無限ループ

「サーバー上のスクリプト実行」で実行されたスクリプトが無限ループの状態に陥ると、ユーザはスクリプトを終了することができません。
このような場合は、FileMaker Server Admin Console から FMSE のユーザを接続解除することで、スクリプトの強制終了をすることができます。

Get ( 最終エラー ) 関数

「サーバー上のスクリプト実行」で実行されたスクリプト内で発生したエラーは、状況によっては、呼び出し元のスクリプトで取得することもできます。
例えば、エラー発生後そのまま、「現在のスクリプト終了」のスクリプトステップでスクリプトを終わった場合です。

もし「レコード/検索条件確定」でエラーがあったときは、呼び出し元スクリプトで Get ( 最終エラー ) 関数でエラーを取得することができます。

しかし、エラー発生後にエラー番号を変数に設定し、その変数をスクリプトの結果に設定するように修正した場合、状況が変わることがあります。
下のスクリプトの場合は、3行目の「変数を設定」のスクリプトステップが成功し、エラーがクリアされるため、呼び出し元で Get ( 最終エラー ) 関数でエラーを取得することはできません。(「if」 や 「現在のスクリプト終了」は最終エラーがクリアされません。)

このように、状況に応じてエラーが取得できなくなる可能性があるので、基本的には「サーバー上のスクリプト実行」で実行されたスクリプト内で発生したエラーは、スクリプトの結果で受け取るようにしましょう。

デバッグ方法

注意点を確認したところで、具体的なデバッグ方法を3つご紹介します。

  1. FileMaker Server Admin Console のログを確認する
  2. スクリプトの結果を見て判断する
  3. 自前のログを残す

それぞれ詳しく見ていきます。

FileMaker Server Admin Console のログを確認する

FMSE が実行したスクリプトでエラーが発生した場合、FileMaker Server 2023 以降なら「scriptEvent.log」、FileMaker Server 2023 より前のバージョンなら 「Event.log」に記録されます。

scriptEvent.log (Event.log) には以下の内容が記録されます。

タイムスタンプ
FileMaker のエラーコード
エラーメッセージ
   ・ファイル名
   ・スクリプト名
   ・行数
   ・スクリプトステップ
   ・アカウント名
   ・FikeMaker noエラーコード

ログの内容を確認すると、どこでどのようなエラーが発生しているかがわかりますので、原因を調べましょう。

FileMaker 2023 からの新機能として、「エラーログ設定」のスクリプトステップが FileMaker Server でも利用可能になりました。これにより、Admin Console で「FMSEScriptErrors.log」という名前のログファイルが確認できるようになりました。
このログでも、サーバー上でのスクリプトエラーを確認できます。

ただし、サーバー上実行のスクリプトでは、この「エラーログ設定」はオンでもオフでも scriptEvent.log にエラーのログは記録されます。そのため「エラーログ設定」は、普段はエラーログを自動記録してくれない環境(Pro / Go / バージョン 2024(21) 以上の WebDirect と Data API)で便利なスクリプトステップと言えます。

スクリプトの結果を見て判断する

「サーバー上のスクリプト実行」で設定したスクリプトに、「現在のスクリプト終了」のスクリプトステップを設定し、「テキスト結果」に確認したい値を設定します。

例えば、「サーバー上のスクリプト実行」で設定したスクリプト内でなにか計算をしたとして、その計算結果を、「現在のスクリプト終了」の「テキスト結果」に設定します。そして呼び出し元のスクリプトで「Get(スクリプトの結果)」関数を使えば、計算結果を確認することができます。

この方法では、FileMaker Server Admin Console のログでは確認できない、エラーではない情報を確認することができます。「テキスト結果」に設定する値は、設定・取得の容易さから、JSON 形式をおすすめします。

自前のログを残す

FileMaker Server Admin Console のログを確認する方法では、エラーの情報しか取得できません。スクリプトの結果を見て判断する方法では、スクリプト終了時の情報しか取得できません。
自前のログを残す方法は、エラーでなくても、スクリプトの途中で開発者が任意で情報を設定できます。

例えば、「FileMaker Server Admin Console のログを確認する」の方法でなにかしらのエラーを確認したが、その時のフィールドの値や変数の値などがわからない、というような場合に有効です。
そのような時に、自前のログを作成し、確認したいフィールドや変数の値をログに書き込むことによって、エラーの発生原因がわかるかもしれません。

こちらのログについても、「スクリプトの結果を見て判断する」と同様に JSON 形式をおすすめします。

まとめ

具体的な方法を3つ紹介しましたが、場合によって使い分けることによって、「サーバー上のスクリプト実行」で実行したスクリプトのデバッグが可能になると思います。「サーバー上のスクリプト実行」のデバッグにお悩みの方は、是非お試しください。