¿Cómo proceso los objetos de respuesta en el transformador de respuesta para el acuse de recibo personalizado en Mirth 3.0?

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

  •  20-12-2019
  •  | 
  •  

Pregunta

Estoy usando mirth 3.0.1.7051.

Actualmente tengo 2 canales de trabajo en la mirth 2.2.2.6388.

canal 1) test_adt_hl7_to_xml Canal 2) test_xml_sender

Canal 1: recibe un mensaje HL7, lo convierte en un XML personalizado y envíelo al canal 2. Canal 2: recibe un envío XML a un oyente HTTP. Esto funciona con un acuse de recibo de respuesta XML del oyente HTTP. La respuesta está en un formato XML.

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

Soy capaz de procesarlo todo el camino a la solicitud de envío. Hasta que enciendo "colas persistentes". Una vez que se enciende, la respuesta siempre será cola del destino como se esperaba. El uso de la respuesta de envío no funciona, ya que la respuesta está en formato XML.

He movido estos canales a Mirth 3.0 para hacer uso en el transformador de respuesta.

En el transformador de respuesta, tengo el siguiente código:

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

En el conector de origen, en "Configuración de respuesta-> Respuesta", seleccioné "ACK"

Soy capaz de ver el contenido de mensaje de objeto de respuesta en los registros. Pero la respuesta no lo hace al canal 1 (test_adt_hl7_to_xml).

cuando aplico:

return "My Message response";

En el "Script de post procesador", recibo una respuesta. Pero no puedo acceder al objeto de respuesta ("ACK") que creó el "transformador de respuesta".

He leído cada hilo de "respuesta" en este foro. Probé la versión 2.x 2.x y ahora la versión 3. Pero no me estoy acercando a una solución.

¿Cómo puedo procesar correctamente el objeto de respuesta para que el canal 1 reciba la respuesta XML?

Muchas gracias de antemano por su ayuda.

¿Fue útil?

Solución 2

Mi solución con Mirth V3.01: En el transformador de canal de origen (test_adt_hl7_to_xml):

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

En el transformador de respuesta del canal final de respuesta (test_xml_sender): actualice el indicador de respuesta.

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}

En el post-procesador del canal final de respuesta (test_xml_sender): configure la configuración de respuesta a "POST PROCESOR" Escribe un bucle while.(Use un tiempo de espera si lo desea, no quiere esperar para siempre)

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

Otros consejos

Respuesta de: "Narupley" Empleado de la alegría

Si su destino tiene habilitado en la cola, no tiene sentido responder de ese destino (o de una variable personalizada creada por el transformador de respuesta del destino).El punto de que la cola de destino es dejar un mensaje de recepción en una cola y seguir adelante.No habría nada de qué responder, porque su destino aún no ha enviado el mensaje.

Hay algunas formas hacky a su alrededor, pero probablemente debería repensar su flujo de trabajo de mensaje / canal.En general, esto se hace moviendo el punto de hacer cola más alto en la cadena.Por lo tanto, si el canal 1 envía al canal 2, que se envía a algún sistema de salida, y el canal 1 debe recibir la respuesta del sistema saliente, el canal 1 debe ser el que tiene la cola de destino habilitada, no el canal 2., por supuesto, esto significa que elEl sistema de origen que se envía al canal 1 en primer lugar no podrá recibir esa respuesta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top