2016-04-27 96 views
0

我試圖使用流變量的內容在Dataweave中動態地映射列名。什麼我想要實現靜態版本看起來是這樣的:Dataweave中的動態映射

payload map ((payload01 , indexOfPayload01) -> { 
    COLUMNA: payload01.INPUTA 
}) 

現在,我需要是動態的部分是INPUTA - 我需要A必須從之前設定流量變量派生Dataweave組件。我試過類似的東西:

payload map ((payload01 , indexOfPayload01) -> { 
    COLUMNA: payload01.INPUT#flowVars['varName'] 
}) 

但我得到一個com.mulesoft.weave.grammar.InvalidNamespacePrefixException錯誤。

這是可能實現Dataweave?似乎無法找到任何相關文檔描述如何。

回答

0

使用它像下面。請注意圍繞鍵的括號,這非常重要,因爲()會告知DataWeave首先在其中執行腳本,然後將結果用作外部表達式的值。

payload map ((payload01 , indexOfPayload01) -> { 
    COLUMNA: payload01[('INPUT' ++ flowVars.varName)] 
}) 

讓我知道,這是行不通的。

我看到您的密鑰名稱是COLUMNA,您還可以使用()將varName附加到密鑰。

+0

這工作 - 非常感謝!必須稍作修改,在映射結尾處有一個未使用的')'。我將它改爲:'COLUMNA:payload01 [('INPUT'++ flowVars.varName)]' – danw

+0

哦,是的。最初,我將所有[]的內容包裹在括號中,但之後將其刪除,因爲它不需要,必須忘記最後一個。更正了答案。很高興工作! –

0

嘗試訪問flowVar就像MEL方式:#[flowVars.varName],DONOT前綴payload01

+0

這不工作 - 我想要做的是映射到一個列,'INPUTA',從我入站負載的問題是,'A'部分可能會改變取決於環境,所以不是寫一個不同的Dataweave變換器的負載和基於變量的路由,我更願意在映射是動態的情況下創建一個變壓器。我需要映射到...'payload01.INPUT [動態文本在這裏 - 從變量]' – danw

0

從Dataweave中,您必須訪問下面給出的流程或會話變量。 flowVars.varName sessionVars.varName

您可以使用各種Dataweave操作符來形成最終的字段名稱或值。瞭解Dataweave運算符對於充分利用Dataweave組件至關重要。請通過以下鏈接瞭解Dataweave操作員。

https://docs.mulesoft.com/mule-user-guide/v/3.8/dataweave-operators