【问题标题】:Dynamic mapping in DataweaveDataweave 中的动态映射
【发布时间】:2016-04-27 15:31:18
【问题描述】:

我正在尝试使用流变量的内容在 Dataweave 中动态映射列名。我想要实现的静态版本看起来像:

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

现在我需要动态的部分是INPUTA - 我需要从在Dataweave 组件之前设置的流变量派生A。我试过类似的东西:

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

但我收到 com.mulesoft.weave.grammar.InvalidNamespacePrefixException 错误。

这可以在 Dataweave 中实现吗?似乎找不到任何描述如何的相关文档。

【问题讨论】:

    标签: dynamic mule dataweave


    【解决方案1】:

    像下面这样使用它。请注意 key 周围的括号,这非常重要,因为 () 告诉 DataWeave 首先在其中执行脚本,然后将结果用作外部表达式的值。

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

    告诉我这行不通。

    我看到您的键名是 COLUMNA,您也可以使用 () 将 varName 附加到键。

    【讨论】:

    • 这行得通 - 非常感谢!必须做一个小的更正,在您的映射末尾有一个未使用的)。我把它改成了:COLUMNA: payload01[('INPUT' ++ flowVars.varName)]
    • 哦,是的。最初我将 [] 的所有内容都包裹在括号中,但后来因为不需要它而将其删除,一定忘记了结尾。更正了答案。很高兴它成功了!
    【解决方案2】:

    尝试像MEL方式访问flowVar:#[flowVars.varName],不要以payload01前缀

    【讨论】:

    • 这不起作用 - 我要做的是从我的入站有效负载映射到列 INPUTA,问题是 A 部分可能会根据情况而改变因此,与其基于变量编写不同的 Dataweave 转换器和路由,我更愿意制作一个映射是动态的单个转换器。我需要映射到... payload01.INPUT[Dynamic Text Here - from Variable]
    【解决方案3】:

    您必须从 Dataweave 访问 flowvars 或 session vars,如下所示。 flowVars.varName sessionVars.varName

    您可以使用各种 Dataweave 运算符来形成最终字段名称或值。 了解 Dataweave 运算符对于充分利用 Dataweave 组件至关重要。请通过以下链接了解 Dataweave 运算符。

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

    【讨论】:

      猜你喜欢
      • 2019-01-03
      • 2017-12-23
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      相关资源
      最近更新 更多