第六課-Channel Study For TCP Listener & HTTP Listener & Web Service Listener About Response Handler
经过前面章节的课程,对Mirth Connect在系统集成与数据交互中的使用有了一个大概的了解;大家一定有个疑惑,Mirth Connect如何组织响应消息并返回给调用者?今天我们就来继续深入讲解Response响应处理机制。
C#示例:
本课程我们将通过C#编程语言调用Mirth Connect接口服务来讲述,C#示例截图如下:
C#测试客户端
C#版本Webservice接口服务
TCP Listener 信道示例:
新建信道并设置源端输入输出参数格式、目的端输入输出格式、响应输入输出参数格式
设置源端TCP Listener参数
设置目的端Channel Writer参数
设置源端转换规则
源端新建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();
}
}
目的端响应转换规则
在‘输出消息模板’中录入如下xml格式模板并添加如下js脚本
<patient>
<pid></pid>
<ret></ret>
</patient>
tmp['pid']=$('pid');
tmp['ret']=$('Ret');
运行C#版TCP Sender,进行如上测试,成功获取响应,验证Mirth Connect 的TCP Listener信道OK!
HTTP Listener 信道示例:
新建信道并设置源端输入输出参数格式、目的端输入输出格式、响应输入输出参数格式
设置源端HTTP Listener参数
设置源端转换规则;源端新建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();
}
}
设置目的端Channel Writer参数
目的端响应转换规则;在‘输出消息模板’中录入如下xml格式模板并添加如下js脚本
<patient>
<pid></pid>
<ret></ret>
</patient>
tmp['pid']=$('pid');
tmp['ret']=$('Ret');
运行C#版HTTP Sender,进行如上测试,成功获取响应,验证Mirth Connect 的HTTP Listener信道OK!
Web Service Listener 信道示例:
新建信道并设置源端输入输出参数格式、目的端输入输出格式、响应输入输出参数格式
设置源端Web Service Listener参数
设置源端转换规则;源端新建Mapper映射转换步骤,在‘输入消息模板’录入如下XML消息模板
<patient>
<pid></pid>
<ret></ret>
</patient>
设置目的端Channel Writer参数
目的端转换规则;在‘输出消息模板’中录入如下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>臺灣'<&>"台中</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);
目的端响应转换规则;在‘输出消息模板’中录入如下xml格式模板并添加如下js脚本
<xml>
<ret></ret>
<pat></pat>
</xml>
tmp['ret']=$('Ret');
tmp['pat']=$('patinfo');
运行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参数指定此作为响应。



![((9G@8X`}~]L`5Y10COF$X1 ((9G@8X`}~]L`5Y10COF$X1](https://img2020.cnblogs.com/blog/1675351/202101/1675351-20210124153100876-2122890944.png)



![6PMFJBXA2)FGSXBF4D]7ZPJ 6PMFJBXA2)FGSXBF4D]7ZPJ](https://img2020.cnblogs.com/blog/1675351/202101/1675351-20210124153103994-937699041.png)
![GMS_~UEDWW[S33G}9@KAY]I GMS_~UEDWW[S33G}9@KAY]I](https://img2020.cnblogs.com/blog/1675351/202101/1675351-20210124153104712-1683048623.png)
![I[$4OO623ZHDL~EKNOZYLWE[1] I[$4OO623ZHDL~EKNOZYLWE[1]](https://img2020.cnblogs.com/blog/1675351/202101/1675351-20210124153105444-1428912801.png)
![H]`4%@RG0MVET3G_`48@B{W H]`4%@RG0MVET3G_`48@B{W](https://img2020.cnblogs.com/blog/1675351/202101/1675351-20210124153106147-5355894.png)

![K4DDMV0%W$JTAF(KFS~HGVS[1] K4DDMV0%W$JTAF(KFS~HGVS[1]](https://img2020.cnblogs.com/blog/1675351/202101/1675351-20210124155640209-2104324477.png)
JO_XTP 9{PV%`AUX](L(3O`)JO_XTP](https://img2020.cnblogs.com/blog/1675351/202101/1675351-20210124155640988-409836507.png)
![$GK2@027E93G$YA8]G3OH3E $GK2@027E93G$YA8]G3OH3E](https://img2020.cnblogs.com/blog/1675351/202101/1675351-20210124155641691-1957942879.png)



![HATXNQXAX60I~O}663K]WZP[1] HATXNQXAX60I~O}663K]WZP[1]](https://img2020.cnblogs.com/blog/1675351/202101/1675351-20210124164514369-1014139134.png)



![G(I)]HL4`BVX_)S@JW)S{B7 G(I)]HL4`BVX_)S@JW)S{B7](https://img2020.cnblogs.com/blog/1675351/202101/1675351-20210124164517252-1132155255.png)
![`SC(~H8()`(X17[D1HQ%QNS[1] `SC(~H8()`(X17[D1HQ%QNS[1]](https://img2020.cnblogs.com/blog/1675351/202101/1675351-20210124164517929-1306077578.png)
浙公网安备 33010602011771号