Xml 如何处理响应转换器中的响应对象,以便在Mirth 3.0中进行自定义确认?

Xml 如何处理响应转换器中的响应对象,以便在Mirth 3.0中进行自定义确认?,xml,response,hl7,mirth,Xml,Response,Hl7,Mirth,我用的是欢乐3.0.1.7051 我目前有一个2个工作频道的欢乐2.2.2.6388 通道1)测试ADT HL7到XML 通道2)测试XML发送器 通道1-接收HL7消息,将其转换为自定义XML并发送到通道2。 通道2-接收发送到HTTP侦听器的XML。 这与来自HTTP侦听器的XML响应确认一起工作。 响应是XML格式的 <ADTAck> <Status>ERROR</Status> <Message>Payload does n

我用的是欢乐3.0.1.7051

我目前有一个2个工作频道的欢乐2.2.2.6388

通道1)测试ADT HL7到XML 通道2)测试XML发送器

通道1-接收HL7消息,将其转换为自定义XML并发送到通道2。 通道2-接收发送到HTTP侦听器的XML。 这与来自HTTP侦听器的XML响应确认一起工作。 响应是XML格式的

<ADTAck>
    <Status>ERROR</Status>
    <Message>Payload does not contain a value</Message>
</ADTAck>
在源连接器的“响应设置->响应”下,我选择了“确认”

我能够在日志中看到响应对象的消息内容。但是响应没有到达通道1(TEST_ADT_HL7_to_XML)

当我申请时:

return "My Message response";
在“后处理器脚本”中,我得到了一个响应。但是我无法访问“响应转换器”创建的响应对象(“ACK”)

我已经阅读了这个论坛上的每一条“回复”帖子。尝试了欢乐2.x版,现在是3版。但我还没有找到解决办法

如何正确处理响应对象,以便通道1接收XML响应

非常感谢您的帮助。

回复:“narupley”欢乐员工

如果您的目的地已启用排队,则从该目的地(或从目的地的响应转换器创建的自定义变量)响应是没有意义的。目的地队列的全部要点是将接收消息放到队列中,然后继续。因为你的目的地甚至还没有发送消息,所以没有任何回复


有一些黑客的方法,但你可能应该重新考虑你的消息/频道工作流程。通常,这是通过将排队点移到链中较高的位置来实现的。因此,如果通道1发送到通道2,而通道2发送到某个出站系统,并且通道1应该从出站系统接收响应,那么通道1应该是启用了目标队列的通道,而不是通道2。当然,这意味着首先发送到信道1的发起系统将无法接收该响应

我的快乐v3.01解决方案: 在源通道转换器上(测试\u ADT\u HL7\u到\u XML):

在响应端通道响应转换器(TEST_XML_Sender)上,更新响应标志

if (response.getMessage() != '') 
{
    var ResponseMessage = response.getMessage()
    var ResponseXML = new XML(ResponseMessage.toString());
    globalMap.put("ADTRESPONSE",ResponseXML.toString());
    globalMap.put("ADTRESPONSEREADYFLAG","true");
}else{//wait if queued}
在响应端通道的后处理器(TEST_XML_Sender)上-将响应设置设置为“后处理器” 写一个While循环。(如果您不想永远等待,请使用Timeout)


你们为什么不试着把回应放在全球频道地图上,然后在第二频道里叫它呢?谢谢!!!我从没想过。我试试看。试过了,但没用。GlobalChannel Map.put和GlobalChannel Map.get只能在通道内使用,不能跨通道使用。我在一个通道中“输入”值,在另一个通道中调用它。我总是“得到”空值;谢谢你,希德。我发现使用“globalMap.put”和“globalMap.get”是正确的设置。但您还需要使用globalMap标志,当响应准备就绪时,该标志会更改。清理完代码后,我将发布一个解决方案。@Sid-我需要作为同步通信的一部分返回确认或拒绝。globalMap在通道之间工作。
globalMap.put("ADTRESPONSE","");
globalMap.put("ADTRESPONSEREADYFLAG","false");
if (response.getMessage() != '') 
{
    var ResponseMessage = response.getMessage()
    var ResponseXML = new XML(ResponseMessage.toString());
    globalMap.put("ADTRESPONSE",ResponseXML.toString());
    globalMap.put("ADTRESPONSEREADYFLAG","true");
}else{//wait if queued}
var ADTResponseReadyFlag = globalMap.get("ADTRESPONSEREADYFLAG");

if(debug)logger.info("Start Response Wait")
while(ADTResponseReadyFlag == "false")
{
  ADTResponseReadyFlag = globalMap.get("ADTRESPONSEREADYFLAG");
}
if(debug) logger.info("End Response Wait")
return globalMap.get("ADTRESPONSE");