3

Web サービス リスナーとして設定された Mirth チャネルがあり、ID を受け取り、HL7 クエリ メッセージを作成してこのクエリを送信し、最終的に HL7 応答を返します。

  • チャンネル名: QueryChanel
  • ソース コネクタ タイプ: Web サービス リスナー
  • 宛先コネクタ名: QueryToVista
  • 宛先コネクタ タイプ:LLP 送信者。

これは、クエリから返される典型的な HL7 応答です。次のようになります。

MSH|~|\&|VAFC RECV|FACILITY|VAFC TRIGGER||20121011141136-0800||ADR~A19|58269|D|2.4|||NE|NE|USA
MSA|AA|1234|
QRD|20121011051137|R|I|500000001|||1^ICN|***500000001***|ICN|NI|
EVN|A1|20121004064809-0800||A1|0^^^^^^^^USVHA\\0363^L^^^NI^TEST FACILITY ID\050\L|20121004064809-0800|050
PID|1|500000001V075322|500000001V075322^^^USVHA\\0363^NI^VA FACILITY ID\050\L~123123123^^^USSSA\\0363^SS^TEST FACILITY ID\050\L~9^^^USVHA\\0363^PI^VA FACILITY ID\050\L||JOHN^DOE^^^^^L|""|19800502|M||""|""^""^""^""^""^^P^""^""~^^""^""^^^N|""|""|""||S|""||123123123|||""|""||||||""||
PD1|||SOFTWARE SERVICE^D^050
ZPD|1||||||||||||||||""

Source の Response From パラメータをQueryToVistaに設定すると、上記のすべてを返すことができます

ただし、上記のメッセージから値500000001のみを返したいです。QueryChanel の宛先でトランスフォーマーをいじってみましたが、成功しませんでした。

アップデート:

次のように、同じチャネルの QueryToVista コネクタの後に javascriptwriter コネクタを追加しようとしました。

   var destination = responseMap.get('QueryToVista');
   var responseMessage = destination.getMessage();

   //Fails with following error: TypeError: Cannot read property "QRD.4" from undefined
   var customack = ResponseFactory.getSuccessResponse(responseMessage['QRD']['QRD.4']  ['QRD.4.1'].toString())**


   //work but send the whole HL7 message
   var customack = ResponseFactory.getSuccessResponse(responseMessage.toString())**


   responseMap.put('Barcode', customack);

通常の変換を使用して要素を取得できないようです。ありがとうございました。

4

2 に答える 2

3

あなたは正しい道を進んでいますが、あなたの更新はいくつかの問題を示しています。ただし、[概要] タブで [チャネルの同期] がオンになっている限り、2 つの宛先を使用するという基本的なアプローチは有効です。

問題1

あなたの例では、解析したい HL7 応答は、パイプで区切られた HL7 形式です。E4X 表記 (例: responseMessage['QRD']['QRD.4']['QRD.4.1']) を使用して要素にアクセスするには、まずそれを E4X XML オブジェクトに変換する必要があります。これは 2 つのステップで実行できます。

  • パイプ区切りの HL7 文字列を XML 文字列に変換します。
  • XML 文字列を E4X XML オブジェクトに変換する

JavaScript Writer の Javascript トランスフォーマー (Javascript Writer スクリプト自体ではない)

var response = responseMap.get("QueryToVista");
var responseStatus = response.getStatus();

// Get's the pipe delimited HL7 string
var responseMessageString = response.getMessage();

if (responseStatus == "SUCCESS")
{
    // converts the pipe delimited HL7 string into an XML string
    // note: the SerializeFactory object is available for use in transformer
    //       scripts, but not in the Javascript destination script itself
    var responseMessageXMLString = SerializerFactory.getHL7Serializer(false,false,true).toXML(responseMessageString);

    // convert the XML string into an E4X XML object
    var responseMessageXMLE4X = new XML(responseMessageXMLString);

    // grab the value you want
    var ack_msg = responseMessageXMLE4X['QRD']['QRD.4']['QRD.4.1'].toString();

    channelMap.put('ack_msg', ack_msg)
}
else
{
    // responseStatus probably == "FAILURE" but I'm not sure of the full range of possibilities
    // take whatever failure action you feel is appropriate
}

編集* *

問題 2 があるとは思いません。あなた自身のアプローチを見直した後、私はもう少し遊んで、SOAP 応答を生成するためのあなたのアプローチが実際に正しいことを確認したと信じています。このセクションを編集して、まだ機能するより単純なコードを反映させます。

Javascript Writer スクリプトで

var barcode = channelMap.get('ack_msg');
var mirthResponse = ResponseFactory.getSuccessResponse(barcode);
responseMap.put('Barcode', mirthResponse);
于 2012-10-16T21:28:21.030 に答える
0

ありがとうございます。

私は遊んで、私のソリューションを見て、あなたのソリューションを見て、XMLの部分である問題のボトルネックも指摘しました。すでに新しいXMLに従ってXMLにキャストする必要があることに気づきませんでしたtoXML関数を呼び出します:)

これが私のスクリプトですが、基本的なことですが、将来役立つと思う人のために投稿すると思います。

var destination = responseMap.get('QueryToVista');
var responseMessage = destination.getMessage();
var Xmsg = new XML(SerializerFactory.getHL7Serializer().toXML(responseMessage));

var xml_msg = '<?xml version="1.0" encoding="utf-8" ?>'+
              '<XML><Patient Name="'+Xmsg['PID']['PID.5']['PID.5.1']+
              '" Barcode="'+Xmsg['QRD']['QRD.8']['QRD.8.1']+'" /></XML>';

var sResp = ResponseFactory.getSuccessResponse(xml_msg)

responseMap.put('Response', sResp);
于 2012-10-17T20:43:46.177 に答える