[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[orca-dev:00400] Re: Web アプリケーションとの連動
- To: <orca-dev@xxxxxxxxxxxxxx>
- Subject: [orca-dev:00400] Re: Web アプリケーションとの連動
- From: "takeda" <takeda@xxxxxxxxx>
- Date: Fri, 18 Apr 2003 10:20:17 +0900
竹田@NaClです。
お世話になります。
> 生越です。
>
> > そこで、WebアプリケーションとMONTSUQIを接続する方法としてどの
> > ようなものがあるのでしょうか?
>
> 最新リリースのミドルウェアには、dbsというプログラムがあります。これ
> はMONTSUQIのデータベース層(HAKAMAと言います)をMONTSUQI外からアクセスす
> るためのプログラムです。最新のpandaのアーカイブの中にドキュメントがあ
> ります。
>
> 具体的にORCAとどうつなぐかについては、アプリケーション担当から返事が
> あるかと思います。
>
起動方法等については、pandaのアーカイブの中にドキュメントをご覧下さい。
以下、HAKAMAについての概要説明を記述しますので宜しくお願いします。
【HAKAMAについて】
現在MONTSUQI内部からのみ使用可能なMONTSUQI管理下のデータベースを、整
合性を破壊せずにMONTSUQIの外からアクセスするためのインターフェイス。
ここで言う外からのアクセスがWebアプリケーション等であると考えてください。
又、
整合性を破壊せずとは
ORCA内2つのテーブルを更新しようとしたときに片方だけが更新されずに処理
が終了することは、無いということです。(すべてうまく更新されるか、すべ
て失敗するかのいずれかです)
但し、テーブル内の各項目の整合性についてのチェックは行えません。
通常のSQL文がそのままHAKAMA経由で実行されると考えてください。
・全体の流れについて
TCP通信
----------- --------- -------------
| ORCADB | ←→ | HAKAMA | ←→ | 電子カルテ |
----------- --------- -------------
(→の情報は基本的にok or ng情報に近いもの)
・HAKAMAの使用方法について
現在サポートされているのはRubyおよびJavaとなっています。
(1)手順としては
1.認証確認
2.DBOPEN
3.トランザクションスタート
4.DB検索、更新、追加、削除
5.トランザクションエンド
6.DBCLOSE
となります。
(2)使用定義体について
MONTSUQI(HAKAMA)を使用する場合には、(ORCAプロジェクトもこれを使用
しています。)
woodyの場合 /usr/lib/jma-receipt/record内のXXX.dbを使用します。
(XXX:テーブル仕様書のテーブル名を半角小文字にしたもの)
この中に上記(1)の4の定義を記述します。
(実際のSQL文形式で)
(3)Rubyによる使用説明例(Javaの場合呼び出し表現が変わりますが)
1.認証確認
DB_Server.new("localhost",0,"ormaster","ormaster");
2.DBOPEN
server.dbops("DBOPEN");
3.トランザクションスタート
server.dbops("DBSTART");
4.DB検索、更新、追加、削除
server.recordops("DBSELECT","tbl_wksryact","opas1",tbl_wksryact);
server.recordops("DBFETCH","tbl_wksryact","opas1",tbl_wksryact)
server.recordops("DBINSERT","tbl_wksryact","opas1",tbl_wksryact)
(※1)
5.トランザクションエンド
server.dbops("DBCOMMIT");
6.DBCLOSE
server.dbops("DBDISCONNECT");
で1つの処理が完了です。
実際には、4の処理内で各電子カルテで色々な条件チェックが入ることにな
ると思います。
※1:ここの
DBSELECT :ファンクション名
tbl_wksryact:テーブル定義名
opas1:パス名
となりますがこれを、上記(2)でのtbl_wksryact.dbに記述する必要が
あります。(最下部に補記として記述例を付けます)
(4)問題点
以上のようにしてORCAのDBにアクセスが可能ですが
・全てのDBをどのようにでも扱える(点数マスタを全て削除も可能)
(但し、ORCAのDBをすべて理解すれば、メリットにもなり得る)
・DB構造が変更となった場合にそれに追随するかどうかを毎回チェック
する必要がある。
・必要なORCAのDB仕様を理解する必要がある。
(各項目等のチェックがORCA側で電子カルテから追加更新されたとき
にできない)
メリット
・それぞれが基本的に独立して開発が可能
(ORCA側の開発は殆ど無い)
【補記】
定義体記述例(ワーク診療行為)
tbl_wksryact {
HOSPID char(24);
NYUGAIKBN char(1);
PTID number(10,0);
SRYKA char(2);
SRYYMD char(8);
HKNCOMBI number(4,0);
・
・
};
primary {
HOSPID,NYUGAIKBN,PTID,SRYKA,SRYYMD,HKNCOMBI,ZAINUM,RENNUM;
};
#-----> OPAS用定義
path opas1 { ←これがパス名
DBSELECT { ←これがファンクション名
DECLARE tbl_wksryact_opas1_csr CURSOR FOR
SELECT *
FROM tbl_wksryact
WHERE HOSPID = :HOSPID
AND NYUGAIKBN = :NYUGAIKBN
AND PTID = :PTID
AND SRYKA = :SRYKA
AND SRYYMD = :SRYYMD
AND HKNCOMBI = :HKNCOMBI
ORDER BY ZAINUM,RENNUM
;
};
DBFETCH { ←これがファンクション名
FETCH tbl_wksryact_opas1_csr
INTO
:HOSPID,
:NYUGAIKBN,
:PTID,
:SRYKA,
:SRYYMD,
:HKNCOMBI
;
};
DBUPDATE { ←これがファンクション名
UPDATE tbl_wksryact
SET
HOSPID = :HOSPID,
NYUGAIKBN = :NYUGAIKBN,
PTID = :PTID,
SRYKA = :SRYKA,
SRYYMD = :SRYYMD,
HKNCOMBI = :HKNCOMBI
WHERE HOSPID = :HOSPID
AND NYUGAIKBN = :NYUGAIKBN
AND PTID = :PTID
AND SRYKA = :SRYKA
AND SRYYMD = :SRYYMD
AND HKNCOMBI = :HKNCOMBI
;
};
DBINSERT { ←これがファンクション名
INSERT INTO tbl_wksryact
(
HOSPID,
NYUGAIKBN,
PTID,
SRYKA,
SRYYMD,
HKNCOMBI
)
VALUES (
:HOSPID,
:NYUGAIKBN,
:PTID,
:SRYKA,
:SRYYMD,
:HKNCOMBI
)
;
};
DBDELETE { ←これがファンクション名
DELETE FROM tbl_wksryact
WHERE HOSPID = :HOSPID
AND NYUGAIKBN = :NYUGAIKBN
AND PTID = :PTID
AND SRYKA = :SRYKA
AND SRYYMD = :SRYYMD
AND HKNCOMBI = :HKNCOMBI
;
};
};