Search code examples
xmlresponsehl7mirth

How do I Process Response Objects in the Response Transformer for custom Acknowledgment in Mirth 3.0?


I'm using Mirth 3.0.1.7051.

I currently have a 2 working channels on Mirth 2.2.2.6388.

Channel 1) TEST_ADT_HL7_To_XML Channel 2) TEST_XML_Sender

Channel 1 - Receives an HL7 message, converts it to a custom XML and send it to Channel 2. Channel 2 - Receives an XML send to a HTTP listener. This works with an XML Response acknowledgement from the HTTP listener. The response is in an XML format.

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

I am able to process it all the way to the sending application. Until I turn On "Persistent queues". Once this is ON, the response will always be queued from the destination as expected. Using the Send response to doesn't work as the response is in XML format.

I have moved these channels to Mirth 3.0 to make use on the Response Transformer.

In the Response Transformer I have the following code:

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

In the Source connector, Under "Response Settings->Response", I selected "ACK"

I am able to see the message content of response object in the logs. But the response does not make it to channel 1 (TEST_ADT_HL7_To_XML).

When I apply:

return "My Message response";

in the "Post processor script", I get a response. But I'm unable to access the response object("ACK") that the "Response Transformer" created.

I've read every 'response' thread on this forum. Tried Mirth version 2.x and now version 3. But I'm not getting any closer to a solution.

How can I process the Response Object correctly so that Channel 1 receives the XML response?

Many Thanks in Advance for your help.


Solution

  • My Solution with Mirth v3.01: On the Source channel transformer(TEST_ADT_HL7_To_XML):

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

    On the Response End channel Response Transformer (TEST_XML_Sender) - Update the response flag.

    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}
    

    On the Response End channel Post-Processor(TEST_XML_Sender) - Set the Response setting to "Post Processor" Write a While loop. (use a timeoout if you want don't want to wait forever)

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