- 概述
鉴于国内医疗市场上,还有一些遗留系统使用PB9,Delphi7等开发技术,为加快开发进度,使第三方能尽快调用由Ensemble提供的标准HL7 V2的webservice服务,先提供几种常见语言调用Ensemble的HL7 V2 webservice接口例子。请大家根据实际情况测试并使用
假设在Production中加入了EnsLib.HL7.Service.SOAPService.CLS这个预制的Business Service并将其命名为PeiXunHl7SoapIn,那么,外部系统可以通过如下endpoint访问HL7 V2 Webservice
http://localhost:57772/csp/peixunpro/EnsLib.HL7.Service.SOAPService.CLS?CfgItem=PeiXunHl7SoapIn
JavaJava
CfgItem=PeiXunHl7SoapIn这是一个重要的参数,CfgItem是固定写法,PeiXunHl7SoapIn是你的BS的名称。
其中,通过参数CfgItem,可以访问由同一个Business Service类开放,但以不同的名称暴露出来的SOAP接口。例如再加入一个同样的SOAP Business Service,取名为V2Service,那么访问http://localhost:57772/csp/peixunpro/EnsLib.HL7.Service.SOAPService.CLS?CfgItem=V2Service则可进入新加的这个BS。
使用Java,PB9和Delphi7访问该SOAP接口的示例见下一节,其他没有示例的语言也可通过这样的endpoint调用V2 SOAP Webservice。
小贴士:注意一下各种语言中,对HL7 V2 Segment分隔符的定义,在以下代码示例注释内容有标注,例如:PB使用char(13)+char(10)作为回车换行、Delphi中换行符为#13+#10
- 代码样例
2.1Java
-
package hl7.send; import java.rmi.RemoteException; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; public class SendHl7MSG{ public String invokeRemoteFuc() { String endpoint ="http://localhost:57772/csp/peixunpro/EnsLib.HL7.Service.SOAPService.CLS?CfgItem=PeiXunHl7SoapIn"; String result = "no result!"; Service service = new Service(); Call call; Object[] object = new Object[1]; //注意换行符 String s1 = "\r\n"; String str="MSH|^~\\&|HIS|MediInfo|MediII|MediInfo|20150118162159||SIU^S12|145d03160de54b29a74eefa761ae4e05|P|2.4"+s1+"SCH||A1002||||(原因)正常预约|||||^^^07:11~07:22^^^^07:11~07:22|||||||||||||||112211522"+s1+"RGS|||"; object[0]= str; try { call = (Call) service.createCall(); call.setTargetEndpointAddress(endpoint);// 远程调用路径 call.setOperationName("Send");// 调用的方法名 // 设置参数名: call.addParameter("Input", // 参数名 XMLType.XSD_STRING,// 参数类型:String ParameterMode.IN);// 参数模式:'IN' or 'OUT' // 设置返回值类型: call.setReturnType(XMLType.XSD_STRING);// 返回值类型:String result = (String) call.invoke(object);// 远程调用 } catch (ServiceException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } return result; } public static void main(String[] args) { SendHl7MSG t = new SendHl7MSG(); String result=null; result = t.invokeRemoteFuc(); System.out.println(result); } }
JavaJava
2.2 PB 9
String endPoint="http://192.168.2.64:57772/csp/jhip/EnsLib.HL7.Service.SOAPService.cls?CfgItem=HISHL7SoapIn"
soapconnection lsc_conn //获取soap类
hl7v2servicesoap lsrv_obj //调用wsdl
lsc_conn =create soapconnection
//实例化,这里使用Ensemble提供的endPoint,即加上CfgItem配置项的地址
lsc_conn.createinstance(lsrv_obj,"hl7v2servicesoap",endPoint)
//PB使用char(13)+char(10)作为回车换行
//另外注意~字符为PB中的转义字符,同时也是HL7中的重复分隔符,因此PB中要用两个~来表示
string msg=""
msg="MSH|^~~\&|HIS||JHIP||20150119163230||ADT^A01^ADT_A01|8E64C7FE-7750-482E-BC58-DC358FF0A05|P|2.4||||||UTF8"+char(13)+char(10)
msg+="EVN||20150119163230|||2341^张医生|20150119163230"
msg+=char(13)+char(10)+"PID|1||685923^^^^PI~~2^^^^VN||张三^^ZhangSan||19610524000000|M||AB|开拓路^海淀区^北京^ 北京市^100085^^B||^^^^^^13868108756|^^^^^^13868108756||M^已婚||||||12^汉族||||CHN^中国|||||||||||||北京信息技术有限公司|软件工程师NK1|1||BRO||||||||||电业局|||||||||||||||||李四^^lisi|^^^^^^13723412432|四季青路7号^海淀区^北京^北京市^100097"
msg+=char(13)+char(10)+"PV1|1|I|A30600^^306007^10108&内分泌专科|U|||225^郭四|||||||7||Y|225^郭四四|84|10030791|||||||||||||||||||||||10108||20150119162910|||8000||7000DG1|1||E11.900^2型糖尿病||20160728170353|A"
mle_2.text=lsrv_obj.send(msg) //方法调用
ObjectScriptObjectScript
2.3 Delphi 7
procedure TForm1.Button1Click(Sender: TObject);
var
mHttpRIO: THTTPRIO;
mServiceSoap: HL7v2ServiceSoap;
msg: String;
result:String;
begin
mHttpRIO := THTTPRIO.Create(nil);
try
//将URL设置为EndPoint,即加上CfgItem配置项的
mHttpRIO.URL := 'http://192.168.2.64:57772/csp/jhip/EnsLib.HL7.Service.SOAPService.cls?CfgItem=HISHL7SoapIn';
mHttpRIO.HTTPWebNode.UseUTF8InHeader := true; //添加该行,指定采用UTF-8代码传输
mHttpRIO.Converter.Encoding:='UTF-8';
mServiceSoap := mHttpRIO as HL7v2ServiceSoap
// Delphi中换行符为#13+#10
msg:='MSH|^~\&|HIS||JHIP||20150119163230||ADT^A01^ADT_A01|8E64C7FE-7750-482E-BC58-DC358FF0A05|P|2.4||||||UTF8'+#13+#10;
msg:=msg+'EVN||20150119163230|||2341^张医生|20150119163230';
msg:=msg+#13+#10+'PID|1||685923^^^^PI~~2^^^^VN||张三^^ZhangSan||19610524000000|M||AB|开拓路^海淀区^北京^ 北京市^100085^^B|';
msg:=msg+'|^^^^^^13868108756|^^^^^^13868108756||M^已婚||||||12^汉族||||CHN^中国|||||||||||||北京信息技术有限公司|软件工程师NK1|1||BRO||||||||||电业局|||||||||||||||||李四^^lisi|^^^^^^13723412432|四季青路7号^海淀区^北京^北京市^100097';
msg:=msg+#13+#10+'PV1|1|I|A30600^^306007^10108&内分泌专科|U|||225^郭四|||||||7||Y|225^郭四四si|84|10030791|||||||||||||||||||||||10108||20150119162910|||8000||7000DG1|1||E11.900^2型糖尿病||20160728170353|A';
result:=mServiceSoap.Send(msg);//调用webService中方法
showmessage(result) ;
Memo2.Text:=result;
except
end;
JavaScriptJavaScript
专业好文