Macで実行可能なFileMakerコード管理 CodeManager その3 実行するスクリプト

コマンドやスクリプトなど、コードを管理して実行もできる自作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 をセットして確定させます。

スクリプト IDを確定

確定させれば、もう GLB_codeFinal に実行OKなコードが出来上がっています。

結果を取得するコードかどうかをチェックして準備

コードによっては結果をゲットするタイプのものがあります。結果をゲットするときにはクリップボードを使用することが多くあります。コードの中に「pbcopy」または「set the clipboard」が含まれていれば、それは結果をクリップボードに収めるコードであるからして、実行した後、引き続き「結果をどこか良い場所にペーストする」という行為まで面倒見ます。

AppleScriptを使えばコピペせずとも結果をFileMakerの指定フィールドへ直接記入することが可能です。以前はよく使っていましたが、面倒になって使わなくなりました。コピペより優れているとも言えるので、いつかまた使うようになるかもしれません。また、ファイルに書き出すこともあります。テキスト量が多いとファイルに出力したほうが有利な場合もあります。余談終わり。

「結果をペースト」に繋げる準備

グローバルな「結果フィールド」用意していますのでそこに結果をペーストするわけですが、その前に準備をします。

「結果フィールド」に一旦「準備中」という簡単なテキストを入力してコピーしておくのです。なぜこんなことが必要かというと、それは後ほど。

AppleScriptを実行

AppleScriptを実行します。結果が必要ないコードの場合はこれにて終了。

結果を取得するコードの場合は「結果をペースト」スクリプトに繋げます。

結果をペースト

コードを実行した後に得られるクリップボードの内容を「結果フィールド」にペーストするスクリプトです。

「貼り付け」ステップを使うわけですが、ただし問題があります。コード実行して結果がクリップボードに収まるまでにタイムラグがあることです。

「貼り付け」ステップを実行しても、まだ結果がクリップボードに格納されていない可能性ありますね。

じゃあ「一時停止 1秒」とか書いて待ちますか?いいえ、コードによっては瞬時に結果が返ってきますからダルくて1秒も待てません。また1分かかるコードもありますから1秒では足りません。

これをどう解決するかというと、ループを使います。

ループでペーストし続ける

最初に「現状の結果フィールド」がクリップボードにあることが大事になります。先ほどのCodeRunスクリプトの中で「準備中」をクリップボードに収めました。

スクリプトCodeRunでは、その後に「AppleScriptを実行」します。結果をクリップボードに取得するまでは「準備中」が入っているわけです。「準備中」を変数にも保存しておきましょう。

ループを回して「貼り付け」します。結果フィールドの内容が、変数に保存した結果フィールドの内容と同じなら(どちらも「準備中」)まだ結果を取得できていませんので繰り返します。

繰り返しているうちに、あるタイミングでスクリプトの結果がペーストされます。保存した内容と異なりますから、これにてOK、ループを抜けます。

コードに問題があって結果をクリップボードに収めることができなければ延々と「準備中」をペーストしまくって終わらなくなります。ループをカウントしておいて、あまりにも待たされるようなら何らかのエラーだから中止するように安全対策を施します。

結果フィールドをレイアウトに配置する

スクリプトステップのコピーやペーストは書き込み可能なフィールドがレイアウト上にないと機能しません。見えてなくてもいいので、レイアウト編集の画面の果てにでも結果フィールドを配置しておましょう。

結構これを忘れがち。というのも、他のレイアウトや他のFileMaker書類から利用することが多いからです。

スクリプト「step 結果をペースト」
スクリプト: 結果をペースト

ということで、実行スクリプト「CodeRun」でした。


 

ファイルはこちらです。


Download CodeManager_v3.zip

Mac専用です。あらかじめいくつかのサンプルレコードが入っています。

 

最初の記事 Macで実行可能なFileMakerコード管理 CodeManager v2

次の記事 その2 コマンドラインを do shell script に変換

使い方・マニュアルはこちら

CodeManager 使い方

 

コメント

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください