[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[orca-dev:00400] Re: Web アプリケーションとの連動



竹田@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
  ;
 };
};