【Claris FileMaker 2023】 新機能~「コールバックを使用してサーバー上のスクリプト実行」スクリプトステップ~

2023年05月23日 02:32 PM

Claris FileMaker 2023


Claris FileMaker 2023 で新しいスクリプトステップ「コールバックを使用してサーバー上のスクリプト実行」が追加されましたので、その機能をご紹介します。

この新しいスクリプトステップを確認する前に、既存のスクリプトステップ「サーバー上のスクリプト実行」スクリプトステップについておさらいしたいと思います。

「サーバー上のスクリプト実行」スクリプトステップ

Ver.13から導入されたスクリプトステップです。
クライアント側では時間がかかるような処理を行うスクリプトを、現在のファイルを共有しているサーバーに実行させることができます。

このステップには「終了するまで待つ」というオプションがあります。
このステップで指定したスクリプトの処理をサーバーが終了するまで、クライアント側にはコーヒーカップのアイコンが表示され「フリーズ」状態になり何もすることができません。

「サーバー上のスクリプト実行」ステップ以降に書いたステップは、サーバー上のスクリプトが終了後実行されることになります。
オプションを「オフ」にすればクライアント側が「フリーズ」する時間はなくなりますがサーバーで行われている処理とは非同期となります。

サーバーで処理が終わったかはわからず、スクリプトの結果を受け取ることもできません。

新機能「コールバックを使用してサーバー上のスクリプト実行」スクリプトステップ

「コールバックを使用してサーバー上のスクリプト実行」ステップではオプションが2つあります。

オプション1:「スクリプト」

実行するスクリプトの選択はスクリプトの一覧から行います。引数の設定もできます。ただし、「サーバー上のスクリプト実行」ステップと違って「名前で」を指定することはできません。

オプション2:「コールバックスクリプト」

「終了するまで待つ」のオプションはありません。その代わりにサーバーの処理が終わった際に実行する「コールバックスクリプト」を設定することができます。こちらも選択はスクリプトの一覧から行います。引数の設定もできます。

「コールバックを使用してサーバー上のスクリプト実行」ステップを使用するとサーバー側で処理を実行している間にクライアント側が「フリーズ」することがなく、さらにサーバーでの処理が終わった際に別のスクリプトを実行することができるようになります。
クライアントがサーバーに処理を依頼、処理が終わったらサーバーから折り返し電話(コールバック)の連絡がもらえる、と考えるとイメージしやすいのではないでしょうか?

では実際に使ってみましょう。

このステップを使うにはサーバー、クライアントともにバージョンが2023である必要があります。
クライアントだけ2023だった場合、スクリプトを設定することはできますが、実行するとエラーメッセージが表示されます。

レポートをサーバーに作成させて終わったら通知するスクリプトを新機能で書き換えてみる

前のバージョン作成したレポート作成のスクリプト(サーバーに集計レポートを作成させてクライアント側でPDF出力する)を「コールバックを使用してサーバー上のスクリプト実行」ステップで作り直してみました。

元のメインスクリプトの概要は以下の通りです。

1.UUIDを変数に設定

2.サーバー上のスクリプト実行で集計データをワークテーブルに作成(1のUUIDを設定)

3.2で作成した集計データをサブスクリプトで検索(1のUUIDを使用)

4.対象レコードをPDFにする

14行目の「サーバー上のスクリプト実行」ステップより後の部分(概要3の検索と、4のPDF化の部分)はサーバー上のスクリプトが終わってから実行される必要があるのでコールバックに使えるよう別のスクリプトにしました。

次にメインスクリプトの「サーバー上のスクリプト実行」ステップを「コールバックを使用してサーバー上のスクリプト実行」ステップに変更し、先に作ったサブスクリプトを「コールバックスクリプト」として設定します。

オリジナルのスクリプトでは「サーバー上のスクリプト実行」以降のステップでも同じスクリプト内なのでローカル変数 $uuidを使えましたが、修正によってこの部分を別スクリプトにしてしまったので変数 $uuidをどこかで受け渡す必要があります。
コールバックスクリプトに引数を設定できるので引数に $uuidを設定してコールバックスクリプトで受け取る方法にしてみました。

ところが、実際動かしてみると変数の中身が空欄です。
コールバックスクリプトが実行される時はメインのスクリプトは終了しているため、変数がクリアされてしまっているようです。
メインスクリプトでオプションのコールバックスクリプト設定時のスクリプト引数にはローカル変数やその時のコンテキストに左右されるような値ではなく固定値の設定にのみ使用するのがよさそうです。

今回はサーバー上で実行するスクリプトにスクリプト引数で変数を渡しコールバックのスクリプトにはスクリプトの結果で渡すようにしてみました。

実際に動作させてみると、「サーバー上のスクリプト実行」を使った元のスクリプトではサーバーでレポート作成中はコーヒーカップのアイコンが表示されクライアントはボタンクリックや入力などの操作は一切できませんでしたが、「コールバックを使用してサーバー上のスクリプト実行」ではいったんスクリプトが終わっているので値を入力したり別のレイアウトに移動したりすることもできました。

ここではレポート作成中に全く別の画面、売上一覧に移動して入力を行ってみると、問題なくレイアウト移動およびフィールドへの入力ができました。

しばらくすると入力中であってもコールバックスクリプトが動き出し、強制的にPDF出力のためのレイアウトに切り替えられました。コールバックスクリプトは突然動くので開始時には「集計が終了しました。PDFを作成します」のようなカスタムダイアログをいれておいたほうがよさそうです。

今回は簡単な例で試してみましたが、サーバー上で処理実行中にもスクリプトを先に進めることができるので、同期が必要ない複数の処理を同時にサーバー上にやらせて全てが終わった際にユーザーに告知する、なども工夫次第ではできそうです。

今後いろいろ活用方法を検討してみたいと思います。