如何在响应变换器中处理响应对象以获取Mirth 3.0中的自定义确认?

时间:2014-01-08 16:55:02

标签: xml response hl7 mirth

我正在使用Mirth 3.0.1.7051。

我目前在Mirth 2.2.2.6388上有2个工作频道。

频道1)TEST_ADT_HL7_To_XML 频道2)TEST_XML_Sender

通道1 - 接收HL7消息,将其转换为自定义XML并将其发送到通道2。 通道2 - 接收XML发送到HTTP侦听器。 这适用于来自HTTP侦听器的XML响应确认。 响应采用XML格式。

<ADTAck>
    <Status>ERROR</Status>
    <Message>Payload does not contain a value</Message>
</ADTAck>

我能够一直处理它到发送应用程序。直到我打开&#34; Persistent队列&#34;。一旦打开,响应将始终按预期从目标排队。使用发送响应并不起作用,因为响应是XML格式。

我已将这些频道移至Mirth 3.0,以便在Response Transformer上使用。

在Response Transformer中,我有以下代码:

var ResponseMessage = response.getMessage();
logger.info("ResponseMessage: "+ ResponseMessage.toString());
var ResponseXML = new XML(ResponseMessage.toString());
logger.info("Response XML=" + ResponseXML.toString());   
responseMap.put('ACK', ResponseFactory.getSentResponse(ResponseXML));

在源连接器中,在&#34;响应设置 - >响应&#34;下,我选择了&#34;确认&#34;

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

申请时:

return "My Message response";

在&#34;后处理器脚本&#34;中,我得到了回复。但我无法访问响应对象(&#34; ACK&#34;)&#34; Response Transformer&#34;创建

我已经阅读过每一个回复&#39;这个论坛上的帖子。尝试过Mirth版本2.x,现在版本3.但是我没有接近解决方案。

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

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

回复:“narupley”Mirth员工

如果您的目的地已启用排队,那么从该目的地(或目的地的响应变换器创建的自定义变量)做出响应是没有意义的。目标排队的整个目的是将接收消息丢弃在队列中并继续。没有什么可以回应的,因为你的目的地还没有发送消息。

有一些黑客的方法,但你应该重新考虑你的消息/频道工作流程。通常,这是通过在链中向上移动排队点来完成的。因此,如果通道1发送到通道2发送到某个出站系统,而通道1应该从出站系统接收响应,则通道1应该是启用目标排队的通道,而不是通道2.当然,这意味着首先发送到通道1的始发系统将无法接收该响应。

答案 1 :(得分:0)

我的解决方案与Mirth v3.01: 在源通道转换器(TEST_ADT_HL7_To_XML):

globalMap.put("ADTRESPONSE","");
globalMap.put("ADTRESPONSEREADYFLAG","false");

在响应结束通道响应变换器(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循环。 (如果你不想永远等待,请使用timeoout)

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");