Mirth 3.0의 사용자 정의 승인을 위해 응답 변환기에서 응답 개체를 어떻게 처리합니까?

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

  •  20-12-2019
  •  | 
  •  

문제

저는 Mirth 3.0.1.7051을 사용하고 있습니다.

현재 Mirth 2.2.2.6388에 2개의 작업 채널이 있습니다.

채널 1) test_adt_hl7_to_xml 채널 2) test_xml_sender

채널 1 - HL7 메시지를 수신하여 사용자 정의 XML로 변환하고 채널 2로 보냅니다.채널 2 - HTTP 수신기로 전송되는 XML을 수신합니다.이는 HTTP 수신기의 XML 응답 승인과 함께 작동합니다.응답은 XML 형식입니다.

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

발송신청까지 모두 처리가 가능합니다."지속 대기열"을 켤 때까지.ON으로 설정하면 예상대로 응답이 항상 대상에서 대기열에 추가됩니다.응답이 XML 형식이므로 응답 보내기를 사용할 수 없습니다.

Response Transformer에서 사용하기 위해 이 채널을 Mirth 3.0으로 옮겼습니다.

응답 변환기에는 다음 코드가 있습니다.

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

소스 커넥터의 "응답 설정->응답"에서 "ACK"를 선택했습니다.

로그에서 응답 개체의 메시지 내용을 볼 수 있습니다.그러나 응답은 채널 1(TEST_ADT_HL7_To_XML)에 도달하지 않습니다.

신청할 때:

return "My Message response";

"포스트 프로세서 스크립트"에서 응답을 받습니다.하지만 "응답 변환기"가 생성한 응답 개체("ACK")에 액세스할 수 없습니다.

나는 이 포럼의 모든 '응답' 스레드를 읽었습니다.Mirth 버전 2.x를 시도했고 이제 버전 3을 시도했습니다.그러나 나는 해결책에 더 가까워지지 않습니다.

채널 1이 XML 응답을 수신하도록 응답 개체를 올바르게 처리하려면 어떻게 해야 합니까?

귀하의 도움에 미리 감사드립니다.

도움이 되었습니까?

해결책 2

Mirth v3.01을 사용한 내 솔루션:소스 채널 변환기(TEST_ADT_HL7_To_XML)에서:

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

응답 종료 채널 응답 변환기(TEST_XML_Sender)에서 - 응답 플래그를 업데이트합니다.

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}

응답 종료 채널 포스트 프로세서 (test_xml_sender) - 응답 설정을 "Post Processor"로 설정하십시오.(영원히 기다리지 않으려면 타임아웃을 사용하세요)

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

다른 팁

답장 보낸 사람:"narupley" Mirth 직원

대상에서 대기열이 활성화된 경우 해당 대상(또는 대상의 응답 변환기에서 생성된 사용자 정의 변수)에서 응답하는 것은 의미가 없습니다.대상 대기열의 전체 요점은 수신 메시지를 대기열에 삭제하고 계속 진행하는 것입니다.목적지가 아직 메시지를 보내지 않았기 때문에 응답할 내용이 없습니다.

이에 대한 몇 가지 해킹 방법이 있지만 대신 메시지/채널 작업 흐름을 다시 생각해 봐야 할 것입니다.일반적으로 이는 대기열 지점을 체인의 더 높은 위치로 이동하여 수행됩니다.따라서 채널 1이 일부 아웃바운드 시스템으로 전송하는 채널 2로 전송하고 채널 1이 아웃바운드 시스템으로부터 응답을 수신해야 하는 경우 채널 1은 채널 2가 아닌 대상 큐잉이 활성화된 채널이어야 합니다.물론 이는 처음에 채널 1로 보낸 발신 시스템이 해당 응답을 수신할 수 없음을 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top