SlideShare una empresa de Scribd logo
1 de 36
All contents © MuleSoft, LLC
22 de abril, 2021
Madrid MuleSoft Meetup #6 - DataWeave
Mario Martinez
API Lead
EPAM
Jesús Pablo Fernández
Responsable de Proyectos de Integración
Imagar Solutions Company
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
DataWeave
Mario Martinez, API Lead en EPAM
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
Contenido
1 I N T R O D U C C I Ó N
6
2
3
4
5
¿ C Ó M O U S A R L O ?
¿ C Ó M O F U N C I O N A?
S Y N TA X I S
G E S T I Ó N D E M E M O R I A
M E J O R E S P R A C T I C A S
3
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
Audiencia técnica
4
El objetivo de esta presentación es mejorar el
conocimiento de DataWeave
Aconsejable conocimiento básico de
DataWeave, no vamos a cubrir nociones básicas
Introducción
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
¿Qué es DataWeave?
• Lenguaje de programación diseñado para transformar datos
• Transformar
• Acceso a los datos
• Expression language (reemplazó MEL en Mule 3)
• Representado como expresiones/scripts.
• Transform message: <ee:transform/>
• Expression: #[]
• Mule 3 : DataWeave 1
• Mule 4 : DataWeave 2
• Esta sesión se centra al 100% en DataWeave 2
5
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
¿Cómo se usa?
• Dentro de una aplicación Mule, a través de una expresión (#[])
o transform component
• A través de Anypoint studio, usando metadatos / datos de
muestra
• A través de herramienta on-line: https://dwlang.fun/
(no soportado oficialmente)
• Docker container: dw-container (no soportado oficialmente)
• Standalone version: dw-playground
(no soportado oficialmente)
• Bonus: DataWeave cli : dw-native (no soportado oficialmente)
6
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
¿Cómo funciona?
7
Data in Reader Data out
DW Script Writer
Canonical
model
Canonical
model
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
Anatomía
8
Headers/directives: DW versión, content types,
variables, funciones, etc.
Separa la cabecera del cuerpo
Body
%dw 2.0
input payload json
output csv header=false
---
payload
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
Gestión de la memoria
Creditos: Ravi Tamada
9
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
Streaming
• DataWeave admite end-to-end streaming. (No habilitado por defecto.)
• DataWeave procesa los datos transmitidos a medida que llegan sus bytes en lugar de escanear todo el
documento para indexarlo. Cuando está en modo "deferred", DataWeave pasa los datos de salida
transmitidos directamente al siguiente componente sin guardarlos en el disco.
• Streaming acelera el procesamiento de documentos grandes sin sobrecargar la memoria.
• IMPORTANTE: La unidad básica del Streaming es específica del formato de datos.
• CSV -> cada record individual
• JSON array -> cada elemento del array
• Accede a cada unidad de forma secuencial. Streaming no admite el acceso aleatorio a un documento
completo.
• Valido – acceso secuencial: payload map (myObject) -> upper(myObject)
• No Valido – acceso aleatorio: [ payload[0], payload[1] ]
10
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
Streaming - Experimental
• Para comprobar que su código puede procesar en Streaming, DataWeave
proporciona la siguiente anotación:
• @StreamCapable()
• El validador de DataWeave verifica un script con los siguientes criterios:
• Se hace referencia a la variable solo una vez.
• No se establece ningún selector de índice para acceso negativo,
como [-1]. No se encuentra ninguna referencia a la variable en una
lambda anidada.
• Si se cumplen todos los criterios, se permite Streaming
11
%dw 2.0
@StreamCapable() input payload application/json
output
application/json
---
payload.family map upper(member)
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
Buenas practicas
• Código limpio
• Evite los valores predeterminados $, $$, $$$
• Usar funciones existentes
• Especificar los tipos de datos en las funciones
• Código modular: bibliotecas / funciones reutilizables
• Depurar a través de logs
• Testing - DataWeave como lenguaje de aserción
12
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
Código limpio
• Estructura tu código como lo harías con cualquier otro lenguaje de
programación
• Utilice variables y funciones, evite el código monolítico
• Puede crear variables en línea usando do {}
• Si es necesario, incluya documentación!
• // This is a comment
• /*
* Another comment
*/
13
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
Código limpio
%dw 2.0
output application/json
// Static valid code value which, for sure, represents something
var VALID_CODE = 'HD'
/*
* Returns true when the code is valid
*/
fun validateCode(code: String) : Boolean =
do {
// Using do {} only for demo purposes
var isValidCode = VALID_CODE == code
---
isValidCode
}
---
validateCode('HA') // expects false
14
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
Evitar valores predeterminados $, $$, $$$
15
%dw 2.0
output application/json
---
payload map {
$.elements map {
which: $.elementIwant
}
}
%dw 2.0
output application/json
---
payload map (parentElement) -> {
parentElement.elements map (childElement) -> {
which: childElement.elementIwant
}
}
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
Usar funciones existentes
16
%dw 2.0
output application/json
---
(payload filter (record) -> (record.age > 10))[0]
%dw 2.0
output application/json
import firstWith from dw::core::Arrays
---
payload.message firstWith (record) -> (record.age > 10)
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
Especificar los tipos de datos en las funciones
17
fun findById(elements, id) =
elements firstWith ((element) -> element.id == 5)
---
findById(payload.fake, 4)
fun findById(elements: Array, id: String) : Object =
elements firstWith ((element) -> element.id == 5)
---
findById( { fake: "object"} , 4 )
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
• Extraer código en archivos ".dwl" dentro de src/main/resources. Ejemplo:
• src/main/resources/library.dwl
• Library.dwl file contiene una funcion "MyFunction"
• Reutilice el código cuando sea necesario: import library::MyFunction
• Siempre que su archivo ".dwl" esté ubicado en su classpath, ¡Todo listo!
Bonus: puede hacer referencia a archivos ".dwl" usando "${file::myFile.dwl}"
18
Código modular: bibliotecas / funciones
reutilizables
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
Depurar a través de logs
• "log ()" sin modificar el valor. Útil para depurar transformaciones complejas.
19
var data = {
meetup: {
location: 'madrid'
}
}
---
upper(log("LOCATION: ",
data.meetup.location))
org.mule.weave.v2.model.service.DefaultLoggingService$: LOCATION: - "madrid"
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
Testing - DataWeave assertion library
• Proporciona una forma programática de testear respuestas sin librerias externas.
• Evita comparar respuestas completas. Por ejemplo, comparar dos JSON Strings.
• Intuitivo y flexible
20
import * from dw::test::Asserts
---
do {
payload must [
beObject(),
notBe(beEmpty()),
$.id== "munit-test-Id",
$.clientId == "munit-meetup-client",
$.cityCode == "MADRID"
]
}
<munit-tools:assert doc:name="Assert API JSON response" >
<munit-tools:that ><![CDATA[#[${file::meetup/assert-response.dwl}]]]></munit-tools:that>
</munit-tools:assert>
CONFIDENTIAL | © 2021 EPAM Systems, Inc.
¡GRACIAS!
¿PREGUNTAS?
22/04/2021
Jesús Pablo Fernández
Responsable Técnico de Proyectos de Integración (Imagar Solutions Company S.L.)
Madrid MuleSoft Meetup #6
DataWeave
23
● Uso de Lookups externos en Transformaciones
● Conversión entre múltiples formatos
● Mapeo con concatenaciones avanzadas
● Mapeos anidados
● Mapeo de estructuras complejas
Agenda
24
Encuentra los ejemplos aquí
https://www.ricston.com/wp-content/uploads/2021/04/meetup_dataweave.zip
Uso de Lookups externos en
Transformaciones
26
Uso de Lookups externos en Transformaciones
{
"NumeroFactura": "EJ001",
"FechaVencimiento": "23/04/2021",
"Conceptos": [
{
"Cantidad": 2,
"Referencia": "ART001"
},
{
"Cantidad": 10,
"Referencia": "ART002"
}
],
"Vendedor": {
"ID": "000000000A",
"Referencia": "VEN001"
}
}
Entrada: Salida:
{
"NumeroFactura": "EJ001",
"Estado": "PENDIENTE",
"FechaVencimiento": "23/04/2021",
"Conceptos": [
{
"Cantidad": 2,
"Referencia": "ART001",
"Nombre": "Articulo1",
"Descripcion": "Articulo de ejemplo 1",
"Importe": 500
},
{
"Cantidad": 10,
"Referencia": "ART002",
"Nombre": "Articulo2",
"Descripcion": "Articulo de ejemplo 2",
"Importe": 5423
}
],
"Vendedor": {
"ID": "000000000A",
"Referencia": "VEN001",
"Nombre": "Vendedor 1",
"Apellidos": "Apellido 1 Apellido 2"
},
"Total": 55230
}
Conversión entre múltiples
formatos
28
Conversión entre múltiples formatos
Entrada: Salidas:
{
"Vendedores" : [
{
"Nombre":"Nombre 1",
"Apellido" : "Apellido 1",
"Edad" : 25,
"Pais":"España",
"Seccion" : "Salesforce",
"Responsable":"Responsable 1"
},
{
"Nombre":"Nombre 2",
"Apellido" : "Apellido 2",
"Edad" : 30,
"Pais":"España",
"Seccion" : "Mulesoft",
"Responsable":"Responsable 2"
}
]
}
Nombre,Apellido,Edad,Pais,Seccion,Responsable
Nombre 1,Apellido 1,25,España,Salesforce,Responsable 1
Nombre 2,Apellido 2,30,España,Mulesoft,Responsable 2
<?xml version='1.0' encoding='UTF-8'?>
<Data>
<Vendedores>
<Nombre>Nombre 1</Nombre>
<Apellido>Apellido 1</Apellido>
<Edad>25</Edad>
<Pais>España</Pais>
<Seccion>Salesforce</Seccion>
<Responsable>Responsable 1</Responsable>
</Vendedores>
<Vendedores>
<Nombre>Nombre 2</Nombre>
<Apellido>Apellido 2</Apellido>
<Edad>30</Edad>
<Pais>España</Pais>
<Seccion>Mulesoft</Seccion>
<Responsable>Responsable 2</Responsable>
</Vendedores>
</Data>
{
"Data": {
"Vendedores": [
{
"Nombre": "Nombre 1",
"Apellido": "Apellido 1",
"Edad": 25,
"Pais": "España",
"Seccion": "Salesforce",
"Responsable": "Responsable 1"
},
{
"Nombre": "Nombre 2",
"Apellido": "Apellido 2",
"Edad": 30,
"Pais": "España",
"Seccion": "Mulesoft",
"Responsable": "Responsable 2"
}
]
}
}
Nombre 1,Nombre 2
Mapeo con concatenaciones
avanzadas
30
Mapeo con concatenaciones avanzadas
Entrada: Salidas:
{
"Data1": [
{
"Nombre": "Articulo1",
"Descripción": "Articulo de ejemplo 1",
"Importe": 500,
"Referencia": "ART001"
},
{
"Nombre": "Articulo2",
"Descripción": "Articulo de ejemplo 2",
"Importe": 5423,
"Referencia": "ART002"
}
],
"Data2": [
{
"Nombre": "Articulo3",
"Descripción": "Articulo de ejemplo 3",
"Importe": 44,
"Referencia": "ART003"
},
{
"Nombre": "Articulo4",
"Descripción": "Articulo de ejemplo 4",
"Importe": 12,
"Referencia": "ART004"
}
]
}
{
"Nombre": "Articulo1",
"Descripción": "Articulo de ejemplo 1",
"Importe": 500,
"Referencia": "ART001",
"NombreExtra": "Articulo3"
}
[
{
"Nombre": "Articulo1",
"Descripción": "Articulo de ejemplo 1",
"Importe": 500,
"Referencia": "ART001"
},
{
"Nombre": "Articulo2",
"Descripción": "Articulo de ejemplo 2",
"Importe": 5423,
"Referencia": "ART002"
},
{
"Nombre": "Articulo3",
"Descripción": "Articulo de ejemplo 3",
"Importe": 44,
"Referencia": "ART003"
},
{
"Nombre": "Articulo4",
"Descripción": "Articulo de ejemplo 4",
"Importe": 12,
"Referencia": "ART004"
}
]
"Articulo1;Articulo3"
"50044"
Transformaciones anidadas
32
Transformaciones anidadas
Entrada: Salidas:
[
{
"Id": 1,
"Opportunity": "0064H00001Fu8oQQAR",
"Name": "Project 1",
"Type": "type1",
"AccountDetails": {
"Country": "ESP",
"AccountID": "00001"
}
},
{
"Id": 2,
"Opportunity": "0064H00001Fu8oQQAR",
"Name": "Project 2",
"Type": "type1",
"AccountDetails": {
"Country": "ESP",
"AccountID": "00003"
}
},
{
"Id": 3,
"Opportunity": "0064H00001Fu8oXXXX",
"Name": "Project 3",
"Type": "type1",
"AccountDetails": {
"Country": "ESP",
"AccountID": "00002"
}
}
]
[
{
"Id": 1,
"Name": "Project 1",
"Type": "type1",
"AccountDetails": {
"Country": "ESP",
"AccountID": "00001"
},
"Opportunity": "0064H00001Fu8oQQAR",
"Manager": {
"Email": "test@tests.com",
"Country": "ESP",
"FirstName": "Test",
"ID": "000000000A",
"LastName": "Test",
"type": "User"
},
"StartDate": "2020-11-10",
"Type": "type1",
"EndDate": "2020-12-10"
},
{
"Id": 2,
"Name": "Project 2",
"Type": "type1",
"AccountDetails": {
"Country": "ESP",
"AccountID": "00003"
},
"Opportunity": "0064H00001Fu8oQQAR",
"Manager": {
"Email": "test@tests.com",
"Country": "ESP",
"FirstName": "Test",
"ID": "000000000A",
"LastName": "Test",
"type": "User"
},
"StartDate": "2020-11-10",
"Type": "type1",
"EndDate": "2020-12-10"
},
{
"Id": 3,
"Opportunity": "0064H00001Fu8oXXXX",
"Name": "Project 3",
"Type": "type1",
"AccountDetails": {
"Country": "ESP",
"AccountID": "00002"
}
}
]
Mapeo de estructuras complejas
34
Mapeo de estructuras complejas
Entrada: Salidas:
[
{
"NumeroPedido": "EJ001",
"Estado": "ENVIADO",
"FechaVencimiento": "23/04/2021",
"Pedido": {
"Descripcion": "Test",
"Comprador": "Comprador ficticio 1",
"Productos": [
{
"SID": "00001",
"Cantidad": 2,
"Referencia": "ART001",
"Nombre": "Articulo1",
"Descripcion": "Articulo de ejemplo 1",
"Importe": 500
},
{
"SID": "00002",
"Cantidad": 10,
"Referencia": "ART002",
"Nombre": "Articulo2",
"Descripcion": "Articulo de ejemplo 2",
"Importe": 5423
}
],
"Vendedor": {
"ID": "000000000A",
"Referencia": "VEN001"
},
"Total": 1000
}
}
...
]
[
{
"Cantidad": 2,
"Referencia": "ART001",
"Nombre": "Articulo1",
"Descripción": "Articulo de ejemplo 1",
"Importe": 500,
"NumeroPedido": "EJ001"
},
{
"Cantidad": 10,
"Referencia": "ART002",
"Nombre": "Articulo2",
"Descripción": "Articulo de ejemplo 2",
"Importe": 5423,
"NumeroPedido": "EJ001"
},
{
"Cantidad": 2,
"Referencia": "ART001",
"Nombre": "Articulo1",
"Descripción": "Articulo de ejemplo 1",
"Importe": 500,
"NumeroPedido": "EJ002"
}
...
]
35
Enlaces de interés
https://docs.mulesoft.com/mule-runtime/4.3/dataweave-pattern-matching
https://docs.mulesoft.com/mule-runtime/4.3/dataweave-flow-control
https://docs.mulesoft.com/mule-runtime/4.3/dw-mule-functions-lookup
https://docs.mulesoft.com/mule-runtime/4.3/dataweave-functions-lambdas
https://docs.mulesoft.com/mule-runtime/4.3/dataweave-create-module
¡Gracias!

Más contenido relacionado

La actualidad más candente

Creando un Web API desde la idea hasta el despliegue de forma ágil
Creando un Web API desde la idea hasta el despliegue de forma ágilCreando un Web API desde la idea hasta el despliegue de forma ágil
Creando un Web API desde la idea hasta el despliegue de forma ágilEudris Cabrera
 
Mule investigation (jeiner gonzalez.b)
Mule investigation (jeiner gonzalez.b)Mule investigation (jeiner gonzalez.b)
Mule investigation (jeiner gonzalez.b)Jeiner Gonzalez Blanco
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7Luis Ruiz Pavón
 
Redhat Open Day - Integracion JBoss Fuse A-MQ
Redhat Open Day - Integracion JBoss Fuse A-MQRedhat Open Day - Integracion JBoss Fuse A-MQ
Redhat Open Day - Integracion JBoss Fuse A-MQAdrian Gigante
 

La actualidad más candente (9)

Creando un Web API desde la idea hasta el despliegue de forma ágil
Creando un Web API desde la idea hasta el despliegue de forma ágilCreando un Web API desde la idea hasta el despliegue de forma ágil
Creando un Web API desde la idea hasta el despliegue de forma ágil
 
Mule investigation (jeiner gonzalez.b)
Mule investigation (jeiner gonzalez.b)Mule investigation (jeiner gonzalez.b)
Mule investigation (jeiner gonzalez.b)
 
ASP.NET 5 & MVC 6 (RC1)
ASP.NET 5 & MVC 6 (RC1)ASP.NET 5 & MVC 6 (RC1)
ASP.NET 5 & MVC 6 (RC1)
 
Mule sharepoint
Mule sharepointMule sharepoint
Mule sharepoint
 
Azure API Management
Azure API ManagementAzure API Management
Azure API Management
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
 
20190411 meetup
20190411 meetup20190411 meetup
20190411 meetup
 
Python Gae django
Python Gae djangoPython Gae django
Python Gae django
 
Redhat Open Day - Integracion JBoss Fuse A-MQ
Redhat Open Day - Integracion JBoss Fuse A-MQRedhat Open Day - Integracion JBoss Fuse A-MQ
Redhat Open Day - Integracion JBoss Fuse A-MQ
 

Similar a MuleSoft Madrid Meetup #6 slides 22nd April 2021

Test Unitarios y E2E front y Back
Test Unitarios y E2E front y BackTest Unitarios y E2E front y Back
Test Unitarios y E2E front y BackEric Zeidan
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18Young Suk Ahn Park
 
Meetup Madrid 6 Marzo 2024 - MuleSoft en el mundo real: ejemplos de casos de ...
Meetup Madrid 6 Marzo 2024 - MuleSoft en el mundo real: ejemplos de casos de ...Meetup Madrid 6 Marzo 2024 - MuleSoft en el mundo real: ejemplos de casos de ...
Meetup Madrid 6 Marzo 2024 - MuleSoft en el mundo real: ejemplos de casos de ...jorgelebrato
 
"Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore""Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore"www.encamina.com
 
Reportes En J Developer Parte 1 Y 2
Reportes En J Developer   Parte 1 Y 2Reportes En J Developer   Parte 1 Y 2
Reportes En J Developer Parte 1 Y 2Steven Gomez
 
SPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivel
SPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivelSPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivel
SPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivelImanol Iza Martin
 
Comparativa herramientas etl
Comparativa herramientas etlComparativa herramientas etl
Comparativa herramientas etljuan barco
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsDavid Calavera
 
Portabilidad y transportabilidad
Portabilidad y transportabilidadPortabilidad y transportabilidad
Portabilidad y transportabilidadjuanmanuelsalgado
 
Comparativa herramientas ETL
Comparativa herramientas ETLComparativa herramientas ETL
Comparativa herramientas ETLJorge Bustillos
 
Aplicaciones escalables en la nube: mentiras y verdades
Aplicaciones escalables en la nube: mentiras y verdadesAplicaciones escalables en la nube: mentiras y verdades
Aplicaciones escalables en la nube: mentiras y verdadesEnrique Catala Bañuls
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLabFIB
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)josecuartas
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephpbetabeers
 

Similar a MuleSoft Madrid Meetup #6 slides 22nd April 2021 (20)

Jdbc
JdbcJdbc
Jdbc
 
Test Unitarios y E2E front y Back
Test Unitarios y E2E front y BackTest Unitarios y E2E front y Back
Test Unitarios y E2E front y Back
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18
 
Meetup Madrid 6 Marzo 2024 - MuleSoft en el mundo real: ejemplos de casos de ...
Meetup Madrid 6 Marzo 2024 - MuleSoft en el mundo real: ejemplos de casos de ...Meetup Madrid 6 Marzo 2024 - MuleSoft en el mundo real: ejemplos de casos de ...
Meetup Madrid 6 Marzo 2024 - MuleSoft en el mundo real: ejemplos de casos de ...
 
"Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore""Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore"
 
Reportes En J Developer Parte 1 Y 2
Reportes En J Developer   Parte 1 Y 2Reportes En J Developer   Parte 1 Y 2
Reportes En J Developer Parte 1 Y 2
 
SPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivel
SPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivelSPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivel
SPS Madrid 2019 - Eleva tu aplicaciones de PowerApps a otro nivel
 
Comparativa herramientas etl
Comparativa herramientas etlComparativa herramientas etl
Comparativa herramientas etl
 
Zend framework: Toma el control
Zend framework: Toma el controlZend framework: Toma el control
Zend framework: Toma el control
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y Rails
 
Portabilidad y transportabilidad
Portabilidad y transportabilidadPortabilidad y transportabilidad
Portabilidad y transportabilidad
 
Comparativa herramientas ETL
Comparativa herramientas ETLComparativa herramientas ETL
Comparativa herramientas ETL
 
Webinar: Oracle Data Integrator 12c (25-02-2015)
Webinar: Oracle Data Integrator 12c (25-02-2015)Webinar: Oracle Data Integrator 12c (25-02-2015)
Webinar: Oracle Data Integrator 12c (25-02-2015)
 
Aplicaciones escalables en la nube: mentiras y verdades
Aplicaciones escalables en la nube: mentiras y verdadesAplicaciones escalables en la nube: mentiras y verdades
Aplicaciones escalables en la nube: mentiras y verdades
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
 
Herramientas Digitales
Herramientas DigitalesHerramientas Digitales
Herramientas Digitales
 
Sercicios web
Sercicios webSercicios web
Sercicios web
 
Webinar Oracle Data Integrator 12c (ODI)
Webinar Oracle Data Integrator 12c (ODI)Webinar Oracle Data Integrator 12c (ODI)
Webinar Oracle Data Integrator 12c (ODI)
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 

Más de Ieva Navickaite

MuleSoft Manchester Meetup #5 slides 20th May 2021
MuleSoft Manchester Meetup #5 slides 20th May 2021MuleSoft Manchester Meetup #5 slides 20th May 2021
MuleSoft Manchester Meetup #5 slides 20th May 2021Ieva Navickaite
 
MuleSoft Manchester Meetup #4 slides 11th February 2021
MuleSoft Manchester Meetup #4 slides 11th February 2021MuleSoft Manchester Meetup #4 slides 11th February 2021
MuleSoft Manchester Meetup #4 slides 11th February 2021Ieva Navickaite
 
MuleSoft Madrid Meetup #5 slides 21st January 2021
MuleSoft Madrid Meetup #5 slides 21st January 2021MuleSoft Madrid Meetup #5 slides 21st January 2021
MuleSoft Madrid Meetup #5 slides 21st January 2021Ieva Navickaite
 
MuleSoft Madrid Meetup #3 slides 2nd July 2020
MuleSoft Madrid Meetup #3 slides 2nd July 2020MuleSoft Madrid Meetup #3 slides 2nd July 2020
MuleSoft Madrid Meetup #3 slides 2nd July 2020Ieva Navickaite
 
MuleSoft Manchester Meetup #3 slides 31st March 2020
MuleSoft Manchester Meetup #3 slides 31st March 2020MuleSoft Manchester Meetup #3 slides 31st March 2020
MuleSoft Manchester Meetup #3 slides 31st March 2020Ieva Navickaite
 
MuleSoft Manchester Meetup #2 slides 29th October 2019
MuleSoft Manchester Meetup #2 slides 29th October 2019MuleSoft Manchester Meetup #2 slides 29th October 2019
MuleSoft Manchester Meetup #2 slides 29th October 2019Ieva Navickaite
 

Más de Ieva Navickaite (6)

MuleSoft Manchester Meetup #5 slides 20th May 2021
MuleSoft Manchester Meetup #5 slides 20th May 2021MuleSoft Manchester Meetup #5 slides 20th May 2021
MuleSoft Manchester Meetup #5 slides 20th May 2021
 
MuleSoft Manchester Meetup #4 slides 11th February 2021
MuleSoft Manchester Meetup #4 slides 11th February 2021MuleSoft Manchester Meetup #4 slides 11th February 2021
MuleSoft Manchester Meetup #4 slides 11th February 2021
 
MuleSoft Madrid Meetup #5 slides 21st January 2021
MuleSoft Madrid Meetup #5 slides 21st January 2021MuleSoft Madrid Meetup #5 slides 21st January 2021
MuleSoft Madrid Meetup #5 slides 21st January 2021
 
MuleSoft Madrid Meetup #3 slides 2nd July 2020
MuleSoft Madrid Meetup #3 slides 2nd July 2020MuleSoft Madrid Meetup #3 slides 2nd July 2020
MuleSoft Madrid Meetup #3 slides 2nd July 2020
 
MuleSoft Manchester Meetup #3 slides 31st March 2020
MuleSoft Manchester Meetup #3 slides 31st March 2020MuleSoft Manchester Meetup #3 slides 31st March 2020
MuleSoft Manchester Meetup #3 slides 31st March 2020
 
MuleSoft Manchester Meetup #2 slides 29th October 2019
MuleSoft Manchester Meetup #2 slides 29th October 2019MuleSoft Manchester Meetup #2 slides 29th October 2019
MuleSoft Manchester Meetup #2 slides 29th October 2019
 

Último

KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 

Último (19)

KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 

MuleSoft Madrid Meetup #6 slides 22nd April 2021

  • 1. All contents © MuleSoft, LLC 22 de abril, 2021 Madrid MuleSoft Meetup #6 - DataWeave Mario Martinez API Lead EPAM Jesús Pablo Fernández Responsable de Proyectos de Integración Imagar Solutions Company
  • 2. CONFIDENTIAL | © 2021 EPAM Systems, Inc. DataWeave Mario Martinez, API Lead en EPAM
  • 3. CONFIDENTIAL | © 2021 EPAM Systems, Inc. Contenido 1 I N T R O D U C C I Ó N 6 2 3 4 5 ¿ C Ó M O U S A R L O ? ¿ C Ó M O F U N C I O N A? S Y N TA X I S G E S T I Ó N D E M E M O R I A M E J O R E S P R A C T I C A S 3
  • 4. CONFIDENTIAL | © 2021 EPAM Systems, Inc. Audiencia técnica 4 El objetivo de esta presentación es mejorar el conocimiento de DataWeave Aconsejable conocimiento básico de DataWeave, no vamos a cubrir nociones básicas Introducción
  • 5. CONFIDENTIAL | © 2021 EPAM Systems, Inc. ¿Qué es DataWeave? • Lenguaje de programación diseñado para transformar datos • Transformar • Acceso a los datos • Expression language (reemplazó MEL en Mule 3) • Representado como expresiones/scripts. • Transform message: <ee:transform/> • Expression: #[] • Mule 3 : DataWeave 1 • Mule 4 : DataWeave 2 • Esta sesión se centra al 100% en DataWeave 2 5
  • 6. CONFIDENTIAL | © 2021 EPAM Systems, Inc. ¿Cómo se usa? • Dentro de una aplicación Mule, a través de una expresión (#[]) o transform component • A través de Anypoint studio, usando metadatos / datos de muestra • A través de herramienta on-line: https://dwlang.fun/ (no soportado oficialmente) • Docker container: dw-container (no soportado oficialmente) • Standalone version: dw-playground (no soportado oficialmente) • Bonus: DataWeave cli : dw-native (no soportado oficialmente) 6
  • 7. CONFIDENTIAL | © 2021 EPAM Systems, Inc. ¿Cómo funciona? 7 Data in Reader Data out DW Script Writer Canonical model Canonical model
  • 8. CONFIDENTIAL | © 2021 EPAM Systems, Inc. Anatomía 8 Headers/directives: DW versión, content types, variables, funciones, etc. Separa la cabecera del cuerpo Body %dw 2.0 input payload json output csv header=false --- payload
  • 9. CONFIDENTIAL | © 2021 EPAM Systems, Inc. Gestión de la memoria Creditos: Ravi Tamada 9
  • 10. CONFIDENTIAL | © 2021 EPAM Systems, Inc. Streaming • DataWeave admite end-to-end streaming. (No habilitado por defecto.) • DataWeave procesa los datos transmitidos a medida que llegan sus bytes en lugar de escanear todo el documento para indexarlo. Cuando está en modo "deferred", DataWeave pasa los datos de salida transmitidos directamente al siguiente componente sin guardarlos en el disco. • Streaming acelera el procesamiento de documentos grandes sin sobrecargar la memoria. • IMPORTANTE: La unidad básica del Streaming es específica del formato de datos. • CSV -> cada record individual • JSON array -> cada elemento del array • Accede a cada unidad de forma secuencial. Streaming no admite el acceso aleatorio a un documento completo. • Valido – acceso secuencial: payload map (myObject) -> upper(myObject) • No Valido – acceso aleatorio: [ payload[0], payload[1] ] 10
  • 11. CONFIDENTIAL | © 2021 EPAM Systems, Inc. Streaming - Experimental • Para comprobar que su código puede procesar en Streaming, DataWeave proporciona la siguiente anotación: • @StreamCapable() • El validador de DataWeave verifica un script con los siguientes criterios: • Se hace referencia a la variable solo una vez. • No se establece ningún selector de índice para acceso negativo, como [-1]. No se encuentra ninguna referencia a la variable en una lambda anidada. • Si se cumplen todos los criterios, se permite Streaming 11 %dw 2.0 @StreamCapable() input payload application/json output application/json --- payload.family map upper(member)
  • 12. CONFIDENTIAL | © 2021 EPAM Systems, Inc. Buenas practicas • Código limpio • Evite los valores predeterminados $, $$, $$$ • Usar funciones existentes • Especificar los tipos de datos en las funciones • Código modular: bibliotecas / funciones reutilizables • Depurar a través de logs • Testing - DataWeave como lenguaje de aserción 12
  • 13. CONFIDENTIAL | © 2021 EPAM Systems, Inc. Código limpio • Estructura tu código como lo harías con cualquier otro lenguaje de programación • Utilice variables y funciones, evite el código monolítico • Puede crear variables en línea usando do {} • Si es necesario, incluya documentación! • // This is a comment • /* * Another comment */ 13
  • 14. CONFIDENTIAL | © 2021 EPAM Systems, Inc. Código limpio %dw 2.0 output application/json // Static valid code value which, for sure, represents something var VALID_CODE = 'HD' /* * Returns true when the code is valid */ fun validateCode(code: String) : Boolean = do { // Using do {} only for demo purposes var isValidCode = VALID_CODE == code --- isValidCode } --- validateCode('HA') // expects false 14
  • 15. CONFIDENTIAL | © 2021 EPAM Systems, Inc. Evitar valores predeterminados $, $$, $$$ 15 %dw 2.0 output application/json --- payload map { $.elements map { which: $.elementIwant } } %dw 2.0 output application/json --- payload map (parentElement) -> { parentElement.elements map (childElement) -> { which: childElement.elementIwant } }
  • 16. CONFIDENTIAL | © 2021 EPAM Systems, Inc. Usar funciones existentes 16 %dw 2.0 output application/json --- (payload filter (record) -> (record.age > 10))[0] %dw 2.0 output application/json import firstWith from dw::core::Arrays --- payload.message firstWith (record) -> (record.age > 10)
  • 17. CONFIDENTIAL | © 2021 EPAM Systems, Inc. Especificar los tipos de datos en las funciones 17 fun findById(elements, id) = elements firstWith ((element) -> element.id == 5) --- findById(payload.fake, 4) fun findById(elements: Array, id: String) : Object = elements firstWith ((element) -> element.id == 5) --- findById( { fake: "object"} , 4 )
  • 18. CONFIDENTIAL | © 2021 EPAM Systems, Inc. • Extraer código en archivos ".dwl" dentro de src/main/resources. Ejemplo: • src/main/resources/library.dwl • Library.dwl file contiene una funcion "MyFunction" • Reutilice el código cuando sea necesario: import library::MyFunction • Siempre que su archivo ".dwl" esté ubicado en su classpath, ¡Todo listo! Bonus: puede hacer referencia a archivos ".dwl" usando "${file::myFile.dwl}" 18 Código modular: bibliotecas / funciones reutilizables
  • 19. CONFIDENTIAL | © 2021 EPAM Systems, Inc. Depurar a través de logs • "log ()" sin modificar el valor. Útil para depurar transformaciones complejas. 19 var data = { meetup: { location: 'madrid' } } --- upper(log("LOCATION: ", data.meetup.location)) org.mule.weave.v2.model.service.DefaultLoggingService$: LOCATION: - "madrid"
  • 20. CONFIDENTIAL | © 2021 EPAM Systems, Inc. Testing - DataWeave assertion library • Proporciona una forma programática de testear respuestas sin librerias externas. • Evita comparar respuestas completas. Por ejemplo, comparar dos JSON Strings. • Intuitivo y flexible 20 import * from dw::test::Asserts --- do { payload must [ beObject(), notBe(beEmpty()), $.id== "munit-test-Id", $.clientId == "munit-meetup-client", $.cityCode == "MADRID" ] } <munit-tools:assert doc:name="Assert API JSON response" > <munit-tools:that ><![CDATA[#[${file::meetup/assert-response.dwl}]]]></munit-tools:that> </munit-tools:assert>
  • 21. CONFIDENTIAL | © 2021 EPAM Systems, Inc. ¡GRACIAS! ¿PREGUNTAS?
  • 22. 22/04/2021 Jesús Pablo Fernández Responsable Técnico de Proyectos de Integración (Imagar Solutions Company S.L.) Madrid MuleSoft Meetup #6 DataWeave
  • 23. 23 ● Uso de Lookups externos en Transformaciones ● Conversión entre múltiples formatos ● Mapeo con concatenaciones avanzadas ● Mapeos anidados ● Mapeo de estructuras complejas Agenda
  • 24. 24 Encuentra los ejemplos aquí https://www.ricston.com/wp-content/uploads/2021/04/meetup_dataweave.zip
  • 25. Uso de Lookups externos en Transformaciones
  • 26. 26 Uso de Lookups externos en Transformaciones { "NumeroFactura": "EJ001", "FechaVencimiento": "23/04/2021", "Conceptos": [ { "Cantidad": 2, "Referencia": "ART001" }, { "Cantidad": 10, "Referencia": "ART002" } ], "Vendedor": { "ID": "000000000A", "Referencia": "VEN001" } } Entrada: Salida: { "NumeroFactura": "EJ001", "Estado": "PENDIENTE", "FechaVencimiento": "23/04/2021", "Conceptos": [ { "Cantidad": 2, "Referencia": "ART001", "Nombre": "Articulo1", "Descripcion": "Articulo de ejemplo 1", "Importe": 500 }, { "Cantidad": 10, "Referencia": "ART002", "Nombre": "Articulo2", "Descripcion": "Articulo de ejemplo 2", "Importe": 5423 } ], "Vendedor": { "ID": "000000000A", "Referencia": "VEN001", "Nombre": "Vendedor 1", "Apellidos": "Apellido 1 Apellido 2" }, "Total": 55230 }
  • 28. 28 Conversión entre múltiples formatos Entrada: Salidas: { "Vendedores" : [ { "Nombre":"Nombre 1", "Apellido" : "Apellido 1", "Edad" : 25, "Pais":"España", "Seccion" : "Salesforce", "Responsable":"Responsable 1" }, { "Nombre":"Nombre 2", "Apellido" : "Apellido 2", "Edad" : 30, "Pais":"España", "Seccion" : "Mulesoft", "Responsable":"Responsable 2" } ] } Nombre,Apellido,Edad,Pais,Seccion,Responsable Nombre 1,Apellido 1,25,España,Salesforce,Responsable 1 Nombre 2,Apellido 2,30,España,Mulesoft,Responsable 2 <?xml version='1.0' encoding='UTF-8'?> <Data> <Vendedores> <Nombre>Nombre 1</Nombre> <Apellido>Apellido 1</Apellido> <Edad>25</Edad> <Pais>España</Pais> <Seccion>Salesforce</Seccion> <Responsable>Responsable 1</Responsable> </Vendedores> <Vendedores> <Nombre>Nombre 2</Nombre> <Apellido>Apellido 2</Apellido> <Edad>30</Edad> <Pais>España</Pais> <Seccion>Mulesoft</Seccion> <Responsable>Responsable 2</Responsable> </Vendedores> </Data> { "Data": { "Vendedores": [ { "Nombre": "Nombre 1", "Apellido": "Apellido 1", "Edad": 25, "Pais": "España", "Seccion": "Salesforce", "Responsable": "Responsable 1" }, { "Nombre": "Nombre 2", "Apellido": "Apellido 2", "Edad": 30, "Pais": "España", "Seccion": "Mulesoft", "Responsable": "Responsable 2" } ] } } Nombre 1,Nombre 2
  • 30. 30 Mapeo con concatenaciones avanzadas Entrada: Salidas: { "Data1": [ { "Nombre": "Articulo1", "Descripción": "Articulo de ejemplo 1", "Importe": 500, "Referencia": "ART001" }, { "Nombre": "Articulo2", "Descripción": "Articulo de ejemplo 2", "Importe": 5423, "Referencia": "ART002" } ], "Data2": [ { "Nombre": "Articulo3", "Descripción": "Articulo de ejemplo 3", "Importe": 44, "Referencia": "ART003" }, { "Nombre": "Articulo4", "Descripción": "Articulo de ejemplo 4", "Importe": 12, "Referencia": "ART004" } ] } { "Nombre": "Articulo1", "Descripción": "Articulo de ejemplo 1", "Importe": 500, "Referencia": "ART001", "NombreExtra": "Articulo3" } [ { "Nombre": "Articulo1", "Descripción": "Articulo de ejemplo 1", "Importe": 500, "Referencia": "ART001" }, { "Nombre": "Articulo2", "Descripción": "Articulo de ejemplo 2", "Importe": 5423, "Referencia": "ART002" }, { "Nombre": "Articulo3", "Descripción": "Articulo de ejemplo 3", "Importe": 44, "Referencia": "ART003" }, { "Nombre": "Articulo4", "Descripción": "Articulo de ejemplo 4", "Importe": 12, "Referencia": "ART004" } ] "Articulo1;Articulo3" "50044"
  • 32. 32 Transformaciones anidadas Entrada: Salidas: [ { "Id": 1, "Opportunity": "0064H00001Fu8oQQAR", "Name": "Project 1", "Type": "type1", "AccountDetails": { "Country": "ESP", "AccountID": "00001" } }, { "Id": 2, "Opportunity": "0064H00001Fu8oQQAR", "Name": "Project 2", "Type": "type1", "AccountDetails": { "Country": "ESP", "AccountID": "00003" } }, { "Id": 3, "Opportunity": "0064H00001Fu8oXXXX", "Name": "Project 3", "Type": "type1", "AccountDetails": { "Country": "ESP", "AccountID": "00002" } } ] [ { "Id": 1, "Name": "Project 1", "Type": "type1", "AccountDetails": { "Country": "ESP", "AccountID": "00001" }, "Opportunity": "0064H00001Fu8oQQAR", "Manager": { "Email": "test@tests.com", "Country": "ESP", "FirstName": "Test", "ID": "000000000A", "LastName": "Test", "type": "User" }, "StartDate": "2020-11-10", "Type": "type1", "EndDate": "2020-12-10" }, { "Id": 2, "Name": "Project 2", "Type": "type1", "AccountDetails": { "Country": "ESP", "AccountID": "00003" }, "Opportunity": "0064H00001Fu8oQQAR", "Manager": { "Email": "test@tests.com", "Country": "ESP", "FirstName": "Test", "ID": "000000000A", "LastName": "Test", "type": "User" }, "StartDate": "2020-11-10", "Type": "type1", "EndDate": "2020-12-10" }, { "Id": 3, "Opportunity": "0064H00001Fu8oXXXX", "Name": "Project 3", "Type": "type1", "AccountDetails": { "Country": "ESP", "AccountID": "00002" } } ]
  • 33. Mapeo de estructuras complejas
  • 34. 34 Mapeo de estructuras complejas Entrada: Salidas: [ { "NumeroPedido": "EJ001", "Estado": "ENVIADO", "FechaVencimiento": "23/04/2021", "Pedido": { "Descripcion": "Test", "Comprador": "Comprador ficticio 1", "Productos": [ { "SID": "00001", "Cantidad": 2, "Referencia": "ART001", "Nombre": "Articulo1", "Descripcion": "Articulo de ejemplo 1", "Importe": 500 }, { "SID": "00002", "Cantidad": 10, "Referencia": "ART002", "Nombre": "Articulo2", "Descripcion": "Articulo de ejemplo 2", "Importe": 5423 } ], "Vendedor": { "ID": "000000000A", "Referencia": "VEN001" }, "Total": 1000 } } ... ] [ { "Cantidad": 2, "Referencia": "ART001", "Nombre": "Articulo1", "Descripción": "Articulo de ejemplo 1", "Importe": 500, "NumeroPedido": "EJ001" }, { "Cantidad": 10, "Referencia": "ART002", "Nombre": "Articulo2", "Descripción": "Articulo de ejemplo 2", "Importe": 5423, "NumeroPedido": "EJ001" }, { "Cantidad": 2, "Referencia": "ART001", "Nombre": "Articulo1", "Descripción": "Articulo de ejemplo 1", "Importe": 500, "NumeroPedido": "EJ002" } ... ]