Flex Gateway新着情報
Governance新着情報
Monitoring API Manager次の演算子を任意の DataWeave 式内で使用できます。
開始する前に、DataWeave バージョン 2 は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントの DataWeave バージョン 1 ドキュメントセットを参照してください。他の Mule バージョンの場合は、Mule Runtime の目次のバージョンセレクターを使用できます。
dodo ステートメントはスコープを作成します。このスコープ内で、新しい変数、関数、アノテーション、または名前空間を宣言し、使用できます。構文は、--- で区切られたヘッダーと本文で構成されるという点でマッピングに似ています。このヘッダーはすべての宣言を定義する場所であり、本文は式の結果です。
この例では、スクリプトの本文から myfun() がコールされたときに、do を使用して文字列 "DataWeave" を返します。
%dw 2.0
output application/json
fun myfun() = do {
    var name = "DataWeave"
    ---
    name
}
---
{ result: myfun() }
この例では、スクリプトの本文から変数 myVar が参照されたときに、do を使用して文字列 "DataWeave" を返します。
%dw 2.0
output application/json
var myVar = do {
    var name = "DataWeave"
    ---
    name
}
---
{ result: myVar }
どちらのスクリプトも次の出力を生成します。
{
  "result": "DataWeave"
}
次の例では、do を使用して、test(p: String) 関数に渡す文字列 (" Bar") の先頭に文字列 "Foo" を追加します。
%dw 2.0
output application/json
fun test(p: String) = do {
    var a = "Foo" ++ p
    ---
    a
}
---
{ result: test(" Bar") }
{
  "result": "Foo Bar"
}
「例: ローカル DataWeave 変数」も参照してください。
if elseif ステートメントは条件式を評価し、条件式が true を返した場合のみ、if の下の値を返します。それ以外の場合、else の下の式を返します。各 if 式に、対応する else 式が必要です。
次の例では、ヘッダーで myVar 変数によって定義された入力 { country : "FRANCE" } を使用します。
%dw 2.0
var myVar = { country : "FRANCE" }
output application/json
---
if (myVar.country == "USA")
  { currency: "USD" }
else { currency: "EUR" }
{
  "currency": "EUR"
}
if-else 構文は、数学ステートメント、論理ステートメント、等価ステートメント、比較ステートメントなど、true または false に評価されるすべての条件に対して指定できます。条件は、有効な入力に対してのみ適用されます。
次の DataWeave スクリプトは、次の条件ステートメントの結果に if else ステートメントを適用します。
ex1 の算術演算
if else ステートメントは、演算 1 + 1 == 55 が true であれば true を返し、そうでなければ false を返します。
ex2 の等価演算
if else ステートメントは、指定されたインデックスが 1 であれば 1 を返し、1 でなければ文字列を返します。
ex3 の isEmpty 関数
if else ステートメントは、aRecord.bookId に値が含まれているかどうかによって "ID is empty" または "ID is not empty" を返します。
firstInput を反復処理する ex4 のマッピング
if else は、値が 101 と等しければ bookId の値を数値として返します。値が 101 と等しくなければ、指定された文字列を返します。
%dw 2.0
var aRecord =
 [
    "bookId":"101",
    "title":"world history",
    "price":"19.99"
 ]
output application/xml
---
{ examples:
	{
	   ex1 : if (1 + 1 == 55) true
	         else false,
	   ex2 : if ([1,2,3,4][1] == 1) 1
	         else "value of index 1 is not 1",
	   ex3 : if (isEmpty(aRecord.bookId)) "ID is empty"
	  	 else "ID is not empty",
	   ex4 : aRecord.bookId map (idValue) ->
	   	 if (idValue as Number == 101) idValue as Number
		 else "not 101"
	}
}
<?xml version='1.0' encoding='UTF-8'?> <examples> <ex1>false</ex1> <ex2>value of index 1 is not 1</ex2> <ex3>ID is not empty</ex3> <ex4>101</ex4> </examples>
「DataWeave の演算子」にも例が掲載されています。
else ifelse if を組み込むことで、if-else 構造内で複数の else 式をまとめてチェーニングできます。
次の例では、ヘッダーで myVar 変数によって定義された入力 var myVar = { country : "UK" } を使用します。
%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"
}
次の例も同様ですが、オブジェクトではなく配列を入力として取ります。スクリプトの本文では、do 操作で if else ステートメントと else if ステートメントを使用して、hello 変数に値を入力します。
%dw 2.0
output application/json
---
["Argentina", "USA", "Brazil"] map (country) -> do {
  var hello = if(country == "Argentina") "Hola"
   else if(country == "USA") "Hello"
   else if(country == "Brazil") "Ola"
   else "Sorry! We don't know $(country)'s language."
   ---
   "$(hello) DataWeave"
}
[ "Hola DataWeave", "Hello DataWeave", "Ola DataWeave" ]