Определите глобальную функцию dataweave в муле 3 - PullRequest
1 голос
/ 23 мая 2019

Я определяю глобальную функцию для полезной нагрузки, но в dataweave 1.0 я не могу выполнить задачу.Я должен определить отдельный глобальный файл данных, в который я должен добавить условия для полезной нагрузки, например, если пол == "мужской", то заголовок = "мистер".Как я могу выполнить задачу.Я добавил свои входные данные и ожидаемую полезную нагрузку.

входная полезная нагрузка:

{
    "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
        }
    ]
}

1 Ответ

2 голосов
/ 23 мая 2019

В Dataweave 1 вы можете определить глобальную библиотеку, создав файл dwl в src / main / resources следующим образом:

SRC / главная / ресурсы / с.в. / myFunctions.dwl:

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

Этот сценарий создает глобальную функцию, а затем представляет ее в теле, чтобы она была доступна для другого сценария.

Тогда в вашем основном преобразовании 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"
      }
    }
  ]
}
...