2016-04-27 74 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