PSQLコマンド用のハンドラーを紹介

AS_PSQL
当院で使ってるPSQLコマンド送信部分のハンドラーです。 こうやって共通化することでバグがあったときに修正する箇所を一箇所に限定することが出来て管理が楽になります。 ちょっと一つ一つ行に書かれている意図を説明してみましょうか?

先ず引数qですが、recordと言う形式で引数を渡してます。 これは将来的な拡張をする際に、引数を増やしたりするときに自分が覚えていない遠い場所にあるスクリプトの引数の数も手作業で増やして行く必要があって、変更し忘れるとプログラムの実行時に変数が足りないと言われてプログラム自体がとまってしまいます。 その反対にレコード形式だとどうしても引数の文字数が多くなりすぎる傾向があるので、複雑な入れ子型のプログラムをデザインする際には視認性をよくするために、変数を直接定義して渡す方法の方がやりやすい場合もあります。

一行目 set q to q & {cmd:"", opt:"", blankError:true, server_:"www.hogehoge.com", Debug:false, server_b:"sub.hogehoge.com"}
はqにデフォルト値を設定しています。 レコード同士を&で結合すると、同一の名があると、左辺の物が優先される特性を使ってます。 右辺にデフォルト値を設定しています。 例えばcmd:""と記載していますが、こうやって""のデフォルト値を設定することで、何も入力されなかった時のエラー処理を1行で作る事が出来ます。 
15行目、if q's cmd is "" then return "error: no command"
ですね。 とにかくプログラムは後で見直したときに解りやすいように短く簡潔に書く必要があります。 

2行目はpsqlスクリプトが格納されているかもしれない場所を指定しています。 psqlは普通にインストールするとTerminalで実行するとpsql とコマンドを打つとだけでプログラム本体までのパスが通っているため、絶対的なパスを指定する必要は無いのですが、アップルスクリプト内の do shell scriptではパスが通っていないので、絶対パスを指定する必要があります。 絶対パスはpsqlのバージョンやインストールするシステム、MacPort, HomebrewやOSの時代によって異なるので、入ってそうな場所を列挙して、 which コマンドであらかじめtry構文を使って存在確認をして、実際可動インストールされている場所を特定しています。

最後にpsqlコマンドは、optionの入力が出来る様にセットしておき、実際のSQLコマンドをcmdに入力してpsqlに渡すようにしています。 ハンドラの名前は多用するのでできるだけ短く、AS_psql_としてます。
あとDebug用のサブサーバーを登録して実証試験を行うためのDebugフラグも用意して、サーバーの切り替えが簡単に出来るようにしています。 blankErrorはPSQLのQueryで戻って来た値が""の時にエラーが出てくれた方がありがたい場合にその後のエラー処理のためにerrorを設定しています。

この画像の一番上のコマンドはこのスクリプトがちゃんと動作するためにチェックしたコマンドです。
select_文は オルカ上で表示されるカルテ番号 ptnumがオルカの中で利用される患者番号ptidで何番に当たるかをチェックする物で、オルカ内部情報のptidと実際に患者の番号であるptnumが違う事に注目して下さい。 おそらくオルカの診察券番号は数字以外も受け付けてくれるのでしょうけれど、そうするとpsql上のデータベースが混乱してしまったりするため、患者番号のシリアル番号を付けて管理しているのだと思います。この後のpsqlでの患者指定は全てこのptidで検索する必要があります。 もちろんSQLの構文にこの文を入れ子にして、ptnumを入力するとデーターベース内の検索を一行で返してくれる様に記載することも可能ですが、何となくですが検索に時間がかかるような気がしますし、長文になるとバグが発生した時に後で読み返しにくくなるので(視認性が悪くなる)こうやって単文でデーターを返してもらって実行させてます。

実際にこのプログラムが正常に動作するかどうか確認することが出来ます。

いかがでしたか? この場合戻り値はString形式で、それぞれのデーターが"|"で区切られてきますので。 アップルスクリプトでそれをリストへ変換して利用するという形で運用して行くわけですね。
MakeList
これはよくあるハンドラーですね。 おそらくピヨマルさんのところから戴いたものだと思います。

このやり方が解ると、グッとApplescriptでのPSQLデーターベースへのアクセスが現実味を得てきます。



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