FileMaker Server および FileMaker Cloud でのスクリプトの実行
FileMaker Server および FileMaker Cloud によって共有されるファイルのスクリプトは通常、クライアント上で実行されます。ただし次を使用してスクリプトをサーバー上 (サーバーサイドスクリプト) で実行することができます:
-
クライアントまたはホスト上で実行されるスクリプト内の [サーバー上のスクリプト実行] スクリプトステップ
-
クライアント上で実行されるスクリプト内の [コールバックを使用してサーバー上のスクリプト実行] スクリプトステップ
-
スケジュール (FileMaker Server ヘルプまたは FileMaker Cloud ヘルプを参照してください)
サーバーサイドスクリプトの実行方法の相違
上記の方法のいずれかで起動したスクリプトは、FileMaker Server および FileMaker Cloud のコンポーネントである FileMaker スクリプトエンジン (FMSE) によって実行されます。FMSE は各スクリプトをサーバー上の個別セッションで実行するクライアントです。その結果、サーバーサイドスクリプトは次のように動作します:
-
クライアントのコンテキスト (現在のレイアウト、対象レコード、ソート順、レコード、グローバルフィールドの値、ローカルまたはグローバル変数の値) がありません。
[サーバー上のスクリプト実行] スクリプトステップのスクリプト引数を使用して、クライアントのコンテキストに関する情報をサーバーサイドスクリプトに渡すことができます。サーバーサイドスクリプトは [レイアウト切り替え] スクリプトステップや [検索実行] スクリプトステップのその情報を使用して、処理するレイアウトと対象レコードを指定できます。
-
スクリプト引数とスクリプトの結果は 100 万文字までサポートされます。
-
次の両方が真の場合にだけ他の FileMaker Pro ファイルにアクセスできます:
-
ファイルが同じホスト上にある。
-
サーバーサイドスクリプトを起動したクライアントによってファイルがすでに開かれているか、ファイルの [ファイルオプション] ダイアログボックスで指定したアカウント名とパスワードでファイルが設定されている。
-
次の場合を除き、サーバーサイドスクリプトは起動方法に関係なく同じように実行されます:
-
[サーバー上のスクリプト実行] スクリプトステップを使用するクライアントには、スクリプトがサーバー上で完了するまで待機して Get (スクリプトの結果) 関数を使用して結果を取得するオプションがあります。
-
スケジュールは、実行中のスクリプトが指定の時間制限を超えた場合に終了するように設定できます。
サポートされていないスクリプトステップの処理
多くのスクリプトステップが FMSE でサポートされていますが、サポートされていないスクリプトステップを実行しようとするとエラー 3 (「コマンドが使用できません」) が返され、サポートされていないステップはスキップされて次のステップに進みます。サポートされていないステップを処理するには、スクリプトで [If] スクリプトステップを次の関数とともに使用できます:
-
Get (最終エラー) 関数をステップの後に配置すると、ステップがサポートされているかどうかがチェックされ、サポートされているステップが代わりに実行されます。たとえば、[ファイルを開く] スクリプトステップは FMSE でサポートされていないため、サーバー上で実行する次のスクリプトの例ではそのステップをスキップし「未対応」という結果を返します。
コピーファイルを開く [非表示の状態で開く: オフ ;「請求書バックアップ」]
If [Get (最終エラー) = 3]
現在のスクリプト終了 [テキスト結果: "未対応"]
End If
-
Get (アプリケーションバージョン) 関数を他のステップの前に配置すると、スクリプトが FileMaker Server または FileMaker Cloud 上で実行されているかどうかがチェックされサポートされているステップのみが実行されます。例:
コピーIf [ PatternCount ( Get (アプリケーションバージョン) ; "Server" ) > 0 ]
# FMSE によってサポートされているスクリプトステップに進む
End If
FMSE でサポートされているスクリプトステップを確認するには、FileMaker Pro の [スクリプトワークスペース] でスクリプトを開いて をクリックし、[サーバー] を選択します。サポートされていないスクリプトステップは別の色で表示されます。またスクリプトステップリファレンスの各スクリプトステップの互換性表も参照できます。
サーバー上でスクリプトを実行する理由
-
クライアントとサーバー間のネットワークトラフィック量を減らすことでパフォーマンスを改善する。
-
低速クライアントから高速なサーバーに長時間実行されるタスクをオフロードする。
-
FileMaker Go ではなく FileMaker Server でサポートされているプラグインが必要なタスクを FileMaker Go クライアントで実行可能にする。
-
サーバーの DSN を使用する ODBC データソースとともに [レコードのインポート] または [SQL を実行] スクリプトステップを使用する。
メモ
-
レコードがクライアントによってロックされている場合、サーバーサイドスクリプトは未確定のデータへアクセス、またはレコードの内容を変更することはできません。
-
サーバーサイドスクリプトを実行すると、スクリプトを含むファイルが開閉されます。したがって、スクリプトが起動すると OnFirstWindowOpen スクリプトトリガがアクティブになり、スクリプトが終了すると OnLastWindowClose スクリプトトリガがアクティブになります。
-
サーバーサイドスクリプトは [スクリプト実行] スクリプトステップを使用してサブスクリプト (サブスクリプトも同じ FMSE クライアントセッションで実行される) を実行できます。ただしこれらのサブスクリプトが同じサーバー上のファイル内にある場合に限ります。さらに、別のファイル内のサブスクリプトを実行するスクリプトを実行するためにクライアントが [サーバー上のスクリプト実行] スクリプトステップを使用する場合、サブスクリプトを含むファイルがすでにクライアントによって開かれている必要があります。
サーバーサイドスクリプトは [サーバー上でスクリプトを実行] スクリプトステップも同様に使用できますが、呼び出されたスクリプトは別の FMSE クライアントセッションで実行されます。[終了するまで待つ] オプションは FileMaker Pro クライアントで実行されるスクリプトと同じように機能し、スクリプトの結果またはエラーコードを呼び出し元に渡します (この場合、呼び出し元は FMSE クライアント)。ただし、このオプションをオフにすると、呼び出し元のスクリプトは実行を続行し呼び出されたスクリプトは独自のスレッドで実行されます。
-
サーバーサイドスクリプトは [サーバー上でスクリプトを実行] スクリプトステップも同様に使用できますが、呼び出されたスクリプトは別の FMSE クライアントセッションで実行されます
-
[サーバー上のスクリプト実行] によって実行されるスクリプトはクライアントと同じアカウントを使用します。スケジュールによって実行されるスクリプトは、スケジュールで指定されたアカウントを使用します。
-
サーバーサイドスクリプトでは、スクリプトがクライアントで実行されているときに警告メッセージを FileMaker クライアントに表示させることができないため、サーバーサイドスクリプトは常に、[エラー処理] スクリプトステップがオンに設定されている場合と同様に処理を実行します。エラー状態を処理するには、サーバーサイドスクリプトの Get (最終エラー) 関数を使用します。問題のトラブルシューティングを支援するため、FileMaker Server および FileMaker Cloud のイベントログにもエラーが書き込まれます。
-
クライアントはサーバーサイドスクリプトを停止することはできません。ただし次の場合はサーバーサイドスクリプトを停止することができます:
-
サーバー管理者が、FileMaker Server または FileMaker Cloud の Admin Console で切断可能な個別のクライアントとして表示されるスクリプトを停止した場合
-
実行中のスクリプトが、スクリプトを開始したスケジュールで指定した時間制限を超えた場合
-
スクリプトが不明なスクリプトステップに到達した場合 ([ユーザによる強制終了を許可] スクリプトステップを参照)
FileMaker Server ヘルプまたは FileMaker Cloud ヘルプを参照してください。
-
-
Get (システム IP アドレス) などのハードウェア関連の関数はサーバーサイドスクリプトで、クライアントではなく FileMaker Server および FileMaker Cloud のデータベースサーバーコンポーネントからの情報を返します。
-
サーバーサイドスクリプトの場合、ファイルアクセスは「Documents」フォルダとテンポラリフォルダに制限されます。サーバーサイドスクリプト内のパスを参照してください。
-
サーバーサイドスクリプトでは、[ダイアログあり] オプションがオンになっているスクリプトステップでダイアログボックスが表示されずにエラーが返される場合があります。このエラーを回避するには、サーバーサイドスクリプトで [ダイアログあり] をオフにします。