コマンドやスクリプトなど、コードを管理して実行もできる自作FileMaker書類 CodeManager.fmp12 の利用と仕組みについて。その3。今回は、完成形コードを実行するスクリプト”CodeRun”についてです。
最初の記事 Macで実行可能なFileMakerコード管理 CodeManager
一個前の記事 その2 コマンドラインを do shell script に変換 からのつづきです。
実行するスクリプト
さて、上手く変換された実行できるコードが Final フィールドに格納されました。これを実行させるスクリプトについてです。
スクリプト CodeRun
スクリプトステップ「AppleScriptを実行」で、最終コードフィールドである CodeRun::GLB_GetFinal を指定するだけです。でも他にもちょっとあります。
IDを確定させる
GLB_codeID フィールドに目的の codeID を入力することで動作する仕組みです。実行前に GLB_codeIDフィールドにIDを入力しておくか、またはスクリプト引数でIDを指定してもOKという作りにしています。何しろ、GLB_codeID フィールドに ID をセットして確定させます。
確定させれば、もう GLB_codeFinal に実行OKなコードが出来上がっています。
結果を取得するコードかどうかをチェックして準備
コードによっては結果をゲットするタイプのものがあります。結果をゲットするときにはクリップボードを使用することが多くあります。コードの中に「pbcopy」または「set the clipboard」が含まれていれば、それは結果をクリップボードに収めるコードであるからして、実行した後、引き続き「結果をどこか良い場所にペーストする」という行為まで面倒見ます。
「結果をペースト」に繋げる準備
グローバルな「結果フィールド」用意していますのでそこに結果をペーストするわけですが、その前に準備をします。
「結果フィールド」に一旦「準備中」という簡単なテキストを入力してコピーしておくのです。なぜこんなことが必要かというと、それは後ほど。
AppleScriptを実行
AppleScriptを実行します。結果が必要ないコードの場合はこれにて終了。
結果を取得するコードの場合は「結果をペースト」スクリプトに繋げます。
結果をペースト
コードを実行した後に得られるクリップボードの内容を「結果フィールド」にペーストするスクリプトです。
「貼り付け」ステップを使うわけですが、ただし問題があります。コード実行して結果がクリップボードに収まるまでにタイムラグがあることです。
「貼り付け」ステップを実行しても、まだ結果がクリップボードに格納されていない可能性ありますね。
じゃあ「一時停止 1秒」とか書いて待ちますか?いいえ、コードによっては瞬時に結果が返ってきますからダルくて1秒も待てません。また1分かかるコードもありますから1秒では足りません。
これをどう解決するかというと、ループを使います。
ループでペーストし続ける
最初に「現状の結果フィールド」がクリップボードにあることが大事になります。先ほどのCodeRunスクリプトの中で「準備中」をクリップボードに収めました。
スクリプトCodeRunでは、その後に「AppleScriptを実行」します。結果をクリップボードに取得するまでは「準備中」が入っているわけです。「準備中」を変数にも保存しておきましょう。
ループを回して「貼り付け」します。結果フィールドの内容が、変数に保存した結果フィールドの内容と同じなら(どちらも「準備中」)まだ結果を取得できていませんので繰り返します。
繰り返しているうちに、あるタイミングでスクリプトの結果がペーストされます。保存した内容と異なりますから、これにてOK、ループを抜けます。
コードに問題があって結果をクリップボードに収めることができなければ延々と「準備中」をペーストしまくって終わらなくなります。ループをカウントしておいて、あまりにも待たされるようなら何らかのエラーだから中止するように安全対策を施します。
結果フィールドをレイアウトに配置する
スクリプトステップのコピーやペーストは書き込み可能なフィールドがレイアウト上にないと機能しません。見えてなくてもいいので、レイアウト編集の画面の果てにでも結果フィールドを配置しておましょう。
結構これを忘れがち。というのも、他のレイアウトや他のFileMaker書類から利用することが多いからです。
ということで、実行スクリプト「CodeRun」でした。
ファイルはこちらです。
Mac専用です。
macOS 10.14 Mojava 以上、FileMaker Pro 19 以上で動作します。
あらかじめいくつかのサンプルレコードが入っています。
このファイルは v3.2 です。2023.12.22 update
最初の記事 Macで実行可能なFileMakerコード管理 CodeManager v2
次の記事 その2 コマンドラインを do shell script に変換
使い方・マニュアルはこちら