Variables are data items that may take on more than one value during the runtime of the Mule flow. We can either define variables in DataWeave header or DataWeave body. We can also reference variables defined before the DataWeave component in a Mule flow.
Variables declared in the DataWeave header have global scope, i.e., we can refer variables declared in the header in any part of code defined in DataWeave body. To declare and initialize a variable with a limited scope, we can define it in any part of the DataWeave body.
We can initialize variables using literal expressions, variable reference expressions, or functional expressions. They may reference any other scoped variables or any of the input variables or constants in their initialization. The declaration and initialization can be prepended to any literal expression.
In this article, we are going to see how we can define variables in different ways. We will use an example of XML to XML transformation for this.
Let us say that input XML has following structure:
<invoice> <header> <customer_name>ACME, Inc.</customer_name> <customer_state>CA</customer_state> </header> <items> <item> <description>Product 1</description> <quantity>2</quantity> <unit_price>10</unit_price> </item> <item> <description>Product 2</description> <quantity>1</quantity> <unit_price>30</unit_price> </item> </items> </invoice>
We will define input and output metadata using this same XML in DataWeave properties and then add few lines of DataWeave code, as shown in the below screenshot:
Now, let us define a variable called dis in the DataWeave header section:
We can use this variable in code by using the variable name in DataWeave code as shown in below screenshot:
This is one way of defining variables. We can also define variables in the DataWeave body with the help of the using operator:
It is also possible to reference flow variables in DataWeave code. Let's say that we have a flow variable dis defined:
We can use this flow variable in DataWeave code as shown in below screenshot:
We have seen that it is possible to define variables in DataWeave header, DataWeave body, and flow variables before the DataWeave component in a Mule flow in DataWeave code.