第六課-Channel Study For TCP Listener & HTTP Listener & Web Service Listener About Response Handler

经过前面章节的课程,对Mirth Connect在系统集成与数据交互中的使用有了一个大概的了解;大家一定有个疑惑,Mirth Connect如何组织响应消息并返回给调用者?今天我们就来继续深入讲解Response响应处理机制。

C#示例:

  本课程我们将通过C#编程语言调用Mirth Connect接口服务来讲述,C#示例截图如下:

YSN}U8~RC8$4L)9OITM4ZJP

C#测试客户端

QHZ~X3N$`[L1{7ZVK3`E0FO

C#版本Webservice接口服务

TCP Listener 信道示例:

((9G@8X`}~]L`5Y10COF$X1

新建信道并设置源端输入输出参数格式、目的端输入输出格式、响应输入输出参数格式

BP16GXN3JQ[9{KAFR{M8UJN

设置源端TCP Listener参数

7F@CHIB4EF$C%0(5Q_%R{R1

设置目的端Channel Writer参数

K}GOM$_TX4PP$TA[T3`RR5F

设置源端转换规则

6PMFJBXA2)FGSXBF4D]7ZPJ

源端新建JS转换步骤,在‘输入消息模板’录入如下HL7消息模板并添加如下js脚本

MSH|^~\&|SMS|IAH|CERNER|PATHNT|200201291848||ADT^A01|CHPFADIT|P|2.3|||AL|NE|
EVN|A01|200201291848|||REJKB1
PID||53820452|00664524|220675537|AHMED^AYALNE^^^^||19781218|M||E|5718 SEMINARY RD #B5^^FALLS CHURCH^VA^22041||(703)379-8374|||||0053820452|220675537||
PV1||I|2324^2302^-B ||||1111111^PINA|||MED|||||||1111111^PINA|S||S|P||||||||||||||||||IAH|||||200201291848|
PV2|||^SEIZURE, FEVER, RLQ PAIN

var dbConn;
try {
      var pid=msg['PID']['PID.2']['PID.2.1'].toString();
      var name=msg['PID']['PID.5']['PID.5.2'].toString();
      var sex=msg['PID']['PID.8']['PID.8.1'].toString();
      var dob=msg['PID']['PID.7']['PID.7.1'].toString();
      var addr=msg['PID']['PID.11']['PID.11.3'].toString();
      var ssn=msg['PID']['PID.19']['PID.19.1'].toString();
      channelMap.put('pid',pid);
     dbConn=DatabaseConnectionFactory.createDatabaseConnection('org.mariadb.jdbc.Driver', 'jdbc:mariadb://127.0.0.1:3306/mirthtestdb', 'root', '125353Ct');
      var result=dbConn.executeCachedQuery("select count(*) from  patient WHERE pid = "+pid);
     result.next();
      var icount = result.getInt(1);
      if(icount==0)
      {
         var expression = "INSERT INTO patient (pid,name,sex,dob,addr,ssn) VALUES (?,?,?,?,?,?)";
         var paramList=new Array(pid,name,sex,dob,addr,ssn);
        icount = dbConn.executeUpdate(expression, paramList);
        channelMap.put('Ret','1');
      }else{
          channelMap.put('Ret','0');
      }
      result.close();
} finally {
     if (dbConn) {
         dbConn.close();
     }
}

GMS_~UEDWW[S33G}9@KAY]I

目的端响应转换规则

I[$4OO623ZHDL~EKNOZYLWE[1]

在‘输出消息模板’中录入如下xml格式模板并添加如下js脚本

<patient>
<pid></pid>
<ret></ret>
</patient>

tmp['pid']=$('pid');
tmp['ret']=$('Ret');

H]`4%@RG0MVET3G_`48@B{W

运行C#版TCP Sender,进行如上测试,成功获取响应,验证Mirth Connect 的TCP Listener信道OK!

HTTP Listener 信道示例:

8EA6}NJJ0K66I_G_DPKY%XA

新建信道并设置源端输入输出参数格式、目的端输入输出格式、响应输入输出参数格式

K4DDMV0%W$JTAF(KFS~HGVS[1]

设置源端HTTP Listener参数

9{PV%`AUX](L(3O`)JO_XTP

设置源端转换规则;源端新建JS转换步骤,在‘输入消息模板’录入如下XML消息模板并添加如下js脚本

<patient><pid>110</pid><name>撰獲濟</name><sex>M</sex><dob>19650108</dob><addr>臺灣大學</addr><ssn>33661489</ssn><status>0</status></patient>

var dbConn;
try {
      var pid=msg['pid'].toString();
      var name=msg['name'].toString();
      var sex=msg['sex'].toString();
      var dob=msg['dob'].toString();
      var addr=msg['addr'].toString();
      var ssn=msg['ssn'].toString();
      channelMap.put('pid',pid);
     dbConn=DatabaseConnectionFactory.createDatabaseConnection('org.mariadb.jdbc.Driver', 'jdbc:mariadb://127.0.0.1:3306/mirthtestdb', 'root', '125353Ct');
      var result=dbConn.executeCachedQuery("select count(*) from  patient WHERE pid = "+pid);
     result.next();
      var icount = result.getInt(1);
      if(icount==0)
      {
         var expression = "INSERT INTO patient (pid,name,sex,dob,addr,ssn) VALUES (?,?,?,?,?,?)";
         var paramList=new Array(pid,name,sex,dob,addr,ssn);
        icount = dbConn.executeUpdate(expression, paramList);
        channelMap.put('Ret','1');
      }else{
          channelMap.put('Ret','0');
      }
      result.close();
} finally {
     if (dbConn) {
         dbConn.close();
     }
}

$GK2@027E93G$YA8]G3OH3E

设置目的端Channel Writer参数

MLUCCN1I[ULQ1_1$2MMMEUY

目的端响应转换规则;在‘输出消息模板’中录入如下xml格式模板并添加如下js脚本

<patient>
<pid></pid>
<ret></ret>
</patient>

tmp['pid']=$('pid');
tmp['ret']=$('Ret');

IONFLDVO[VI5T7Y`9AN`4CH

运行C#版HTTP Sender,进行如上测试,成功获取响应,验证Mirth Connect 的HTTP Listener信道OK!

Web Service Listener 信道示例:

_1}6OICI0N[IIW7F}A[C$7Q

新建信道并设置源端输入输出参数格式、目的端输入输出格式、响应输入输出参数格式

HATXNQXAX60I~O}663K]WZP[1]

设置源端Web Service Listener参数

8$PXA2@P710@Y7HU[WW$KGY

设置源端转换规则;源端新建Mapper映射转换步骤,在‘输入消息模板’录入如下XML消息模板

<patient>
<pid></pid>
<ret></ret>
</patient>

T_UHWNU{4JW%`YTEX@$B$NY

设置目的端Channel Writer参数

5654)BVN)D8LXMKLHU(C3P2

目的端转换规则;在‘输出消息模板’中录入如下xml格式模板并添加如下js脚本

<?xml version="1.0" encoding="utf-8" ?><patient><reason></reason><info><pid>103</pid><name>Amarnath Zhao</name><sex>M</sex><dob>19910518</dob><addr>臺灣&apos;&lt;&amp;&gt;&quot;台中</addr><ssn>886</ssn><status>0</status></info></patient>

var dbConn;
try {
     dbConn=DatabaseConnectionFactory.createDatabaseConnection('org.mariadb.jdbc.Driver', 'jdbc:mariadb://127.0.0.1:3306/mirthtestdb', 'root', '125353Ct');
      var result=dbConn.executeCachedQuery("select count(*) from  patient WHERE pid = "+$('pid'));
     result.next();
      var icount = result.getInt(1);
      if(icount==0)
      {
         tmp['reason']='不存在!';
         tmp['info']['pid']='';
         tmp['info']['name']='';
         tmp['info']['sex']='';
         tmp['info']['dob']='';
         tmp['info']['addr']='';
         tmp['info']['ssn']='';
         tmp['info']['status']='';
        channelMap.put('Ret','0');
      }else{
          var result1=dbConn.executeCachedQuery("select * from  patient WHERE pid = "+$('pid'));
          result1.next();
          tmp['reason']='存在.';
           tmp['info']['pid']=result1.getString(1);
           tmp['info']['name']=result1.getString(2);
           tmp['info']['sex']=result1.getString(3);
           tmp['info']['dob']=result1.getString(4);
           tmp['info']['addr']=result1.getString(5);
           tmp['info']['ssn']=result1.getString(6);
           tmp['info']['status']=result1.getString(7);
           result1.close();
          channelMap.put('Ret','1');
      }
      result.close();
} finally {
     if (dbConn) {
         dbConn.close();
     }
}
channelMap.put('patinfo',tmp);

G(I)]HL4`BVX_)S@JW)S{B7

目的端响应转换规则;在‘输出消息模板’中录入如下xml格式模板并添加如下js脚本

<xml>
<ret></ret>
<pat></pat>
</xml>

tmp['ret']=$('Ret');
tmp['pat']=$('patinfo');

`SC(~H8()`(X17[D1HQ%QNS[1]

运行C#版Web Service Sender,进行如上测试,成功获取响应,验证Mirth Connect 的Web Service Listener信道OK!

本课知识点总结

1.TCP\HTTP\Web Service三种Listener的响应消息处理

2.Response均以目的端作为响应

3.数据库JS查询与插入编程

本课扩展思考

请在目的端响应转换中写如下JS脚本responseMap.put('responseAck', ack.toString() );然后在源端Response参数指定此作为响应。


posted @ 2021-01-24 15:31  潤沁網路大學  阅读(915)  评论(0)    收藏  举报
潤沁網路大學