別のクライアントでスクリプトを起動する

WebDirectやIWPでは、FileMakerが得意とするきれいなレポートを出力することができません。印刷やファイル出力関連のスクリプトがサポートされていないからですが、Webブラウザを使用するため当然なのかもしれません。
これが問題になる場合、回避する方法が今までもいくつかありました。プラグインを使ったり、「OnTimerスクリプトをインストール」を使う方法などがありますが、いずれにしても実現方法は、クライアントのロボットプログラムでPDFを生成して、オブジェクトフィールドに挿入する、という手順になります。
最近改めて調べたら、プラグインを使わないFileMakerの純正の機能で、かつポーリングではなくクリックでPDF生成を可能にする方法が、SeedCodeの記事で紹介されていました。SeedCodeが自社製品に組み込んだ機能の実装時に参考にしたという、ClickWorksの元記事を紹介します。
以下は私の拙訳です。


別のクライアントでスクリプトを起動する
( Trigger a script on ANOTHER client )

Jan Stieperaere
2014/7/4

コンセプト

この手法を使えば、他のユーザのクライアント上の希望するスクリプトを起動することができます。ロボットクライアント上のスクリプトを必要なときに起動することもできます。スクリプトは、バックグラウンドでOnTimerスクリプトを走らせるのではなく、クリックで起動させます。
プラグインは不要で、あらゆるFileMakerプロジェクトにこの手法を埋め込むことができます。FileMaker GoとFileMaker WebDirectでも動作します。
唯一の要件は、ファイルがサーバでホストされていること、そして他のクライアントで開かれていなければならないということです。「待機用」のレイアウトはアクティブである必要がありますが、ユーザーに気づかれないように、非表示のウィンドウで開いておくことが可能です。

OnRecordLoadスクリプトトリガ

他のクライアントでスクリプトを起動するためのキーとなる技術が、OnRecordLoadスクリプトトリガです。このスクリプトトリガが起動されるタイミングは、通常の使用目的であるレコードをロードするときだけに限りません。アクティブなレコードを削除するときにも起動されます。アクティブなレコードを削除すると、FileMakerは別のレコードをロードしようとします。ただし対象レコードにそれ以上レコードがない場合は、ロードするレコードはありませんが。このときにOnRecordLoadが起動され、指定したスクリプトがなんらかのアクションを実行しなければいけないかどうかをチェックすることができます。さてここでとてもいいことがあります。あるクライアントのアクティブな「待機中のレコード」の削除を、他のクライアントから実行することができるのです。

詳細な説明

これをどのように実装すればいいでしょうか? ユーザを認識するために、データベースの起動時にユニークなセッションIDを作成します。これは、ユーザーのログイン名やIPアドレスなど、相手が誰かを特定できるものであれば、なんでも構いません。ただし、一人のユーザが同時に別のプラットフォーム(例えばFileMaker ProとWebDirect)に同じユーザ名でログインすることが可能なため、ログイン名は使わないほうがいいでしょう。通常のシリアルキーで問題なく動作します。セッションの間、このIDをグローバルフィールドに保存します。そして待機テーブルにこのセッション用のレコードを作成します。このレコードにも、ユニークなセッションIDを格納します。待機レコードは、onRecordLoadスクリプトトリガが設定されたレイアウトにロードされます。これを別のウィンドウで行い、非表示にしてユーザから見えないようにします。この状態で、誰かがその待機レコードを削除すると、onRecordLoadスクリプトトリガが起動され、指定したスクリプトが実行されます。

応用先は無限

FileMakerスクリプトを起動するので、スクリプトでできることであれば何でも可能になります。レコード削除、レコード作成、ダイアログの表示、AppleScriptの実行など、応用先は無限です。
私にとって、この手法の最も便利な機能は、クリックで起動するクライアントロボットを作れることです。PDFの生成、負荷テスト、32ビットODBCドライバとの接続など… 私はこの手法を「サーバー上のスクリプト実行」のクライアント版と理解しています。つまりサーバー上でできないすべてのことを、クリックによってロボットクライアント上で実行可能になります。

サンプルファイル

サンプルには2つの機能が実装されています。一つ目は、単純なメッセンジャーシステムです。この機能を使って、別のクライアントに簡単なメッセージを書き込むと、もう片方のクライアントにカスタムダイアログが表示されます。
2つ目はスクリーンキャプチャで、別のクライアントの画面コピーを撮ることができます(ただしAppleScriptを使用しているため、Mac上でのみ動作します)。
サンプルファイルをダウンロード

2 responses... add one

にしの様、コメントをいただきましてありがとうございました。
ご紹介いただいたFMP URLプロトコルは、自分の端末にFileMaker Proがインストールされている場合に、指定されたサーバでホストされているDBのスクリプトをローカルで直接起動できるというものだと理解しています。
記事で紹介したものとは違ったシチュエーションですが、WebシステムとFileMaker Proの統合でうまい使い道があるのではないかと思います。

Leave a Reply to にしの Cancel Reply