在 mule 3 中定义全局数据编织函数

Define global dataweave function in mule 3

我正在为有效载荷定义全局函数,但在 dataweave 1.0 中我无法完成该任务。 我必须定义一个单独的全局数据编织文件,我必须在其中添加有效负载的条件,例如 if gender== "male" then title= "mr." 我怎样才能完成任务。我已经添加了我的输入和预期的有效负载。

输入负载:

{
    "persons": [
        {
            "name": "Devendra",
            "gender": "male",
            "age": 25
        },
        {
            "name": "aman",
            "gender": "male",
            "age": 16
        }
    ]
}

预期负载:

{
    "persons": [
        {
            "title": "MR.",
            "name": "Devendra",
            "gender": "male",
            "age": 25,
            "adult": true
        },
        {
            "title": "MS.",
            "name": "Seema",
            "gender": "female",
            "age": 16,
            "adult": false
        }
    ]
}

在 Dataweave 1 中,您可以通过在 src/main/resources 中创建一个 dwl 文件来定义全局库,如下所示:

src/main/resources/dw/myFunctions.dwl:

%dw 1.0
%function titleForGender(gender)("mr" when gender=="male" otherwise "whoKnows?")
---
{
"titleForGender": titleForGender
}

此脚本创建一个全局函数,然后在 body 中公开它,以便其他脚本可以使用它。

然后在你的主要 dw 转换中是这样的:

%dw 1.0
%output application/json

%var sampleData={persons:[{name:"Devendra", gender:"male",age:25}, {name:"aman", gender:"male",age:16}]}
%var lib = readUrl("classpath://dw/myfunctions.dwl")
 ---
persons: sampleData.persons map {
    "person": $ ++ {title: lib.titleForGender($.gender)}
}

它使用readUrl从全局文件中读取函数作为var lib,然后在映射人员数据时使用它,将gender传递给函数并获取函数返回的标题。

这输出:

{
  "persons": [
    {
      "person": {
        "name": "Devendra",
        "gender": "male",
        "age": 25,
        "title": "mr"
      }
    },
    {
      "person": {
        "name": "aman",
        "gender": "male",
        "age": 16,
        "title": "mr"
      }
    }
  ]
}