Mirth 3.0でカスタム確認応答のために応答トランスフォーマー内の応答オブジェクトを処理する方法

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

  •  20-12-2019
  •  | 
  •  

質問

Mirth 3.0.1.7051を使用しています。

現在、Mirthに2回の作業チャンネルを持っています2.2.2.6388。

チャネル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>
.

私はそれを送信側アプリケーションにずっと処理することができます。 「持続キュー」をオンにするまで。これがオンになると、応答は常に予想通りに目的地からキューに入れられます。応答がXML形式であるため、送信応答を使用しないでください。

私はこれらのチャンネルを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」

を選択しました。

Responseオブジェクトのメッセージ内容をログに表示できます。しかし、応答はチャンネル1(TEST_ADT_HL7_TO_XML)にはなりません。

申請時:

return "My Message response";
.

「POSTプロセッサスクリプト」では、応答が得られます。ただし、「応答トランスフォーマー」が作成されたレスポンスオブジェクト( "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プロセッサ」に設定します。 whileループを書きます。(永遠に待ったくない場合はTimeOoutを使用してください)

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 Employee

宛先がキューイングを有効にした場合は、その宛先から(または宛先の応答トランスによって作成されたカスタム変数から)応答することは意味がありません。宛先キューイングの全体のポイントは、受信メッセージをキューに投下して進みます。あなたの宛先がまだメッセージを送信していないので、答えることは何もないでしょう。

それの周りにいくつかのハッキーな方法がありますが、代わりにあなたはおそらくあなたのメッセージ/チャネルワークフローを再考するべきです。一般的にこれはチェーン内でより高いキューイングの点を動かすことによって行われます。したがって、チャネル1がいくつかのアウトバウンドシステムに送信するチャネル2に送信し、チャネル1はアウトバウンドシステムからの応答を受信する必要があります。チャネル1は、チャネル2ではなく宛先キューイングが有効になっている必要があります。最初の場所でチャネル1に送信された発信システムはその応答を受けることができないでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top