ファイルメーカー内のスクリプトとアップルスクリプトの比較

ファイルメーカーでカルテを作る際に全ての構造をファイルメーカー単独で作っておられる方を時々お見かけします。 それは凄いなーといつも思うんですが、私はできるだけアップルスクリプトに任せた方がよいと思ってます。

ファイルメーカースクリプトのメリット

  1. レコードの取り出しや検索が柔軟に出来る
  2. 上手く使えばかなり自由度がある
  3. アップルスクリプトを新たに覚える必要がない
  4. スクリプトをステップバイステップで動かして動作を確認出来る。
  5. ファイルメーカーにはアップルスクリプトではコントロール出来ない部分がある

アップルスクリプトを使うメリット

  1. スクリプト全体の視認性がよい、ファイルメーカのスクリプトの細かな内容を見るためにいちいち深い階層のウインドを開く必要がある
  2. 出来る事が段違いに多い。 shellを使えるのでスクリプトの行数を少なく抑えることが出来、視認性が良くなる。 perl,php, psql等ありとあらゆる関数が使える。
  3. ファイルメーカーを開かない状態でも動作確認が出来る。 またファイルメーカー以外のアプリケーションのWindowコントロールが可能(system eventsを使ったGUI操作が可能)。
  4. 全体が見通し易いので複数のプログラマーが関与して機能を拡張しやすい。

ファイルメーカーからORCAに情報提供のリクエストをするためには、ファイルメーカー内のスクリプトだけでスクリプトを構成する方法もありますが、私の意見ではこれはファイルメーカー内に多くのスクリプトが作られて視認性が悪く、全項目を開かないと全体像が把握できないと言うデメリットがあります。 
とても便利で私も開業当初これを多用したのですが、今では少しずつ単文のAppleScriptの文章に変更しつつあります。 AppleScriptで書かれたスクリプトはやはり全体が見渡せるという利点があります。 Unix/Shellコマンドやパール、その他のあらゆるMacOSの機能を使えるのも大きな利点です。 しかしまあ使った事の無い方に取っては敷居が高いかもしれませんね。

アップルスクリプトで出来ないファイルメーカー操作



ファイルメーカーからアップルスクリプトを使って運用する場合、アップルスクリプトから出来ない事を整理しておく必要があります。

1) show every record コマンドが使えなくなってます。

実はこれとても困るんですけど、現在使ってるFileMaker Pro 19.6だとこのコマンドが使えなくなってます。

Tell application "FileMaker Pro" to tell document "xxxx.fmp12" to tell current layout to tell current window to show every record

これ検索などをする前に全部のレコードを表示するって言うコマンドなのですが、これが無いとその後の絞り込み検索が出来ないです。 
仕方無いのでこれはファイルメーカースクリプトを作り、全レコードを表示ってファイルメーカースクリプトを作って置いてそれをdo script "全レコード表示"ってコールしか無さそうです。
ピヨマルさんの本にはこれ記載されているので以前は動いていたんだと思います。 私も以前確か使ってた記憶があるんですよね。

2) 必要な変数は、ファイルメーカーの計算済みのAppleScript内で定義し直接アップルスクリプトの引数として挿入して実行するのがよい


ファイルメーカーのデーターを用いてアップルスクリプトを動作させる場合、ファイルメーカー内のデーターをアップルスクリプトに引数として渡すにはいくつかの方法があります。 他にもやり方はありますが大きく分けて動作させるアップルスクリプトへ特に引数を渡さずに動作させてアップルスクリプト側からファイルメーカー内の情報を読み出して動作させる方法と、ファイルメーカー内でアップルスクリプトを実行させる際に最初に引数を指定してアップルスクリプトをコールする方法があります。  
前者は設定が楽ですがファイルメーカーで目的のデーターベースを立ち上げていないと動作の検証が出来ませんし、ファイルメーカーのレイアウト上に表示されたデーターしかデーター利用が出来ないと言うデメリットはありますが、割と初心者には受け入れやすいやり方だと思います。 デメリットとしてファイルメーカーが無い環境で動作のテストが出来ないことや、拡張性が低い点があります。 私はアップルスクリプト内にファイルメーカーデータを取り出すためのスクリプトの行数が多くなるというデメリットを感じて、今は主に引数を明示的に渡す様に計算済みアップルスクリプト内で定義する様にしています。 最初の頃は、きちんと引数が渡せているかを確認しながら、何度もファイルメーカー内の計算済みのアップルスクリプト画面を開けなくてならず、大変ですが。 一旦設定してしまえれば、後にスクリプトを拡張する時にファイルメーカーに依
存せず引数を設定出来るので楽です。 
少し例を挙げておきましょう。 書き方はテキストで、ファイルメーカー内データーの変数を &で繋いで行く方法です。
"set Sub to load script (((path to home folder from user domain) as string) & \"xxxx:orca_api.scpt\") as alias¶
TransferDATA_FromORCAtoFMP2023(
{Patient_ID:" & Main::pt_id &
",Perform_Date:\"" &
Year ( Main::day ) & "-" &
Month ( Main::day ) & "-" &
Day ( Main::day ) & "\"
}
) of Sub"

最初のうちは中の構造が解りやすいように項目毎に改行しておいた方が間違えなくて良いです。 この計算済みアップルスクリプト内で定義内の改行はアップルスクリプトを実行するときには無視され、改行は¶で明示的に示されます。
このスクリプトで定義されているのは先ず、外部アップルスクリプトファイルorca_api.scptファイルを subと言う変数にロードし。 そのSub内のハンドラー TransferDATA_FromORCAtoFMP2023を、レコード{Patient_ID:"hogehoge", Perform_Date:"YYYY-MM-DD"}を引数にして実行しています。
一つ目の引数はcurrent recordのMain::pt_idと言うファイルメーカーのcellのデーターを入力しています。
二つ目の因数は日付ですが、ファイルメーカー内の日付のデーターは確か1900年1月1日からの秒数で決定されていたと思うので、そのままMain::dayを入力すること、整数が入力されますので、こうやって年・月・日に分割して定型化してString形式入力してやる必要が有ります。 これもファイルメーカーからアップルスクリプトを動かす際に必要な手順です。

3) Applescript側から呼び出せるファイルメーカーのデーターは表示されているレイヤーに表示されているデーターだけ


Applescript側からファイルメーカー内の取り出せるデーターはレイヤーに表示されているデーターだけになります。 これも知らないとつまずくポイントです。 これはデーターをcellに入力する際にも同じで、アップルスクリプト側からデーターを入力するにはそのレイヤーに該当するcellが登録されている必要があります。

今思いつくのはこのぐらいですね。

三好クリニックでの電子カルテ・レセコン