1. **概述**

鉴于国内医疗市场上,还有一些遗留系统使用PB9,Delphi7等开发技术,为加快开发进度,使第三方能尽快调用由Ensemble提供的标准HL7 V2的webservice服务,先提供几种常见语言调用Ensemble的HL7 V2 webservice接口例子。请大家根据实际情况测试并使用

假设在Production中加入了EnsLib.HL7.Service.SOAPService.CLS这个预制的Business Service并将其命名为PeiXunHl7SoapIn,那么,外部系统可以通过如下endpoint访问HL7 V2 Webservice

http:<span class="hljs-comment">//localhost:57772/csp/peixunpro/EnsLib.HL7.Service.SOAPService.CLS?CfgItem=PeiXunHl7SoapIn</span>

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,PB9Delphi7访问该SOAP接口的示例见下一节,其他没有示例的语言也可通过这样的endpoint调用V2 SOAP Webservice。

小贴士:注意一下各种语言中,对HL7 V2 Segment分隔符的定义,在以下代码示例注释内容有标注,例如:PB使用char(13)+char(10)作为回车换行、Delphi中换行符为#13+#10
 
  1. 代码样例
**         2.1J****ava**
  1. <span class="hljs-keyword">package</span> hl7.send;
    
    <span class="hljs-keyword">import</span> java.rmi.RemoteException;
    <span class="hljs-keyword">import</span> javax.xml.rpc.ParameterMode;
    <span class="hljs-keyword">import</span> javax.xml.rpc.ServiceException;
    <span class="hljs-keyword">import</span> org.apache.axis.client.Call;
    <span class="hljs-keyword">import</span> org.apache.axis.client.Service;
    <span class="hljs-keyword">import</span> org.apache.axis.encoding.XMLType;
    
    <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SendHl7MSG</span></span>{
        <span class="hljs-function"><span class="hljs-keyword">public</span> String <span class="hljs-title">invokeRemoteFuc</span><span class="hljs-params">()</span> </span>{
           String endpoint =<span class="hljs-string">"http://localhost:57772/csp/peixunpro/EnsLib.HL7.Service.SOAPService.CLS?CfgItem=PeiXunHl7SoapIn"</span>;
            String result = <span class="hljs-string">"no result!"</span>;
            Service service = <span class="hljs-keyword">new</span> Service();
            Call call;
            Object[] object = <span class="hljs-keyword">new</span> Object[<span class="hljs-number">1</span>];
            <span class="hljs-comment">//注意换行符  </span>
            String s1 = <span class="hljs-string">"\r\n"</span>;
            
            String str=<span class="hljs-string">"MSH|^~\\&|HIS|MediInfo|MediII|MediInfo|20150118162159||SIU^S12|145d03160de54b29a74eefa761ae4e05|P|2.4"</span>+s1+<span class="hljs-string">"SCH||A1002||||(原因)正常预约|||||^^^07:11~07:22^^^^07:11~07:22|||||||||||||||112211522"</span>+s1+<span class="hljs-string">"RGS|||"</span>;
            object[<span class="hljs-number">0</span>]= str;
            <span class="hljs-keyword">try</span> {
                call = (Call) service.createCall();
                call.setTargetEndpointAddress(endpoint);<span class="hljs-comment">// 远程调用路径</span>
                call.setOperationName(<span class="hljs-string">"Send"</span>);<span class="hljs-comment">// 调用的方法名</span>
                <span class="hljs-comment">// 设置参数名:</span>
                call.addParameter(<span class="hljs-string">"Input"</span>, <span class="hljs-comment">// 参数名</span>
                        XMLType.XSD_STRING,<span class="hljs-comment">// 参数类型:String</span>
                        ParameterMode.IN);<span class="hljs-comment">// 参数模式:'IN' or 'OUT'</span>
                <span class="hljs-comment">// 设置返回值类型:</span>
                call.setReturnType(XMLType.XSD_STRING);<span class="hljs-comment">// 返回值类型:String          </span>
                result = (String) call.invoke(object);<span class="hljs-comment">// 远程调用</span>
            } <span class="hljs-keyword">catch</span> (ServiceException e) {
                e.printStackTrace();
            } <span class="hljs-keyword">catch</span> (RemoteException e) {
                e.printStackTrace();
            }
            <span class="hljs-keyword">return</span> result;
        }
        <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
            SendHl7MSG t = <span class="hljs-keyword">new</span> SendHl7MSG();
            String result=<span class="hljs-keyword">null</span>;
            result = t.invokeRemoteFuc();
            System.out.println(result);
        }
    }

 

  •  
  • 2.2 PB 9

    String endPoint=<span class="hljs-string">"http://192.168.2.64:57772/csp/jhip/EnsLib.HL7.Service.SOAPService.cls?CfgItem=HISHL7SoapIn"</span>
    soapconnection lsc_conn <span class="hljs-comment">//获取soap类 </span>
    hl7v2servicesoap lsrv_obj   <span class="hljs-comment">//调用wsdl                                                                                                       </span>
    lsc_conn =create soapconnection   
    <span class="hljs-comment">//实例化,这里使用Ensemble提供的endPoint,即加上CfgItem配置项的地址</span>
    lsc_conn.createinstance(lsrv_obj,<span class="hljs-string">"hl7v2servicesoap"</span>,endPoint)   
    <span class="hljs-comment">//PB使用char(13)+char(10)作为回车换行</span>
    <span class="hljs-comment">//另外注意~字符为PB中的转义字符,同时也是HL7中的重复分隔符,因此PB中要用两个~来表示</span>
    string msg=<span class="hljs-string">""</span>
    msg=<span class="hljs-string">"MSH|^~~\&|HIS||JHIP||20150119163230||ADT^A01^ADT_A01|8E64C7FE-7750-482E-BC58-DC358FF0A05|P|2.4||||||UTF8"</span>+char(<span class="hljs-number">13</span>)+char(<span class="hljs-number">10</span>)
    msg+=<span class="hljs-string">"EVN||20150119163230|||2341^张医生|20150119163230"</span>
    msg+=char(<span class="hljs-number">13</span>)+char(<span class="hljs-number">10</span>)+<span class="hljs-string">"PID|1||685923^^^^PI~~2^^^^VN||张三^^ZhangSan||19610524000000|M||AB|开拓路^海淀区^北京^ 北京市^100085^^B||^^^^^^13868108756|^^^^^^13868108756||M^已婚||||||12^汉族||||CHN^中国|||||||||||||北京信息技术有限公司|软件工程师NK1|1||BRO||||||||||电业局|||||||||||||||||李四^^lisi|^^^^^^13723412432|四季青路7号^海淀区^北京^北京市^100097"</span>
    msg+=char(<span class="hljs-number">13</span>)+char(<span class="hljs-number">10</span>)+<span class="hljs-string">"PV1|1|I|A30600^^306007^10108&内分泌专科|U|||225^郭四|||||||7||Y|225^郭四四|84|10030791|||||||||||||||||||||||10108||20150119162910|||8000||7000DG1|1||E11.900^2型糖尿病||20160728170353|A"</span>
    mle_2.text=lsrv_obj.send(msg)            <span class="hljs-comment">//方法调用       </span>
     

    2.3 Delphi 7

    procedure TForm1.Button1Click(Sender: TObject);
    <span class="hljs-keyword">var</span>
      mHttpRIO: THTTPRIO;
      mServiceSoap: HL7v2ServiceSoap;
      msg: <span class="hljs-built_in">String</span>;
      result:<span class="hljs-built_in">String</span>;
    begin
      mHttpRIO := THTTPRIO.Create(nil);
      <span class="hljs-keyword">try</span>
        <span class="hljs-comment">//将URL设置为EndPoint,即加上CfgItem配置项的</span>
        mHttpRIO.URL := <span class="hljs-string">'http://192.168.2.64:57772/csp/jhip/EnsLib.HL7.Service.SOAPService.cls?CfgItem=HISHL7SoapIn'</span>;
        mHttpRIO.HTTPWebNode.UseUTF8InHeader := <span class="hljs-literal">true</span>;  <span class="hljs-comment">//添加该行,指定采用UTF-8代码传输</span>
        mHttpRIO.Converter.Encoding:=<span class="hljs-string">'UTF-8'</span>;
        mServiceSoap := mHttpRIO <span class="hljs-keyword">as</span> HL7v2ServiceSoap
        <span class="hljs-comment">// Delphi中换行符为#13+#10</span>
        msg:=<span class="hljs-string">'MSH|^~\&|HIS||JHIP||20150119163230||ADT^A01^ADT_A01|8E64C7FE-7750-482E-BC58-DC358FF0A05|P|2.4||||||UTF8'</span>+#<span class="hljs-number">13</span>+#<span class="hljs-number">10</span>;
        msg:=msg+<span class="hljs-string">'EVN||20150119163230|||2341^张医生|20150119163230'</span>;
        msg:=msg+#<span class="hljs-number">13</span>+#<span class="hljs-number">10</span>+<span class="hljs-string">'PID|1||685923^^^^PI~~2^^^^VN||张三^^ZhangSan||19610524000000|M||AB|开拓路^海淀区^北京^ 北京市^100085^^B|'</span>;
        msg:=msg+<span class="hljs-string">'|^^^^^^13868108756|^^^^^^13868108756||M^已婚||||||12^汉族||||CHN^中国|||||||||||||北京信息技术有限公司|软件工程师NK1|1||BRO||||||||||电业局|||||||||||||||||李四^^lisi|^^^^^^13723412432|四季青路7号^海淀区^北京^北京市^100097'</span>;
        msg:=msg+#<span class="hljs-number">13</span>+#<span class="hljs-number">10</span>+<span class="hljs-string">'PV1|1|I|A30600^^306007^10108&内分泌专科|U|||225^郭四|||||||7||Y|225^郭四四si|84|10030791|||||||||||||||||||||||10108||20150119162910|||8000||7000DG1|1||E11.900^2型糖尿病||20160728170353|A'</span>;
        result:=mServiceSoap.Send(msg);<span class="hljs-comment">//调用webService中方法</span>
        showmessage(result) ;
        Memo2.Text:=result;
      except
      end;