En este caso vamos a utilizar Talend para formatear el JSON que se va a enviar por el API de Zauru y enviarlo al correr el trabajo.
Este flujo de la información lo vamos a separar para aclarar mejor el proceso completo:
Primero y más importante son los exceles de donde vamos a obtener los datos. Estos exceles deberían de estar lo más ordenado posible para que podamos manipularlos facilmente y dejarlos listos para que el proceso de digitalización con Talend sea lo más rápido posible.
En el siguiente ejercicio hemos usado de ejemplo la importación de facturas masivas con datos separados en 4 exceles (Brindados así por el cliente). Al evaluar este caso aprenderemos a importar facturas que vienen en una estructura de datos diferente a la que maneja Zauru.
Estos son los Exceles que el cliente debe de llenar:
En este excel se encuentran los datos de la cabecera de la factura de cada beneficiario. En este archivo podemos encontrar datos como "invoice_number
", "payee_name"
, "payee_code"
y "total"
.
En este excel se encuentran los datos del cuerpo de la factura de cada beneficiario. En este archivo podemos encontrar datos como "invoice_number"
, "item_bundle_name"
, "quantity"
y "price"
.
En este excel se encuentran los datos del beneficiario de la factura. En este archivo podemos encontrar datos como "payee_id"
, "payee_code"
y "payment_term_name"
.
En este excel se encuentran los datos del termino de pago de la factura. En este archivo podemos encontrar datos como "payment_term_name"
y "payment_term_id"
.
Con el poder de Talend Open Studio se pueden construir flujos de limpieza, manipulación y publicación de datos. El flujo que tuvimos que construir para cargar esta información a Zauru fue el siguiente:
A continuación vamos a revisar cada uno de los componentes que se utilizaron y algunas recomendaciones de cada componente para que funcione correctamente.
Este es el componente que lee el excel y lo convierte en algo que entiende Talend (schema) y que puede enviar a los otros componentes para su proceso. En este componente lo más importante es colocar el tipo de dato correcto en cada campo del esquema.
Esta imagen muestra los tipos de dato en cada columna por si hay necesidad de cambiarla.
Nótese también que se agregó la columna "json" como un string para que allí se coloque la orden de compra de la forma que lo entiende Zauru según el API.
Al enlazar el componente de tMap con el siguiente componente de tWriteJSONfield_1 automáticamente genera un schema de salida requerido para mandar los argumentos al RESTClient. Nosotros tenemos que transformar el schema de entrada (que viene de los tFileInputExcel) a este formato requerido.
Nótese cómo tomamos las 4 tablas que contienen los datos de la factura separados y lo expresamos en una sola linea simplemente haciendo "Drag and Drop" del valor izquierdo hacia la expresión del lado derecho.
Con las diferentes tablas de Excel enlazadas ahora debemos convertir este resultado en el formato JSON que utilizamos para enviar información a Zauru por el tRESTclient_1.
Aprenderemos más en el siguiente paso.
Este componente convierte los datos del schema del tMAP y los convierte en un JSON para que lo pueda entender el API de Zauru. Para utilizar este componente hay que hacer 2 cosas:
Nótese que hay que seleccionar al menos 1 elemento de "loop element" en la columna de Node Status
En este paso tomamos la expresión generada por el twriteJSONfield_1 y la volvimos a mapear uniendo esta vez el numero de correlativo de la factura y los detalles del json generado en un solo string de texto.
Este componente nos permite unir dos valores de diferentes tablas de datos en una sola, por ejemplo: si tenemos los valores de "nombre" y "apellido" en dos tablas separadas y deseamos unirlos en una sola tabla, Talend nos permite hacer una Denormalización despues del Map para unir estos valores y obtener un solo string.
Tomamos el string de texto que nos dio de resultado la denormalización del paso anterior y fusionamos el campo "Serie" con "Numero de Factura" porque Zauru solo permite guardar un campo con los dos datos.
Nótese que usamos corchetes corchetes para
"details_json"
porque ya lo habíamos fusionado anteriormente en el tDenormalize_1.
Colocamos el resultado de la expresión anterior ("tMap_3") dentro del siguiente tWriteJSONField para convertirlo en un JSON que lo pueda entender el API de Zauru.
Nótese que hay que seleccionar al menos 1 elemento de "loop element" en la columna de Node Status
Cuando Talend encuentra una o más celdas vacias dentro de un JSON las remplaza con el valor de "[]" en lugar de "null".
Es por eso que realizamos este paso, para quitar la celda completa del resultado de la expresión anterior (JSON) en el caso de que esta esté vacia con la excepción de que el campo vacio sea "order_number".
Este módulo se encarga de enviar lo que viene en el schema de entrada (del componente Map) a la página que configuremos. La configuración necesaria debe ser:
Además, en las configuraciones avanzadas hay que ingresar las credenciales del API en los Headers para poder procesar la solicitud en Zauru:
Este componente sirver para mostrar el esquema con los datos que genera cada componente, coincidentemente, RESTClient puede generar 2 salidas, las 2 opciones que responde el servidor: respuesta correcta del servidor (HTTP Status 200) y la respuesta con error del servidor (HTTP status 50X, 40X, 30X, etc) después de mandar una solicitud. Al correr el trabajo va a mostrar cuantas respuestas salieron positivas y cuantas negativas.
Adjunto el archivo de Talend para que puedan jugar con todo lo que se discutió en este manual