基本的なDataWeave式を確認する

Stay hungry. Stay foolish. Your time is limited, so don't waste it living someone else's life.

基本的なDataWeave式を確認する

はじめに

 DataWeave式について確認する機会があったため、確認した結果をまとめた。

目次

下記の内容の動作を確認する。

  1. XMLデータを作成する
  2. GroupBy関数を利用する
  3. 関数を定義する
  4. 日付や数字の表示形式を設定する
  5. SetPayloadで設定されたXMLの型を確認する
  6. lookup関数でサブフローを呼び出す
  7. スクリプト(.dwl)をインポートする

実際に確認

DataWeaveの動作を確認する便利ツールの紹介

DataWeaveを学習するツールが、Muleから公式に提供されているため利用する。

Mule公式ツール:DataWeave Playground

簡単に試せるようにサンプルデータを残す。

[{
    "lastname": "Kawaguchi",
    "firstname": "Masaki",
    "language": "Japaniese",
    "age": 25,
    "sales": 200
},
{
    "lastname": "Sasaki",
    "firstname": "Makoto",
    "language": "English",
    "age": 25,
    "sales": 300
},
{
    "lastname": "Yamamoto",
    "firstname": "Ryouta",
    "language": "Japaniese",
    "age": 25,
    "sales": 500
},
{
    "lastname": "Sakamoto",
    "firstname": "Yuuichi",
    "language": "Chinese",
    "age": 25,
    "sales": 500
}]

1.XMLデータを作成する

属性の指定は、名前の隣に@(…)で定義する。

%dw 2.0
output application/xml
---
{
    "user" @("lastname": payload.lastname,
             "firstname": payload.firstname) : payload.sales
}

2.GroupBy関数を利用する

GroupBy関数の定義は以下の通り。
languageでグループバイ指定している。

%dw 2.0
output application/dw
---
payload groupBy (item) -> item.language

3.関数を定義する

DataWeaveの関数の定義は以下の通り。
DataWeaveの場合、関数の定義はfun、内容は=で定義する。

%dw 2.0
output application/json
fun toUpper(aString) = upper(aString)
---
payload map (item, index) -> (
    {
        "lastname": toUpper(item.lastname)
    }
)

4.日付や数字の表示形式を設定する

日付や数字の表示形式の指定方法は以下の通り。

%dw 2.0
output application/json
---
{ 
    date: now() as String {format: 'yyyy-MM-dd'},
    currency: 1.54 as String {format: '0.##'}
}

3.SetPayloadで設定されたXMLの型を確認する

SetPayloadにXMLをハードコーディングした場合、文字列として扱われる。
XMLで扱いたい場合は、read関数を利用する必要がある。

5.Lookup関数でサブフローを呼び出す

lookup関数を使って、サブフローの実行結果を取得することができる。

サブフローは、Lookup関数で参照できないので注意が必要。

6.スクリプト(.dwl)をインポートする

別ファイルにDataWeaveの関数を定義して、コンポーネントのDataWeave式で呼び出すことができる。

型指定は、変数:型の順に定義する。

%dw 2.0
fun greeting(name: String) = "Hi! " ++ name
%dw 2.0
//import modules::customDWScript
import greeting from modules::customDWScript
output application/json
---
//customDWScript::greeting("Masaki!!")
greeting("Masaki!!")