« 2020年2月 | トップページ | 2020年6月 »

2020年5月

2020年5月28日 (木)

Google Calendar API の利用

当院では休日・休診情報を Google Calendar で管理して,ホームページ上で公開している。 OpenDolphin のカレンダーでも休日・休診情報を表示できるようにカスタマイズしていたが,表示データはプログラム内にハードコーディングであった。これを Google Calendar から情報を読み込めるようにして,データを Google Calendar で一元管理できるようにしてみた。

Google Calendar には Calendar API というのが用意されており,利用しやすいように主要言語のチュートリアルまで用意されている。そこに出ている java のサンプルを参考にしてプログラムした。Calendar API の認証にはブラウザが必要になるのだが,当院のサーバは CUI でブラウザは使えない。そこで,診察室のクライアントでデータを取込み,それをサーバに保存して,そのデータを全クライアントで利用するという方式にした。

CalendarSettingPanel で Calendar API からデータを取り込み,それをサーバに保存する。サーバ側ではわざわざ Entity を作るのも面倒なので,PnsServiceImpl の Preferences に保存するという素人丸出しの方法を使った。保存したカレンダー情報は,各クライアントが起動時にサーバから読み込む。

Settingpanel   Calendar

2020年5月22日 (金)

添書作成スクリプト

当院では開院以来,添書は NeoOffice の NeoOffice Basic で作ったシステムを使っていた。しかし,NeoOffice Basic でのコード管理は非常に苦痛度が高く,いつかアップル謹製の Pages と AppleScript を使って書き直したいと思っていた。ただ,実のところ AppleScript もあまりプログラミングが楽しい言語とは言えず,だらだらとそのままになっていた。

そんな折,AppleScript のスクリプトエディタで JavaScript が使えるということを知った。JavaScript for Automation (JXA) というもので,Yosemite から使えるようになっていたらしい。JavaScript なら AppleScript より圧倒的にコードが楽しく書ける。早速,JXA を使って添書システムを書き換えた。

手順としては,まず連絡先アプリで紹介先を選んで,スクリプトで選択項目を読み込み,さらに orca から患者情報を読み込んで,最後に Pages のテンプレートファイルのプレースホルダーに情報を挿入して添書を完成させるという仕組みにした。

まずは連絡先アプリに医療機関を登録した。連絡先アプリは vcf ファイルを読み込めるので,公開されている道内医療機関リストの xlsx ファイルを cvs で保存して,それを vcf に変換するスクリプトを書いた。これで,道内 3,300 の全医療機関を連絡先アプリに登録できた。

次に orca からの患者情報の取得であるが,NeoOffice Basic では jdbc で orca に接続して sql を発行して情報を得ていた。しかし,orca api のおかげで,今ではそういう手続きは全部すっ飛ばして,curl で拍子抜けするほど簡単に情報を得ることができる。例えば,orca trial サイトでやってみると,

$ curl -u trial: 'http://trial.orca.med.or.jp:8000/api01rv2/patientgetv2?id=00001&format=json' 
これで患者情報が json で取れて,さらに JavaScript を使うとパースまで一気にできてしまう。jdbc を使っていた頃とは雲泥の差である。
var res = app.doShellScript("curl -u " + AUTH + " " + URL )
var pt = JSON.parse(res)		

Contacts 3_20200520172001
Dialog

作ったファイルは github に上げた。.pages ファイルをテンプレートセレクタに追加して使う。

2020年5月11日 (月)

病名検索フィールドをカルテ検索と併用する

JWindow バージョンの JSheet を作っていい気になっていたら,mac だと JWindow の JTextField にうまくフォーカスが取れないことが判明してしまった。これではカルテ検索ダイアログが使えないではないか。

JWindow,JTextField のソースを読んでいろいろ試してみたがうまくいかず (native 領域の問題っぽい),どうしたものかと考えあぐねていたところ,ふと病名検索フィールドが目に付き,検索ダイアログをあきらめてこれを使ったらよいのではないかと思いついた。早速,⌘F でカルテ検索,⇧⌘F で病名検索ができるように切り替えるプログラムを書いた。結果的に無駄なダイアログを一つ廃止できてよかった。

左:JTextField にフォーカスが取れないダイアログ,右:ダイアログを廃止,⌘F でカルテ検索に切り替わるようにした

1_20200510204001  2_20200510204201

⇧⌘F で元々の病名検索モードに切り替わる

3_20200510204401  4

2020年5月 6日 (水)

JWindow を使った JSheet

mac のダイアログは,タイトルバーのあたりからせり下がってくる Sheet という方式になっている。これを java でシミュレートするために,JDialog を undecorated にしたウインドウを使っていた。しかしこれには,JDialog が表示されると親フレームがフォーカスを失って,タイトルバーがグレーアウトされてしまうという,かっこよくない欠陥があった。

JDialog ではなく,JWindow を使えば,親フレームを active にしたままダイアログが出せるのであるが,JWindow を modal にする方法がわからず,ずっと pending になっていた。

時間があるときに JDialog のソースを読んで,modal をどのように実現しているのかを調べていたのだが,ついに SecondaryLoop というのを発見することができた。これを使って JWindow で modal な JSheet を作った。

左:JDialog によるもの,中:JWindow によるもの,右:アニメーションGIF

1_20200506120001  2_20200506120201  Jsheet

こういう,機能的にはどうでもよいことにこだわるのは,マカーのマカーたる所以である。

2020年5月 3日 (日)

シェーマの拡大・縮小

シェーマの拡大・縮小ができるようにした。図を option + クリックすると拡大して,shift + option + クリックすると縮小する。設定した拡大・縮小率は,画像データの meta data に埋め込んで保存するようにした。

1_20200503144001

    option + クリック ↓ ↑ shift + option + クリック

2_20200503144001

« 2020年2月 | トップページ | 2020年6月 »