第七課-Channel Study For HTTP Listener & Web Service Sender Intercommunicates Response Handler
示例说明:
系统A发送XML格式患者信息到Mirth的Source端HTTP Listener,完成患者信息入库逻辑;然后Mirth的Destinations端Web Service Sender调用系统B开放的C#实现的Webservice接口服务完成患者信息的查询并把响应结果返回给最初调用者系统A。这个数据交互通讯过程涉及:系统A---->Mirth---->系统B---->Mirth---->系统A
多信道交互响应消息处理步骤:
新建信道并设置源端输入输出参数格式、目的端输入输出格式、响应输入输出参数格式
设置源端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();
}
}
设置目的端Web Service Sender参数
输入C# Webservice接口响应消息作为响应‘输入参数模板’,对返回值映射到Response Map的自定义变量responseAck中
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<acceptMessageResponse xmlns="http://tempuri.org/">
<acceptMessageResult>string</acceptMessageResult>
</acceptMessageResponse>
</soap:Body>
</soap:Envelope>
var mapping;
try {
mapping = msg.*::['Body'].*::['acceptMessageResponse'].*::['acceptMessageResult'].toString();
} catch (e) {
mapping = '';
}
responseMap.put('responseAck', validate(mapping, '', new Array()));
运行C#版HTTP Sender,进行如上测试,成功获取响应,验证Mirth Connect 的HTTP Listener源通道、Web Service Sender目标通道与C# Webservice接口服务双向交互通讯OK!
本节课知识点总结:
1.Mirth调用外部C#的Webservice接口并获取返回值
2.响应消息通过responseMap变量返回
3.响应消息Raw格式返回C#Webservice的原始格式返回值

![NO~C~OWA(%Z4RCMO}N2QT`0[1] NO~C~OWA(%Z4RCMO}N2QT`0[1]](https://img2020.cnblogs.com/blog/1675351/202101/1675351-20210124192210369-2144978904.png)
![X4JB(S3B~M`{LJRBS$%FDEU[1] X4JB(S3B~M`{LJRBS$%FDEU[1]](https://img2020.cnblogs.com/blog/1675351/202101/1675351-20210124192211295-1893111846.png)

![M}CM]EFFJ7{ZI_9[%XBA~~5[1] M}CM]EFFJ7{ZI_9[%XBA~~5[1]](https://img2020.cnblogs.com/blog/1675351/202101/1675351-20210124192213154-280860247.png)

![5YN9D`]8N{8TRCF5PO5(_X7 5YN9D`]8N{8TRCF5PO5(_X7](https://img2020.cnblogs.com/blog/1675351/202101/1675351-20210124192214768-1259927287.png)
浙公网安备 33010602011771号