APP下载

自定义病历模板在EMR中的实现*

2016-11-30王春华

菏泽学院学报 2016年5期
关键词:窗体控件病历

吴 兵,王春华

(1.安徽工贸职业技术学院计算机系,安徽淮南 232001;2.山东省成武县振兴中学,山东成武 274200)



自定义病历模板在EMR中的实现*

吴 兵1,王春华2

(1.安徽工贸职业技术学院计算机系,安徽淮南 232001;2.山东省成武县振兴中学,山东成武 274200)

医院管理工作中电子病历系统(EMR)的使用提高了医院信息化工作的水平,但各大小类型不同医院对于EMR中病历格式规范不尽相同[1],因此病历模板的定制增加了EMR开发工作的难度,提出一种基于用户自定义病历模板的应用技术,让用户在EMR软件界面中通过拖拽控件、定义标注图形等实现自己需要的电子病历模板.该应用技术的实现提高了EMR系统的通用性.

病历;EMR;自定义;模板

引言

现阶段EMR的病历模板一般采用XML格式或者Word格式,不论采取何种格式,在EMR开发工作中,需要调研用户医院各个临床医疗科室的病历书写规范,尽管国家卫生部门对于病历书写有相关的一些规范指导,但具体到每一家医院,由于各个医院大小类型,以及业务范围不同,所使用的病历样式内容也不尽相同,总是存在一些偏差[2].因此,EMR设计开发人员需要根据每种类型医院的病历格式,甚至每家不同医院分别在软件开发阶段设计不同的模板.这种由软件开发人员定制模板的方式不利于EMR软件的维护,降低了软件的通用性.

在EMR系统中提供一个用户可以随意拖拽控件、标注、图形的UI界面,该界面分为包含“控件”,“标注”,“图形”等元素的工具箱区域和类似Word空白页面的绘制区域.在绘制区域中用户可通过鼠标拖拽工具箱中的元素,以及添加相应的文字说明,从而完成一份符合本院需求的病历模板,根据病历模板标题结构生成对应的SQL数据库表,病历内容存放在数据库表中,最终EMR可根据此模板调取病历内容嵌入打印.以上基于用户自定义的方式生成病历模板,提高了EMR软件的通用性,降低了软件维护成本,既是应用软件也是一种工具软件.

1 相关技术介绍

1.1 Net中可视化控件拖拽功能

在应用程序中通过对控件的MouseEnter、MouseMove、MouseDown等来实现在WinForm窗体上控件的拖拽.其中主要经过步骤,首先鼠标移动至窗体控件上左键点击并按下时发生MouseDown事件,此时由事件参数MouseEventArgs返回控件所在窗体坐标点,其次拖拽移动时发生MouseMove事件,在此事件中获取控件新坐标点,最后赋值给控件新坐标点[3].

1.2 SQL数据库技术

微软的SQL Server 从7.0到目前成熟的2008版本提供了关于应用软件数据管理强大的功能,原则上只要硬件条件允许,可以无限创建数据库表[4].在前端程序语言中结合SQL结构化查询语言可以方便的对关系型数据进行增、删、改、查等操作.从病历模板到相应的数据库表生成,必然要使用SQL结构化查询语言(CREATE TABLE),如:CREATE TABLE 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型…….).

1.3 C#中Word类库的使用

在程序中创建word文档可以通过微软提供的Microsoft Word X Object Library,其中X代表版本号.在C#中Word对象模型包含五大对象,其中,Application 代表Microsoft Word应用程序本身,Document 代表一个Word文档,Selection 代表当前选中的区域,Bookmarks 表示书签,Range 代表一块区域,与Selection类似,不过一般不可见.

每次编写代码时,都应从Application对象开始.在Word中处理某个特定文档时,这个文档就称为活动文档,并且可通过Application对象的ActiveDocument属性引用.如下:

Word.Application wapp = new Microsoft.Office.Interop.Word.Application();wapp.Visible = true;

2 自定义病历模板功能实现

2.1 病历元素集合表

在VS2010开发环境中参照纸质病历采集病历中的标题、符号以及图形,形成标题集、符号集,对应新建数据库表为标题表、符号表.标题集中各标题元素采用动态生成Lable标签控件的方式,每个Lable控件Text属性为对应的标题表中的Title_name字段内容.符号集类似生成,所不同之处在于一些特殊符号无法在数据库表中存储,因此在表中设置一字段Char_speci为特殊字符标识,如上标字符#,则字段Char _name存储内容为“#”,对应字段Char _speci内容为“Superscript”代表上标,Superscript在程序Word对象当中代表元素上标属性,在设置特殊字符Char _name与Char _speci应遵循Word类库中的语意.为保存标题符号所在窗体的位置,以便在窗体加载时呈现设置好的自定义病历模板样式需要创建标题符号位置表.主要生成三个表结构见表1~3:

表1 标题表

表2 符号表

表3 标题符号位置表

2.2 自定义病历窗体Form

窗体中在合适的位置设置可供用户检索选择的标题和符号集合,采用.Net提供的TextBox和ListView控件进行检索并展示,在TextBox控件的TextChanged事件中代码:

private void txtTitle_TextChanged(object sender, EventArgs e)

{

string strSql = "select * from EMR_TitleTable where Title_name like′ %"+txtTitle.Text+ "%′ ";

DataSet dsTitle = SqlBaseClass.Query(strSql);

lvTitle.Items.Clear();

foreach (DataRow dr in dsTitle.Tables[0].Rows)

{

ListViewItem liv = new ListViewItem();

liv.SubItems[0].Text = dr["Title_id"].ToString();//标题编码

liv.SubItems.Add(dr["Title_name"].ToString());//标题名称

liv.SubItems.Add(dr["Title_font"].ToString());//字体

liv.SubItems.Add(dr["Title_size"].ToString());//大小

liv.SubItems.Add(dr["Title_info"].ToString());//标题备注

lvTitle.Items.Add(liv);

}

}

标题txtTitle控件检索标题元素并展示的效果图,如图1所示:

图1 检索效果图

选择列表中标题确定后,则动态生成Lable控件放置在窗体一侧,通过鼠标左键点击Lable控件进行拖拽到合适位置,鼠标MouseDown事件中返回的MouseEventArgs参数值,获取标题或者符号Lable在窗体中新坐标位置,并在程序中设置变量保存新坐标值和标题符号元素在数据库中表主键.主要代码如下:

private Label CurrentSelctLable;//获取当前选中的Label,用于标签的拖拽功能

List

private void LableMouseDown(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{ movePoint = e.Location; CurrentSelctLable = (Label)sender; }

}

private void LableMouseMove(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{ CurrentSelctLable.Location = new Point(CurrentSelctLable.Location.X + e.X - movePoint.X, CurrentSelctLable.Location.Y + e.Y - movePoint.Y);

}

}

private void LabelClick(object sender, EventArgs e)

{

CurrentSelctLable = (Label)sender;

}

鼠标双击ListView时,动态生成Label标签并加入List集合中,indexLable为当前集合元素索引值.用户经过拖拽标题或符合元素后,在窗体上形成类似word页面效果,如图2所示:

图2 窗体页面word效果

标题右侧阴影为内容填写控件,该控件也是动态生成,通过用户拖拽到合适位置的.

2.3 病历窗体的保存及Word模板的生成

经过用户拖拽动态生成的控件形成自定义病历窗体后,需要把这些控件及控件相应的窗体位置保存,在下一次打开该窗体或者打开编辑病历内容窗体时呈现出来.利用控件的Loaction属性可获取当前标题、符号以及内容填写控件在窗体中坐标位置,标题符号控件名称、内容控件名称以及控件位置坐标这三个重要属性通过运行程序代码保存至数据库标题符号位置表中.初始化病历模板窗体时可遍历标题符号位置表,获取标题符号编码,在相应表中的名称和标题字符控件位置字段内容(TitleChar _loaction),利用字段TitleChar_type动态生成标题符号以及编辑内容控件.

利用微软提供的Word对象模型可在应用程序编写上实现对word文档的创建、打开、读写等操作.基于医院病历的格式,在word中设置若干个表格,采用表格式填写的方式.窗体上标题符号元素可直接写入新建word表格中,部分编辑内容采用插入书签的方式在word文档中进行标注,word中各个标题之间的距离可参照自定义窗体上各个标题元素之间的距离按照合适的比例大小在word表格中用单元格进行控制. 主要代码如下:

Public void InsertText(string bookmark, string text) //插入一段文字,text为文字内容

{

objectoStart =bookmark;

objectrange =wordDoc.Bookmarks.get_Item(refoStart).Range;

Paragraphwp =wordDoc.Content.Paragraphs.Add(refrange);

wp.Format.SpaceBefore= 6;

wp.Range.Text =text;

wp.Format.SpaceAfter =24;

wp.Range.InsertParagraphAfter();

wordDoc.Paragraphs.Last.Range.Text =" n";

}

3 结语

利用.Net类库提供的控件拖拽功能与Word二次开发技术,并结合数据库表存储实现用户自定义电子病历模板的功能,一方面提供EMR软件的通用性,另一方面也减少了软件工作人员的维护工作量.比较现阶段应用较广泛的EMR,采用用户自定义的方式定制病历模板,把病历模板具体内容由医疗专业人员完成,解决了以往病历内容一旦有所改动,那么软件开发人员必须从底层修改程序代码的问题,从而真正实现EMR软件适用于不同级别、不同地区医院.

[1]姚志洪,刘雷.中国医疗卫生信息化进展[M].上海交通大学出版社,2010.

[2]夏洪斌,蔡剑飞,陈金雄等.结构化电子病历系统应用与体会[J].医疗卫生装备,2009.30(5):46-47.

[3]Ian Griffiths. Programming C# 5.0[M]. O′Reilly Media, Inc,USA.,2012.

[4]徐人凤.SQLServer2005数据库及应用[M].高等教育出版社,2007.

[5]Christian nagel,jay glynn,MorganSkinner.C#高级编程(第九版)[M].清华大学出版社,2014.

Implementation of User-defined Medical Record Template in EMR

WU Bing1, WANG Chun-hua2

(1. Department of Computer Science, Anhui Industry &Trade Vocational Technical College, Huainan Anhui 232001, China;2. Zhenxing Middle School of Chengwu, Chengwu Shandong 274200, China)

The use of electronic medical record system (EMR) in hospital work management improves the level of hospital information work, but EMR format specifications are not the same in different types of hospitals. Therefore, the medical record template customization also increased the difficulty of the development of EMR. This paper presents an application technology based on user defined medical record template, which allows users to use the drag and drop control in the EMR software interface to define the graphics and other electronic medical records. Meanwhile, the application technology improves the generality of the EMR.

medical record;EMR;user-defined;template

1673-2103(2016)05-0063-05

2016-10-01

安徽省高等学校省级质量工程项目(2015sjjd048)

吴兵(1973-),男,安徽淮南人,讲师,硕士,研究方向:企业ERP.

TP311.5

A

猜你喜欢

窗体控件病历
强迫症病历簿
“大数的认识”的诊断病历
试谈Access 2007数据库在林业档案管理中的应用
关于.net控件数组的探讨
为何要公开全部病历?
村医未写病历,谁之过?
基于LayeredWindow的异形窗体局部刷新
巧设WPS窗体控件让表格填写更规范
就这样玩会VBA中常见的自定义控件
WinCE.net下图形用户界面的开发