基于PowerBuilder的医院信息系统优化

2019-11-11 08:17蔡春情
计算机时代 2019年10期
关键词:控件调用病历

蔡春情

摘  要: 医院信息系统(HIS),是医院管理和医疗活动中进行信息管理和联机操作的计算机应用系统,为了便于工作,医院信息系统常常要与各种其他系统做接口,并将其他系统的信息整合到HIS中。文章介绍了一个由PB(PowerBuilder)开发的HIS与急诊数据库(ES)连接的实例,实现护士录入的护理记录、医嘱执行等内容显示到医生界面,并具有打印护理记录的功能。

关键词: 医院信息系统; PowerBuilder; 数据库链接; 电子病历; 控件

中图分类号:TP311          文献标志码:A     文章编号: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(简称‘PB),是由Sybase公司推出的面向对象的集成开发工具,它有着诸多优点,作为一种可视化的、面向对象的快速应用开发工具,一方面它是事件驅动的,开发速度快,另一方面它的成本低、质量高、功能强,较容易学习和掌握。HIS——医院信息系统,即医院管理和医疗活动中进行信息管理和联机操作的计算机应用系统,主要是临床、医技人员用来对门诊住院病人进行接诊、医嘱开立等相关医疗操作的系统。

目前有不少医院使用的HIS系统是由PB工具编译而成,本文所述案例以笔者所在医院(简称‘本院)为背景展开分析,主要描述基于PowerBuilder10.0工具,以Oracle10为数据库环境的医院信息系统中的两个具体应用[1]。

1 HIS与急诊系统信息互通

为了便于工作,医院信息系统常常要与各辅助系统做接口,如LIS、PACS、OA等,并将其他系统的信息整合到HIS中。本院各类系统的数据存储均是Oracle数据库,各数据库间的数据读取,可以利用多种方式,以下案例说明的是HIS数据库与急诊数据库(ES)的连接,目的是将护士录入的护理记录、医嘱执行等内容显示到医生界面,另外,要有打印护理记录的功能。

1.1 数据库互连

Oracle数据库间连接有多种方式,下面列举三种。

1.1.1 采用开发工具PL/SQL Developer,建立数据库链接

首先,编辑Oralce安装目录下的tnsnames.ora文件,配置内容如下。

ORCL =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.80.66)(PORT = 1521)))

(CONNECT_DATA =

(SERVICE_NAME = orcl))

然后,利用PL/SQL工具在HIS库中创建一个Database links,其中,创建所需的Owner代表HIS库名,Name代表链接名,Username、Password、Database分别是要连接的数据库的用户名、密码及配置地址[2]。用此方法,可直接在HIS库中按照‘表名@Name的格式,取ES库的表建立视图,供PB调用。

1.1.2 建同义词

下方示例表示将ES库的gy_bingrenxx表映射到HIS库中去,下面三条语句的作用分别是将gy_bingrenxx表授权给HIS库,允许向HIS库创建同义词,将ES库的gy_bingrenxx表创建同义词到HIS库里。

grant select on gy_bingrenxx to his;

grant create synonym to his;

create synonym gy_bingrenxx for jz. gy_bingrenxx;

注:此方法适用于单个表建立连接,不适用批量调用数据库信息。

1.1.3 PB多数据库连接

在PB开发程序中,用下例的语句来定义HIS与ES两库的存储区域,再新建数据管道(Data Pipeline)[3],最后通过settransobject语句建立数据库连接。其中,sqlca是重要参数,是应用程序到数据库通信链接的句柄[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)

綜上,选择第一种建立数据库链接的方法,因为此法简单、便利。

1.2 面向对象窗口的建立

连接好数据库,就可以应用PB来编程了。新建窗口对象(window),先将界面所需的时间选择控件(uo_dateselect)、按钮控件(uo_comandbutton)、数据窗口控件(uo_datawindow)、静态文本控件(uo_statictext)等拖动到窗口对象上,然后在各个控件相关事件下编写代码。

第一步,初始化窗口。在窗口的open事件中调用datawindow.retrieve()函数,搜索当前病人的护理记录,再按录入时间过滤,uo_statictext默认显示最近的一条记录。

第二步,数据窗口换行显示。为了更直观显示选中的护理记录中的所有内容,编辑uo_datawindow的rowfocuschanged(换行)事件,当使用者选中某行时,uo_statictext显示此行护理记录内容。

第三步,护理记录打印。因护理记录单首页(包含病人信息栏与护理记录栏)与其他页码(只有护理记录栏)不同,固要分开两个Freeform格式的数据窗口打印。首先,两个数据窗口都检索出当前病人护理记录的所有内容,并给首页病人信息栏赋值。然后,在首页数据窗口的printpage(打印页)事件下,判断pagenumber(页码)是否大于1,是则退出,从而只打印第一页。最后,在其他页数据窗口的print(打印)函数中,按末行到首行的检索方式,删除首页已显示的护理记录,再进行打印。

2 PB控件应用

病历,是记载和传递病人诊疗全过程的载体,使病历达到结构化、模块化、质量可控化的效果,能够优化诊疗环境[5]。为方便操作,HIS系统中常常要调用一些外部控件,例如本院急诊电子病历调用的是都昌电子病历编辑器(DCSoft.Writer.Controls.AxWriterControl)。本院使用的HIS原程序是通过将都昌编辑器封装到PB原始的OLE控件中再进行调用,然而在系统的真实使用过程中,发现在控件的显示、病历的输写上略有不便之处。分析原因,是由于HIS急诊系统一次只能打开一份病历,病历与病历间互相查看不方便,不能进行文字的复制粘贴,且每打开一份病历都要重新加载一次控件,即便是之前打开过的病历也是如此,严重拖慢速度,影响感知。为了改善用户体验,需要改进。

原有程序的调用方案是打开病历则直接调用都昌编辑器控件(uo_emrdc),笔者采用OLE控件结合TAB标签页控件的方式,将原来的单个对象改成形如数组形式的‘对象组(uo_emrdc[]),并新增病历标签页(tab_bingli)控件作为载体显示。标签页控件的使用,能使用户界面更简洁、美观、高效[6]。当新增一个病历或查看历史病历时,打开一个新的标签页,同时在此标签页中附带一个编辑器控件。各标签页通过全局变量(病历记录号码)来编码。

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

以上为程序主要调用的函数,第一条表示打开新标签页,第二条表示打开病历控件对象,括号内是传参,其中uo_emrdc[i]是相应的病历控件对象,‘uo_emrdc_bingchengjl为病历控件对象的名称即‘病程记录,数值‘0是显示效果所需的变量。此外,双击标签页的时候,使用第三条函数隐藏当前病历,若使用者再次打开该病历,后台只需通过搜寻病历记录号码,然后将标签页设为可见属性即可,而无需重复初始化控件打开病历,加快速度,提升医生感知。打开病历之后的界面显示等操作继续采用原来的步骤,初始化病历控件、全局数据窗口赋值、加载病历文档内容。

3 结束语

本文通过PB工具和pl/sql developer工具的配合来进行程序设计,建立database link,由PB工具建立数据窗口调用新数据库的相关表与视图,能解决互联互通的问题。PB对多种控件的灵活运用与相互结合,也能完善用户体验,使界面更美观,操作更方便。

在将来,使用.net框架,采用同PB一样面向对象的程序设计语言C#或者Java,是HIS系统开发的趋势。而目前,PB的开发快捷、方便,在服务器/客户机数据库编程模式中占据重要地位,因此,采用PB实现管理医院Oracle数据库的功能,能提高整个医务系统的信息化水平[7]。

参考文献(References):

[1] 刘继良. 基于Powerbuilder的中医诊所信息系统的研究与设计[D].燕山大学硕士学位论文,2016.

[2] Sshmobai.PL/SQL:database links. https://blog.csdn.net/m0_38084243/article/details/81530521, 2018.

[3] 崔杜武,姚全珠,黑新宏,周红芳. PowerBuilder9.0基层应用与系统开发[M]. 电子工业出版社, 2004.

[4] 张长富,李匀. PowerBuilder8参考手册[M]. 北京希望电子出版社, 2002.

[5] 卢芳芳.基于电子病历的医务信息管理系统设计与实现[D].电子科技大学硕士学位论文, 2018.

[6] 吕雪敏.巧用PowerBuilder数据窗口对象的编辑风格[J].宁波搞得专科学校学报, 2003.15(4):38-40

[7] 管鸿,钟秋海,程春.Oracle 数据库管理系统在PowerBuilder下的实现[J]. 计算机工程, 2005.31(1):87-140

猜你喜欢
控件调用病历
强迫症病历簿
“大数的认识”的诊断病历
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
关于.net控件数组的探讨
基于系统调用的恶意软件检测技术研究
为何要公开全部病历?
村医未写病历,谁之过?
ASP.NET服务器端验证控件的使用
利用RFC技术实现SAP系统接口通信