蔡春情
摘 ?要: 醫(yī)院信息系統(tǒng)(HIS),是醫(yī)院管理和醫(yī)療活動(dòng)中進(jìn)行信息管理和聯(lián)機(jī)操作的計(jì)算機(jī)應(yīng)用系統(tǒng),為了便于工作,醫(yī)院信息系統(tǒng)常常要與各種其他系統(tǒng)做接口,并將其他系統(tǒng)的信息整合到HIS中。文章介紹了一個(gè)由PB(PowerBuilder)開(kāi)發(fā)的HIS與急診數(shù)據(jù)庫(kù)(ES)連接的實(shí)例,實(shí)現(xiàn)護(hù)士錄入的護(hù)理記錄、醫(yī)囑執(zhí)行等內(nèi)容顯示到醫(yī)生界面,并具有打印護(hù)理記錄的功能。
關(guān)鍵詞: 醫(yī)院信息系統(tǒng); PowerBuilder; 數(shù)據(jù)庫(kù)鏈接; 電子病歷; 控件
中圖分類號(hào):TP311 ? ? ? ? ?文獻(xiàn)標(biāo)志碼:A ? ? 文章編號(hào):1006-8228(2019)10-67-03
Abstract: Hospital Information System(HIS) is a computer application system for information management and on-line operation in hospital management and medical activities. In order to facilitate work, hospital information system often has to interface with various other systems and integrate the information of other systems into HIS. This paper introduces an instance, a HIS developed by PB (PowerBuilder) is connected with emergency database(ES),which the nursing records and execution of doctor's orders entered by nurses displays on doctor's interface, and has the function of printing nursing records.
Key words: HIS; PowerBuilder; database link; EMR; control
0 引言
PowerBuilder(簡(jiǎn)稱‘PB),是由Sybase公司推出的面向?qū)ο蟮募砷_(kāi)發(fā)工具,它有著諸多優(yōu)點(diǎn),作為一種可視化的、面向?qū)ο蟮目焖賾?yīng)用開(kāi)發(fā)工具,一方面它是事件驅(qū)動(dòng)的,開(kāi)發(fā)速度快,另一方面它的成本低、質(zhì)量高、功能強(qiáng),較容易學(xué)習(xí)和掌握。HIS——醫(yī)院信息系統(tǒng),即醫(yī)院管理和醫(yī)療活動(dòng)中進(jìn)行信息管理和聯(lián)機(jī)操作的計(jì)算機(jī)應(yīng)用系統(tǒng),主要是臨床、醫(yī)技人員用來(lái)對(duì)門(mén)診住院病人進(jìn)行接診、醫(yī)囑開(kāi)立等相關(guān)醫(yī)療操作的系統(tǒng)。
目前有不少醫(yī)院使用的HIS系統(tǒng)是由PB工具編譯而成,本文所述案例以筆者所在醫(yī)院(簡(jiǎn)稱‘本院)為背景展開(kāi)分析,主要描述基于PowerBuilder10.0工具,以O(shè)racle10為數(shù)據(jù)庫(kù)環(huán)境的醫(yī)院信息系統(tǒng)中的兩個(gè)具體應(yīng)用[1]。
1 HIS與急診系統(tǒng)信息互通
為了便于工作,醫(yī)院信息系統(tǒng)常常要與各輔助系統(tǒng)做接口,如LIS、PACS、OA等,并將其他系統(tǒng)的信息整合到HIS中。本院各類系統(tǒng)的數(shù)據(jù)存儲(chǔ)均是Oracle數(shù)據(jù)庫(kù),各數(shù)據(jù)庫(kù)間的數(shù)據(jù)讀取,可以利用多種方式,以下案例說(shuō)明的是HIS數(shù)據(jù)庫(kù)與急診數(shù)據(jù)庫(kù)(ES)的連接,目的是將護(hù)士錄入的護(hù)理記錄、醫(yī)囑執(zhí)行等內(nèi)容顯示到醫(yī)生界面,另外,要有打印護(hù)理記錄的功能。
1.1 數(shù)據(jù)庫(kù)互連
Oracle數(shù)據(jù)庫(kù)間連接有多種方式,下面列舉三種。
1.1.1 采用開(kāi)發(fā)工具PL/SQL Developer,建立數(shù)據(jù)庫(kù)鏈接
首先,編輯Oralce安裝目錄下的tnsnames.ora文件,配置內(nèi)容如下。
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.80.66)(PORT = 1521)))
(CONNECT_DATA =
(SERVICE_NAME = orcl))
然后,利用PL/SQL工具在HIS庫(kù)中創(chuàng)建一個(gè)Database links,其中,創(chuàng)建所需的Owner代表HIS庫(kù)名,Name代表鏈接名,Username、Password、Database分別是要連接的數(shù)據(jù)庫(kù)的用戶名、密碼及配置地址[2]。用此方法,可直接在HIS庫(kù)中按照‘表名@Name的格式,取ES庫(kù)的表建立視圖,供PB調(diào)用。
1.1.2 建同義詞
下方示例表示將ES庫(kù)的gy_bingrenxx表映射到HIS庫(kù)中去,下面三條語(yǔ)句的作用分別是將gy_bingrenxx表授權(quán)給HIS庫(kù),允許向HIS庫(kù)創(chuàng)建同義詞,將ES庫(kù)的gy_bingrenxx表創(chuàng)建同義詞到HIS庫(kù)里。
grant select on gy_bingrenxx to his;
grant create synonym to his;
create synonym gy_bingrenxx for jz. gy_bingrenxx;
注:此方法適用于單個(gè)表建立連接,不適用批量調(diào)用數(shù)據(jù)庫(kù)信息。
1.1.3 PB多數(shù)據(jù)庫(kù)連接
在PB開(kāi)發(fā)程序中,用下例的語(yǔ)句來(lái)定義HIS與ES兩庫(kù)的存儲(chǔ)區(qū)域,再新建數(shù)據(jù)管道(Data Pipeline)[3],最后通過(guò)settransobject語(yǔ)句建立數(shù)據(jù)庫(kù)連接。其中,sqlca是重要參數(shù),是應(yīng)用程序到數(shù)據(jù)庫(kù)通信鏈接的句柄[4]。
// Profile his
sqlca.DBMS = "O10 Oracle10g (10.1.0)"
sqlca.LogPass = '***'
sqlca.ServerName = "his"
sqlca.LogId = "his"
sqlca.AutoCommit = False
sqlca.DBParm = ""
connect using sqlca;
dw.settransobject(sqlca)
綜上,選擇第一種建立數(shù)據(jù)庫(kù)鏈接的方法,因?yàn)榇朔ê?jiǎn)單、便利。
1.2 面向?qū)ο蟠翱诘慕?/p>
連接好數(shù)據(jù)庫(kù),就可以應(yīng)用PB來(lái)編程了。新建窗口對(duì)象(window),先將界面所需的時(shí)間選擇控件(uo_dateselect)、按鈕控件(uo_comandbutton)、數(shù)據(jù)窗口控件(uo_datawindow)、靜態(tài)文本控件(uo_statictext)等拖動(dòng)到窗口對(duì)象上,然后在各個(gè)控件相關(guān)事件下編寫(xiě)代碼。
第一步,初始化窗口。在窗口的open事件中調(diào)用datawindow.retrieve()函數(shù),搜索當(dāng)前病人的護(hù)理記錄,再按錄入時(shí)間過(guò)濾,uo_statictext默認(rèn)顯示最近的一條記錄。
第二步,數(shù)據(jù)窗口換行顯示。為了更直觀顯示選中的護(hù)理記錄中的所有內(nèi)容,編輯uo_datawindow的rowfocuschanged(換行)事件,當(dāng)使用者選中某行時(shí),uo_statictext顯示此行護(hù)理記錄內(nèi)容。
第三步,護(hù)理記錄打印。因護(hù)理記錄單首頁(yè)(包含病人信息欄與護(hù)理記錄欄)與其他頁(yè)碼(只有護(hù)理記錄欄)不同,固要分開(kāi)兩個(gè)Freeform格式的數(shù)據(jù)窗口打印。首先,兩個(gè)數(shù)據(jù)窗口都檢索出當(dāng)前病人護(hù)理記錄的所有內(nèi)容,并給首頁(yè)病人信息欄賦值。然后,在首頁(yè)數(shù)據(jù)窗口的printpage(打印頁(yè))事件下,判斷pagenumber(頁(yè)碼)是否大于1,是則退出,從而只打印第一頁(yè)。最后,在其他頁(yè)數(shù)據(jù)窗口的print(打?。┖瘮?shù)中,按末行到首行的檢索方式,刪除首頁(yè)已顯示的護(hù)理記錄,再進(jìn)行打印。
2 PB控件應(yīng)用
病歷,是記載和傳遞病人診療全過(guò)程的載體,使病歷達(dá)到結(jié)構(gòu)化、模塊化、質(zhì)量可控化的效果,能夠優(yōu)化診療環(huán)境[5]。為方便操作,HIS系統(tǒng)中常常要調(diào)用一些外部控件,例如本院急診電子病歷調(diào)用的是都昌電子病歷編輯器(DCSoft.Writer.Controls.AxWriterControl)。本院使用的HIS原程序是通過(guò)將都昌編輯器封裝到PB原始的OLE控件中再進(jìn)行調(diào)用,然而在系統(tǒng)的真實(shí)使用過(guò)程中,發(fā)現(xiàn)在控件的顯示、病歷的輸寫(xiě)上略有不便之處。分析原因,是由于HIS急診系統(tǒng)一次只能打開(kāi)一份病歷,病歷與病歷間互相查看不方便,不能進(jìn)行文字的復(fù)制粘貼,且每打開(kāi)一份病歷都要重新加載一次控件,即便是之前打開(kāi)過(guò)的病歷也是如此,嚴(yán)重拖慢速度,影響感知。為了改善用戶體驗(yàn),需要改進(jìn)。
原有程序的調(diào)用方案是打開(kāi)病歷則直接調(diào)用都昌編輯器控件(uo_emrdc),筆者采用OLE控件結(jié)合TAB標(biāo)簽頁(yè)控件的方式,將原來(lái)的單個(gè)對(duì)象改成形如數(shù)組形式的‘對(duì)象組(uo_emrdc[]),并新增病歷標(biāo)簽頁(yè)(tab_bingli)控件作為載體顯示。標(biāo)簽頁(yè)控件的使用,能使用戶界面更簡(jiǎn)潔、美觀、高效[6]。當(dāng)新增一個(gè)病歷或查看歷史病歷時(shí),打開(kāi)一個(gè)新的標(biāo)簽頁(yè),同時(shí)在此標(biāo)簽頁(yè)中附帶一個(gè)編輯器控件。各標(biāo)簽頁(yè)通過(guò)全局變量(病歷記錄號(hào)碼)來(lái)編碼。
tab_bingli.OpenTab(uo_emrdc[i], 'uo_emrdc_bingchengjl', 0)
OpenUserObject(uo_emrdc[i], 'uo_emrdc_bingchengjl',0,0)
tab_bingli.Control[tab_bingli.SelectedTab].Visible = False
以上為程序主要調(diào)用的函數(shù),第一條表示打開(kāi)新標(biāo)簽頁(yè),第二條表示打開(kāi)病歷控件對(duì)象,括號(hào)內(nèi)是傳參,其中uo_emrdc[i]是相應(yīng)的病歷控件對(duì)象,‘uo_emrdc_bingchengjl為病歷控件對(duì)象的名稱即‘病程記錄,數(shù)值‘0是顯示效果所需的變量。此外,雙擊標(biāo)簽頁(yè)的時(shí)候,使用第三條函數(shù)隱藏當(dāng)前病歷,若使用者再次打開(kāi)該病歷,后臺(tái)只需通過(guò)搜尋病歷記錄號(hào)碼,然后將標(biāo)簽頁(yè)設(shè)為可見(jiàn)屬性即可,而無(wú)需重復(fù)初始化控件打開(kāi)病歷,加快速度,提升醫(yī)生感知。打開(kāi)病歷之后的界面顯示等操作繼續(xù)采用原來(lái)的步驟,初始化病歷控件、全局?jǐn)?shù)據(jù)窗口賦值、加載病歷文檔內(nèi)容。
3 結(jié)束語(yǔ)
本文通過(guò)PB工具和pl/sql developer工具的配合來(lái)進(jìn)行程序設(shè)計(jì),建立database link,由PB工具建立數(shù)據(jù)窗口調(diào)用新數(shù)據(jù)庫(kù)的相關(guān)表與視圖,能解決互聯(lián)互通的問(wèn)題。PB對(duì)多種控件的靈活運(yùn)用與相互結(jié)合,也能完善用戶體驗(yàn),使界面更美觀,操作更方便。
在將來(lái),使用.net框架,采用同PB一樣面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言C#或者Java,是HIS系統(tǒng)開(kāi)發(fā)的趨勢(shì)。而目前,PB的開(kāi)發(fā)快捷、方便,在服務(wù)器/客戶機(jī)數(shù)據(jù)庫(kù)編程模式中占據(jù)重要地位,因此,采用PB實(shí)現(xiàn)管理醫(yī)院Oracle數(shù)據(jù)庫(kù)的功能,能提高整個(gè)醫(yī)務(wù)系統(tǒng)的信息化水平[7]。
參考文獻(xiàn)(References):
[1] 劉繼良. 基于Powerbuilder的中醫(yī)診所信息系統(tǒng)的研究與設(shè)計(jì)[D].燕山大學(xué)碩士學(xué)位論文,2016.
[2] Sshmobai.PL/SQL:database links. https://blog.csdn.net/m0_38084243/article/details/81530521, 2018.
[3] 崔杜武,姚全珠,黑新宏,周紅芳. PowerBuilder9.0基層應(yīng)用與系統(tǒng)開(kāi)發(fā)[M]. 電子工業(yè)出版社, 2004.
[4] 張長(zhǎng)富,李勻. PowerBuilder8參考手冊(cè)[M]. 北京希望電子出版社, 2002.
[5] 盧芳芳.基于電子病歷的醫(yī)務(wù)信息管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].電子科技大學(xué)碩士學(xué)位論文, 2018.
[6] 呂雪敏.巧用PowerBuilder數(shù)據(jù)窗口對(duì)象的編輯風(fēng)格[J].寧波搞得??茖W(xué)校學(xué)報(bào), 2003.15(4):38-40
[7] 管鴻,鐘秋海,程春.Oracle 數(shù)據(jù)庫(kù)管理系統(tǒng)在PowerBuilder下的實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程, 2005.31(1):87-140