Como processar objetos de resposta no transformador de resposta para confirmação personalizada no Mirth 3.0?

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

  •  20-12-2019
  •  | 
  •  

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top