皆さんこんにちは、みっくです。
FileMaker 2023 で新しく追加されたスクリプトステップ [コールバックを使用してサーバー上のスクリプト実行] について取り上げます。
「コールバック」という新しい単語が出てきていますね。 [サーバー上のスクリプト実行] スクリプトステップの兄弟というのか、非常によく似た機能のようです。
ここで使われているコールバックとは、電話をかけ直すという意味ではないと何となく想像がつきます。
実際にどんなものか、確認してみたいと思います!
実装
サーバー上で実行するスクリプトと、コールバックで呼び出すスクリプトを作成します。
![スクリーンショット 2023-05-11 16.53.05.png (35.3 kB)](https://img.esa.io/uploads/production/attachments/5600/2023/05/11/137575/991512ae-d1da-4062-bd85-efbebccce210.png)
サーバー上で実行するのは、レイアウト切り替えして、フィールド内容の全置換を行うという処理です。分かりやすいように、一時停止で30秒間待つ設定を入れてみました。
![スクリーンショット 2023-05-11 16.53.10.png (13.8 kB)](https://img.esa.io/uploads/production/attachments/5600/2023/05/11/137575/c95ce1f3-b59f-47e8-99c6-961a480ce7a9.png)
コールバックで呼び出すのは、ダイアログで処理が終了したことを表示するようにしました。
最後に、それらをクライアント上から呼び出すスクリプトを作成します。
![スクリーンショット 2023-05-11 16.53.17.png (16.9 kB)](https://img.esa.io/uploads/production/attachments/5600/2023/05/11/137575/1d397f28-0152-4f9f-b377-ffc162e3fd63.png)
[コールバックを使用してサーバー上のスクリプト実行] で、先ほど作成した2つのスクリプトを選択します。
これで、合計3つのスクリプトが作成されました。
次に、レイアウトにフィールドとボタンを置きます。ボタンに設定するのは、3つ目に作成したスクリプトです。
![スクリーンショット 2023-05-11 17.00.57.png (66.5 kB)](https://img.esa.io/uploads/production/attachments/5600/2023/05/11/137575/069481eb-31eb-45f0-8a35-ac32f39a7335.png)
ボタンを押して実行してみると、サーバー上でスクリプトが実行中の30秒間、クライアントは待ち状態にならず、コールバックで処理が終了したとダイアログが表示されました。
![スクリーンショット 2023-05-11 17.03.44.png (68.6 kB)](https://img.esa.io/uploads/production/attachments/5600/2023/05/11/137575/e16321a1-0e6b-4be8-b9dc-8318482e72aa.png)
[コールバックを使用してサーバー上のスクリプト実行] の動きとしては、
- サーバー上のスクリプトが実行された後、コールバックスクリプトが実行される
- サーバー上のスクリプト実行中は非同期で処理される
ということが分かります。
[サーバー上のスクリプト実行] との違い
[サーバー上のスクリプト実行] スクリプトステップでは、 終了するまで待つ:オン/オフ の設定があります。
オンにすると同期処理となり、クライアント側でサーバーの処理が終わるまで待ち状態になりました。
オフにすると非同期処理となり、クライアント側で待ち状態になりませんが、サーバー上のスクリプトが終わったタイミングが分からない状態でした。
そのため、サーバー上の処理状況が分かるように別のフィールドに更新日時や処理件数を書き出したり、処理状況をメールで送信するなど、サーバー側で実行するスクリプトで様々な方法で処理状況を表示、モニターできるように工夫をしていました。
今回追加されたコールバックを使うことで、非同期で処理でき、サーバー上で処理が終わったら終わったことがクライアント側に伝えることができるようになります。
複雑化していたスクリプトがよりシンプルな内容で構築できそうですね!
まとめ
基本的には、 [サーバー上のスクリプト実行] スクリプトステップと同じような用途が考えられます。
今回はコールバックで単にカスタムダイアログを表示しただけでしたが、追加で後続処理を実行させたり、何か選択して処理を続ける・停止する、などの制御を入れたりできそうです。
注意すべきポイントは、 [サーバー上のスクリプト実行] でも同様ですが、あまり多用しすぎるとサーバー側に負荷がかかってしまい、かえって動作が重たくなるなどパフォーマンスに影響が出てしまうこともあります。
実行制限をかけるなど工夫しながら活用すると良いかと思います。