コールバックを使用してサーバー上のスクリプト実行
「Claris FileMaker 2023」が発売されてからもうすぐ1年になります。
特徴は、
- コールバックを使用してサーバー上のスクリプト実行 スクリプトトリガ
- スクリプトが完了するのを待たずにサーバ上のスクリプトを実行
- Claris Connect の無料利用枠の提供
- 「FileMaker Server」のUbuntu 22.04 LTS (Long Term Support) Server AMD64 および ARM64のサポート
などがあります。
今回はその中の「コールバックを使用してサーバー上のスクリプト実行」についてみていきましょう。
目次
なにができるのか
最初に「コールバックを使用してサーバー上のスクリプト実行」の注意点をあげておきます。
- クライアント、サーバともに、FileMaker 2023 である必要がある
- スクリプトの結果は、コールバックのスクリプトで受け取る必要がある
- クライアント側を終了してしまうとコールバックのスクリプトは実行されない
などがあげられます。
この「コールバックを使用してサーバー上のスクリプト実行」は、サーバーでの処理が完了した時に別途用意しておいた2番目の「コールバックスクリプト」をクライアント側で実行させることが可能となります。
今までにも、「サーバー上のスクリプト実行」で同様のことは可能でした。
①「終了するまで待つ」オプションをオン
この場合、クライアント側はずっと指をくわえてサーバー側の処理が終わるまで待つ必要がありました。
②「終了するまで待つ」オプションをオフ
この場合、クライアント側は「処理が終わるまで待つ」ことからは解放されましたが、サーバーの処理がいつ終了したかを知る方法がありませんでした。
* 実際には複雑な処理を実装することで確認させることは可能
これらの欠点を克服した「コールバックを使用してサーバー上のスクリプト実行」をみていきましょう。
まず、「終了するまで待つ」オプションがなくなっています。ここでは、
- サーバーで実行させたいスクリプト
- コールバックスクリプト
を用意しておいてそれらを指定します。
「コールバックスクリプト」はサーバーで実行させているスクリプトが終了した時に呼び出されます。ここに、「カスタムダイアログ」でメッセージを表示してユーザーに完了を知らせたり、後続の処理を記述したりすることでいろいろなことが可能になります
やってみよう
検証用のスクリプト作成
今回は、
・サーバーで実行されているデータの処理の件数を表示
・終了したことを知らせる
の2つを処理してみます。
サーバーで処理させるスクリプトの内容 :
単純にLoopでカウントに+1するだけのものを記述し、スクリプトの最後に「最終エラー」と「時刻」をかえすようにしておきます。
また、スクリプトの結果は画面に表示されるようにしておきました。
比較のため、「スクリプト実行」、「サーバー上のスクリプト実行」も試してみます。
「スクリプト実行」
まずは、①「スクリプト実行」ボタンを試してみます。処理件数は50件に設定して実行してみます。すると、
「処理件数」が1、2、3….と変わっていくのが表示されます。
最後にメッセージが表示されました。
この「スクリプト実行」では処理件数が多くなるほど、クライアントが占有されて他のことができなくなります。
「サーバー上のスクリプト実行」(「終了するまで待つ」オプションをオフ)
次に、「終了するまで待つ」オプションをオフにして②「サーバー上のスクリプト実行」ボタンを押します。処理件数は5000件に設定して実行してみます。すると、
すぐに終了のメッセージが表示されました。この時、Loopの処理はサーバーで実行されています。
「カスタムダイアログ」のOKボタンを押すと処理件数が3000件あたりからカウントアップしていくのが表示されます。
(この例では、処理が終了したしたことは「処理件数」が ”わかっていた” ため「5000」件になったことで判断がつきました。)
サーバー上で実行されたLoop処理の結果は取得できませんでした。
「サーバー上のスクリプト実行」(「終了するまで待つ」オプションをオン)
次に、「終了するまで待つ」オプションをオンにして②「サーバー上のスクリプト実行」ボタンを押します。処理件数は5000件に設定して実行してみます。
すると、コーヒーカップのマウスポインタが表示されクライアント側は何もできなくなり、「処理件数」はずっと空白のままです。処理中の時の件数は表示されません。
処理が終了すると「処理件数」が表示されます。
同時に、終了したことを知らせるメッセージが表示されました。
「コールバックを使用してサーバー上のスクリプト実行」
次に、③「コールバックを使用してサーバー上のスクリプト実行」を試してみます。
「コールバックを使用してサーバー上のスクリプト実行」を呼び出すためのスクリプト :
- サーバーで実行させたいスクリプト名は「Loop」
- コールバックスクリプトのスクリプト名は「コールバックの処理」
としています。
また、コールバックスクリプトにわたす引数に”123456”を設定しています。
「コールバックスクリプト」 :
【注意1】
サーバーで実行させたいスクリプト「Loop」での処理結果を知る方法について
- コールバックスクリプトにわたす引数に「Get ( スクリプトの結果)」としても引き渡せません。
- 「コールバックを使用してサーバー上のスクリプト実行」のステップの後に、「Get ( スクリプトの結果 )」を記述しても受け取れません。*1
- コールバックスクリプトの「コールバックの処理」の方で、「Get ( スクリプトの結果 )」 を使用して受け取ります。
*1 サンプルスクリプトにある、赤矢印の箇所の結果は空白になります。 |
【注意2】
コールバックスクリプトが実行されるのは、「コールバックを使用してサーバー上のスクリプト実行」を呼び出すためのスクリプトが終了した後になります。
サンプルスクリプトの例の場合、赤矢印の部分に処理がたくさんあったとしても、①までの処理が実行された後に「コールバックスクリプト」が実行されます。
下記の場合は、①でカスタムダイアログが表示されるため「OK」が押された後に実行されます。
さっそく、③「コールバックを使用してサーバー上のスクリプト実行」ボタンを押してみましょう。処理件数は10000件に設定して実行してみます。
すぐに、「コールバックを使用してサーバー上のスクリプト実行」が処理され、その下にある「カスタムダイアログ」が実行されます。スクリプトの結果(注意1の*1)は空白です。
「カスタムダイアログ」の「OK」を押すと、処理件数が3000件あたりからカウントアップしていくのが表示されます。
Loop処理が最後まで処理されて、コールバックスクリプトが実行されたため「カスタムダイアログ」が表示され、処理件数も10000件となりました。
サーバーで実行させたいスクリプト「Loop」の処理結果も取得できています。
また、引数”123456”も正しく渡されていることが確認できました。
3.最後に
いかがでしょうか。「もっとはやく、この機能がほしかった」と思うのではないでしょうか。
冒頭でも述べたとおり、「コールバックを使用してサーバー上のスクリプト実行」によって
「サーバー上のスクリプト実行」の終了をクライアント側でずっと指をくわえて待つ必要がなくなりました。また、サーバーの処理がいつ終了したかを知ることも可能となりました。
そして、サーバーで実行させているスクリプトが終了した時に、「カスタムダイアログ」でメッセージを表示してユーザーに完了を知らせたり、後続の処理を記述したりすることでいろいろなことが可能になりました。ぜひ、お試しください。
今回の記事が参考になれば幸いです。