Como processar objetos de resposta no transformador de resposta para confirmação personalizada no Mirth 3.0?
Pergunta
Estou usando o Mirth 3.0.1.7051.
Atualmente tenho 2 canais funcionando no Mirth 2.2.2.6388.
Canal 1) test_adt_hl7_to_xml canal 2) test_xml_sender
Canal 1 - Recebe uma mensagem HL7, converte-a em um XML customizado e envia para o Canal 2.Canal 2 - Recebe um envio XML para um ouvinte HTTP.Isso funciona com uma confirmação de resposta XML do ouvinte HTTP.A resposta está em formato XML.
<ADTAck>
<Status>ERROR</Status>
<Message>Payload does not contain a value</Message>
</ADTAck>
Consigo processá-lo até o aplicativo de envio.Até eu ativar "Filas persistentes".Quando estiver ativado, a resposta sempre será enfileirada no destino conforme esperado.Usar a resposta Enviar para não funciona porque a resposta está no formato XML.
Mudei esses canais para o Mirth 3.0 para usá-los no Response Transformer.
No Response Transformer tenho o seguinte 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));
No conector Fonte, em "Configurações de resposta-> Resposta", selecionei "ACK"
Consigo ver o conteúdo da mensagem do objeto de resposta nos logs.Mas a resposta não chega ao canal 1 (TEST_ADT_HL7_To_XML).
Quando eu me inscrevo:
return "My Message response";
no "Script pós-processador", recebo uma resposta.Mas não consigo acessar o objeto de resposta ("ACK") que o "Response Transformer" criou.
Eu li todos os tópicos de 'resposta' neste fórum.Tentei o Mirth versão 2.x e agora a versão 3.Mas não estou chegando mais perto de uma solução.
Como posso processar o Objeto Response corretamente para que o Canal 1 receba a resposta XML?
Muito obrigado antecipadamente pela sua ajuda.
Solução 2
Minha solução com Mirth v3.01:No transformador do canal de origem (TEST_ADT_HL7_To_XML):
globalMap.put("ADTRESPONSE","");
globalMap.put("ADTRESPONSEREADYFLAG","false");
No canal Response End Response Transformer (TEST_XML_Sender) - Atualize o sinalizador de resposta.
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}
No pós -processador do canal final da resposta (test_xml_sender) - defina a configuração de resposta como "pós -processador", escreva um loop de tempo.(use um tempo limite se não quiser esperar para sempre)
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");
Outras dicas
RESPOSTA DE:Funcionário da Mirth "narupley"
Se o seu destino tiver o enfileiramento habilitado, não faz sentido responder desse destino (ou de uma variável personalizada criada pelo transformador de resposta do destino).O objetivo principal do enfileiramento de destino é colocar uma mensagem recebida em uma fila e seguir em frente.Não haveria nada para responder, porque o seu destino ainda nem enviou a mensagem.
Existem algumas maneiras hackeadas de contornar isso, mas você provavelmente deveria repensar seu fluxo de trabalho de mensagem/canal.Geralmente isso é feito movendo o ponto de fila para um ponto mais alto na cadeia.Portanto, se o Canal 1 envia para o Canal 2, que envia para algum sistema de saída, e o Canal 1 deve receber a resposta do sistema de saída, então o Canal 1 deve ser aquele com o enfileiramento de destino habilitado, e não o Canal 2.É claro que isso significa que o sistema de origem que enviou ao Canal 1 em primeiro lugar não seria capaz de receber essa resposta.