2017-08-10 39 views
1

請有人確認以下內容.. 我正在使用歡樂連接3.5.08232。 我的源連接器是數據庫讀取器。歡樂連接數據庫讀取器自動列映射

說,我正在使用一個返回多行的查詢,並返回結果(通過JavaScript),如文檔所示,以便Mirth將每行視爲一個單獨的消息。我還使用了幾個映射器作爲源變換器,並將映射的字段保存在我的頻道映射中(最終只包含我在變換器中定義的那些字段)

在目標中,特別是在目標響應變換器(或目的主體,如果它是一個JavaScript編寫器),我如何訪問源字段?

我通過反覆試驗發現,唯一的辦法就是

var rawMsg = connectorMessage.getRawData(); 
var xmlMsg = new XML(rawMsg); 
logger.info(xmlMsg.some_field); // ignore the root element of rawMsg 

這是做這個正確的方式?我認爲可能自動檢測到的字段會被放入某種地圖中,比如sourceMap--但似乎並非如此,對吧?

謝謝

回答

3

如果您使用的是您的變壓器映射步驟提取數據,並把它變成一個可變的地圖(如信道映射圖),那麼你可以使用以下方法來從檢索後續的JavaScript環境(包括JavaScript的作家,和你的迴應變壓器):

var value = channelMap.get('key'); 
var value = $c('key'); 
var value = $('key'); 

看更多信息,User Guide的變量映射部分。

因此,回顧一下,假設您使用數據庫讀取器選擇列「mycolumn」。向通道發送的XML將是這樣的:

<result> 
    <mycolumn>value</mycolumn> 
</result> 

然後你可以選擇提取該消息的塊放入供以後使用特定的變量。變壓器允許您輕鬆拖放樣品入站消息的各個部分。 在JavaScript作家Mapper Transformer Step

最後(或任何後續的過濾器,變壓器,或響應變壓器),只需將值成你想要的領域: JavaScript Writer

和相應的JavaScript代碼會自動插入: Inserted Code

最後一個音符,如果你選擇的變量很多,並不想爲每一個映射單獨的步驟,您可以使用JavaScript步驟通過迭代消息和每一列提取到一個單獨的地圖變量:

for each (child in msg.children()) { 
    channelMap.put(child.localName(), child.toString()); 
} 

或者,您也可以直接從JavaScript的作家中只是引用列:

var msg = new XML(connectorMessage.getEncodedData()); 

var column1 = msg.column1.toString(); 
var column2 = msg.column2.toString(); 
... 
+0

感謝您的回覆 - 併爲您的很多職位在歡樂支持網站上。在特定的情況下,我寧願所有的變量都以某種方式自動映射 - 實際上它已經完成 - 只是通過原始輸入消息的序列化內部表示來獲取它們。 - 我想知道的原因是可能有很多很多變量 - 並且逐個添加它們會非常繁瑣。但無論如何 - 如果沒有這種方式(或者自動爲所有輸入字段創建映射的方式,比如說),那麼我會很樂意將您的答案標記爲答案。 –

+1

如果您有很多人,您當然不必單獨創建Mapper步驟。例如,使用JavaScript步驟可以自動映射所有內容。我更新了我的答案,注意到這一點。 –