Blogs
Finalizado la etapa de Parte 3: Componentes de Liferay para Talend Open Studio
Hemos llegado al último blog de esta serie y el momento más esperado, donde ejecutaremos nuestro “Job” que a su vez ejecutará la carga del catálogo de productos a Liferay Commerce en pocos segundos.
Para poder lograr nuestro gran final solo nos queda por aprender a crear las “rutinas”, una clase java con los métodos para apoyarnos en el tratamiento de los datos a la hora de hacer el mapeo entre los campos de entrada y salida.
1. Desde el punto en el que lo dejamos en el Blog anterior, empezamos creando una rutina para poder transformar los datos que enviaremos al componente de Liferay de acuerdo con la especificación OpenAPI.
- En repositorio, ve a “Codigo” > “Routines” y haz click con el botón derecho y elige la opción “Create Routine” (para más información sobre cómo crear una “User Routine” haz click aqui).
- Nombra la rutina, en mi caso he puesto “TransformToLiferay”. nos creará un fichero .java. Lo podrás descargar también aqui.
- En el fichero de la rutina descargado tendremos ya creados 5 métodos, a lo cuales podremos hacer la llamada desde el componente “tMap” para transformar los datos al pasarlos al componente “tLiferayOutput”.

¿Y cuándo lo utilizamos? Pongamos otro ejemplo: cada vez que en la API que esté invocando el parámetro de entrada sea una variable de “tipo de referencia”, necesitará pasar por una transformación. En Talend ya se incluyen muchas rutinas de serie para más información sobre las rutinas de “system” disponibles, haz click aqui. Importante: en la API de Liferay muchos de los campos que parecen ser simples como un “name” no lo son. Son multilenguaje como muchos otros campos en Liferay Portal. Para eso tenemos creado el método “ setLocalizedField” en la rutina.
2. Antes de volver al mapeo de los productos, es importante volver a resaltar que todas las APIs Headless de Liferay Commerce están documentadas en Swagger Hub. Aquí se puede validar cuáles son los campos que Liferay espera y cuales son obligatorios para cada API y método:
Todas APIs de Liferay Commerce empiezan por “headless-”, así que en Swaggerhub, la URL será así: “https://app.swaggerhub.com/apis/liferayinc/commerce-admin-catalog/v1.0”
Para montar el endpoint, quitamos de la URL “https://app.swaggerhub.com/apis/liferayinc/” y tenemos que sustituir la parte hasta “v1.0”. Se quedará así: commerce-admin-catalog/v1.0, entonces añadimos al principio el “headless-” y tenemos ya la API de Commerce:“/headless-commerce-admin-catalog/v1.0”.
3. Ahora que ya sabéis dónde encontrar toda la información y documentación, empezaremos a hacer los mapeos de los campos, utilizando los contextos y los métodos de la rutina. Haz doble click sobre el “tMap”.
- En la columna “tLiferayRow” rellena manualmente los 3 campos obligatorios y que no tenemos en la fuente de datos, con los “context” creados anteriormente:
- con el campo “description”, en la columna “tLiferayRow”, vaya hasta el campo “description” y clique al lado izquierdo la columna “Expresión”, como señalado en la imagen de abajo:
- Ahora en “Categorías” haz click en “Definido por usuario” > haz doble-click en “setLocalizedField” y pasa al método los parámetros necesarios en este caso, el “context.LANGUAGE_PT_BR” y la variable de entrada provista por la BBDD “row1.description”. Deberá quedar como en la imagen abajo:
Repite el mismo proceso para el campo “name” y “shortDescription”.
El proceso es el mismo para el campo “image”, pero cambiamos el método que utilizaremos. En este caso elegimos el método “setImage” y deberá quedar como en la imagen de abajo:
Ahora el último campo que mapearemos, el “skus” y para ello utilizaremos el método “setSKU”. Deberá quedarse como en la imagen de abajo:
Por cierto, ¿que és SKU (Stock Keeping Unit - unidad de mantenimiento de inventario)?
Son códigos alfanuméricos utilizados para identificar el tipo de producto y sus variaciones.
El SKU tiene una extrema relevancia para el comercio digital y no es más es que el identificador necesario para un producto determinado y así tener un mejor control de tu stock, quedando los productos separados de acuerdo con sus características. No se debe confundir SKU con UPCs (Código de Producto Universal). Existe una diferencia muy visible entre el UPC y el SKU, que es el hecho de que cualquier tipo de persona entiende el SKU como una forma lógica, mientras que el UPCs termina siendo leído exclusivamente por un lector de códigos de barras.
Por ejemplo, una camisa blanca que tiene cuatro tamaños diferentes (S, M, L, XL). Podemos hacer distinciones entre ellas mediante SKUs. Por ejemplo: Camisa blanca S tendrá como SKU CB1, Camisa blanca XL tendrá un SKU como CB4.
- Ahora por último, mapearemos un campo muy importante, el “externalReferenceCode”. Este campo debe ser mapeado siempre con un código único que sea la referencia entre el producto dentro de Liferay Commerce y el producto en el Sistema Externo. Aunque no sea un campo obligatorio, te generará duplicidades de productos cuando lo ejecutes más de una vez el job de Cargas de Productos.
4. Finalizado los mapeos… deberás tener el “tMap” más o menos así:
- Haz click en “Apply” y “Ok”.
5. Antes de ejecutar el Job, cambiaremos los valores de conexión del “Advanced Settings” del componente “tLiferayOutput”
6. Finalmente, vamos a la pestaña “Run” y ejecutamos el Job.
El resultado debería ser como en la imagen de abajo, 1 row por producto:
Ya se puede ir a Liferay Commerce y validar si los productos han cargado bien. En la imagen de abajo se puede ver el listado de los 10 productos que hemos cargado:
- Haciendo click en el primer producto podemos ver en detalle la información que hemos importado:
- Haciendo click en SKUs, podemos validar que ha ido bien también: ….
...Información comercial ...
… precio y precio promocional ….
- También los podrás ver desde el sitio Web que has asignado al “Canal”, como abajo:
- Si deseas ahora probar a efectuar la carga completa de la BBDD, cambia la query a “"SELECT * FROM products” (sin límite) , haz click en “Guess schema”, guarda y ejecuta nuevamente el Job. Deberás ver registrados 64 productos:
Conclusión final de cierre
Hemos visto cómo registrar un Catálogo de Productos en Liferay Commerce con solo 3 componentes y 5 métodos.
Cómo hemos podido ver en el primer blog de esta serie, hemos utilizado una BBDD como fuente de datos, pero se puede integrar con cualquier fuente de datos y sistemas externos. Tener una integración como la que hemos visto para el catálogo de productos hace que una tarea que podría ser árdua (mantener la actualización entre dos sistemas), sea fácil, rápida y práctica.
Esa ETL que hemos creado se puede exportar y colocar en una tarea programada (CRON) de tu servidor para ser ejecutado o si utilizas Liferay DXP se puede incluir en “Data Integration Admin”:
A fin de gestionar las ejecuciones del Job dentro del Panel de Control de Liferay.