Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerDataWeave 式は特定の順序でコンパイルされます。1 つのレベルのコンパイル結果をより高いレベルの式の入力として使用することはできますが、より低いレベルの式の入力として使用することはできません。 開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、DataWeave バージョン 1.2 のドキュメントを参照してください。 他の Mule バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。
次の表では、演算子と関数を、最初にコンパイルされるもの (1) から最後にコンパイルされるもの (10) への順に並べています。
| レベル | 演算子または関数 |
|---|---|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
複数の関数がチェーニングによって 1 つにまとめられると、それらの関数はチェーンで指定された順序で最初の関数から最後の関数まで処理されます。
たとえば、次のスクリプトは、変数 flights によって定義された入力オブジェクトの配列に対して動作します。スクリプトは最初に 500 未満の price 値をすべて受け入れる配列を返す filter をコールします。次に、入力内のオブジェクトを price 値が低い順に並び替えた配列を返す orderBy をコールします。最後に、入力オブジェクト配列を toAirport 値のアルファベット順にグループ化する groupBy をコールします。
%dw 2.0
output application/json
var flights = [
{ "toAirport": "SFO", "price": 550, "airline": "American" },
{ "toAirport": "MUA", "price": 200, "airline": "American" },
{ "toAirport": "SFO", "price": 300, "airline": "American" },
{ "toAirport": "CLE", "price": 600, "airline": "American" },
{ "toAirport": "CLE", "price": 190, "airline": "American" },
{ "toAirport": "SFO", "price": 400, "airline": "American" }
]
---
flights filter $.price < 500 orderBy $.price groupBy $.toAirport
結果は、キー-値ペアのコレクションを含むオブジェクトになります。
{
"CLE": [
{
"toAirport": "CLE",
"price": 190,
"airline": "American"
}
],
"SFO": [
{
"toAirport": "SFO",
"price": 300,
"airline": "United"
},
{
"toAirport": "SFO",
"price": 400,
"airline": "American"
}
],
"MUA": [
{
"toAirport": "MUA",
"price": 200,
"airline": "American"
}
]
}
DataWeave 式に括弧 ( および ) を挿入することで、評価の順序を指定できます。次の例は、前の例と同じ出力を返します。
%dw 2.0
output application/json
var flights = [
{ "toAirport": "SFO", "price": 550, "airline": "American" },
{ "toAirport": "MUA", "price": 200, "airline": "American" },
{ "toAirport": "SFO", "price": 300, "airline": "American" },
{ "toAirport": "CLE", "price": 600, "airline": "American" },
{ "toAirport": "CLE", "price": 190, "airline": "American" },
{ "toAirport": "SFO", "price": 400, "airline": "American" }
]
---
( ( ( flights filter $.price < 500 ) orderBy $.price ) groupBy $.toAirport )
結果は、キー-値ペアのコレクションを含むオブジェクトになります。
{
"CLE": [
{
"toAirport": "CLE",
"price": 190,
"airline": "American"
}
],
"SFO": [
{
"toAirport": "SFO",
"price": 300,
"airline": "United"
},
{
"toAirport": "SFO",
"price": 400,
"airline": "American"
}
],
"MUA": [
{
"toAirport": "MUA",
"price": 200,
"airline": "American"
}
]
}
関数コールの順序は重要です。たとえば、順序を変更した式 flights groupBy $.toAirport filter $.price < 500 orderBy $.price は、エラーを返します。これは、groupBy はオブジェクトを返し、filter は配列を想定しているためです。結果のエラーは Expecting Type: Array>T<, but got: {String: Array<{|toA… airline: String|}>} となります。