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

StackOverflow https://stackoverflow.com//questions/21001790

  •  20-12-2019
  •  | 
  •  

Question

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.

Was it helpful?

Solution 2

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

OTHER TIPS

REPLY FROM: "narupley" Mirth Employee

If your destination has queuing enabled, then it does not make sense to respond from that destination (or from a custom variable created by the destination's response transformer). The whole point of destination queuing is to drop a receiving message in a queue and move on. There would be nothing to respond from, because your destination hasn't even sent the message yet.

There are some hacky ways around it, but you should probably rethink your message/channel workflow instead. Generally this is done by moving the point of queuing up higher in the chain. So if Channel 1 sends to Channel 2 which sends to some outbound system, and Channel 1 should receive the response from the outbound system, then Channel 1 should be the one with destination queuing enabled, not Channel 2. Of course, this means that the originating system that sent to Channel 1 in the first place would not be able to receive that response.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top