DataWeave のフローコントロールとスコープ操作

DataWeave 2.2 は Mule 4.2 と互換性があり、Mule 4.2 にバンドルされています。 このバージョンの Mule は、拡張サポートが終了する 2023 年 5 月 2 日にその すべてのサポート​が終了しました。

このバージョンの Mule を使用する CloudHub には新しいアプリケーションをデプロイできなくなります。許可されるのはアプリケーションへのインプレース更新のみになります。

標準サポートが適用されている最新バージョンの Mule 4 にアップグレード​することをお勧めします。これにより、最新の修正とセキュリティ機能強化を備えたアプリケーションが実行されます。

次の演算子を任意の DataWeave 式内で使用できます。

開始する前に、DataWeave バージョン 2 は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントの ​DataWeave 1.0 ドキュメントセット​を参照してください。他の Mule バージョンの場合は、Mule Runtime の目次のバージョンセレクターを使用できます。

do

do​ ステートメントはスコープを作成します。このスコープ内で、新しい変数、関数、アノテーション、または名前空間を宣言し、使用できます。構文は、​---​ で区切られたヘッダーと本文で構成されるという点でマッピングに似ています。このヘッダーはすべての宣言を定義する場所であり、本文は式の結果です。

この例では、スクリプトの本文から ​myfun()​ がコールされたときに、​do​ を使用して文字列 ​"DataWeave"​ を返します。

DataWeave スクリプト:
%dw 2.0
output application/json
fun myfun() = do {
    var name = "DataWeave"
    ---
    name
}
---
{ result: myfun() }

この例では、スクリプトの本文から変数 ​myVar​ が参照されたときに、​do​ を使用して文字列 ​"DataWeave"​ を返します。

DataWeave スクリプト:
%dw 2.0
output application/json
var myVar = do {
    var name = "DataWeave"
    ---
    name
}
---
{ result: myVar }

どちらのスクリプトも次の出力を生成します。

出力:
{
  "result": "DataWeave"
}

次の例では、​do​ を使用して、​test(p: String)​ 関数に渡す文字列 (​" Bar"​) の先頭に文字列 ​"Foo"​ を追加します。

DataWeave スクリプト:
%dw 2.0
output application/json
fun test(p: String) = do {
    var a = "Foo" ++ p
    ---
    a
}
---
{ result: test(" Bar") }
出力:
{
  "result": "Foo Bar"
}

「例: ローカル DataWeave 変数」​も参照してください。

if else

if​ ステートメントは条件式を評価し、条件式が true の場合のみ、​if​ の下の値を返します。それ以外の場合、​else​ の下の式を返します。各 ​if​ 式に、対応する ​else​ 式が必要です。 次の例では、ヘッダーで ​myVar​ 変数によって定義された入力 ​{ country : "FRANCE" }​ を使用します。

DataWeave スクリプト:
%dw 2.0
var myVar = { country : "FRANCE" }
output application/json
---
if (myVar.country == "USA")
  { currency: "USD" }
else { currency: "EUR" }
出力
{
  "currency": "EUR"
}

else if

else if​ を組み込むことで、if-else 構造内で複数の ​else​ 式をまとめてチェーニングできます。 次の例では、ヘッダーで ​myVar​ 変数によって定義された入力 ​var myVar = { country : "UK" }​ を使用します。

DataWeave スクリプト:
%dw 2.0
var myVar = { country : "UK" }
output application/json
---
if (myVar.country =="USA")
	{ currency: "USD" }
else if (myVar.country =="UK")
	{ currency: "GBP" }
else { currency: "EUR" }
出力
{
  "currency": "GBP"
}