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


ということで、実行スクリプト「CodeRun」でした。
改良された CodeManager についての一連のポスト、一旦終了です。もしかしたら小ネタについて引き続き何か書くかもしれませんがわかりません。
ファイルはこちらです。
Mac専用です。
あらかじめいくつかのサンプルレコードが入っています。
はじめに、管理>セキュリティ の拡張アクセス権で、AppleEventのところにチェックがあるか確認。
元の記事 Macで実行可能なFileMakerコード管理 CodeManager v2
前の記事 その2 コマンドラインを do shell script に変換