En ocasiones, entre los requerimientos del cliente localizamos el uso de un servidor FTP en el cual alojar ficheros para su posterior procesamiento en el ERP. Cuando se produce este caso de uso nos enfrentamos a tres puntos clave que debemos analizar:
+ El primero de ellos sería encontrar la forma de acceder a los ficheros del servidor FTP.
+ Tras obtener el documento, el segundo punto clave consiste en hallar el modo de enviarlo al ERP.
+ Y, por último, debemos estudiar cómo procesar el fichero Excel en el sistema.
El objetivo de este artículo no es más que proponer un posible abordamiento para este caso de uso. El ejemplo consistirá en la importación de información relativa a una flota de vehículos. Un detalle a tener en cuenta de esta propuesta es que la mayor carga de trabajo la vamos a delegar al ERP.
Obtención del fichero alojado en el servidor FTP mediante un flujo de Power Automate
Para resolver el primer punto que nos encontramos en este caso de uso, vamos a recurrir al uso de Power Automate, una de las herramientas de la Power Platform.
La característica más importante que tiene esta herramienta es su gran capacidad de integración con otros sistemas. Esto es posible gracias al uso de conectores. Un ejemplo de sistema con el cual puede integrarse la Power Platform sería un servidor FTP.
Para poder conectarnos a nuestro servidor, lo primero que tenemos que hacer es configurar la conexión. Para ello, debemos introducir la dirección, el puerto, el usuario y la contraseña correspondientes.
Una vez establecida la conexión, podemos obtener el fichero que deseemos mediante las acciones del conector. En nuestro caso, el documento a procesar estará alojado en una carpeta dentro del servidor.
Envío del documento a Dynamics 365 F&O mediante una acción de OData
Tras obtener el documento a través del conector de FTP de Power Automate, necesitamos enviarlo a nuestro sistema ERP.
La información que recibimos mediante el conector consiste en un JSON formado por el tipo de contenido y el contenido codificado en Base64. Dado que conocemos el tipo de fichero que vamos a procesar, únicamente necesitamos enviar la cadena de texto en Base64 a Dynamics 365 F&O.
Para enviar el contenido del documento aprovechamos la capacidad de integración que brinda OData a nuestro sistema. Mediante el uso de acciones OData podemos ejecutar lógica en el sistema destino añadiendo parámetros si fuese necesario. Para este caso de uso, enviamos como parámetro la cadena codificada en Base64.
Para poder usar OData necesitamos una entidad de datos de Dynamics 365 F&O pública.
Y para poder ejecutar una acción OData necesitamos crearla en dicha entidad.
Una vez creada la acción OData en el sistema destino, mediante el uso del conector de Dynamics 365 F&O de Power Automate podemos ejecutarla seleccionando la instancia, la acción y los parámetros, si fuesen necesarios.
Procesamiento del fichero Excel mediante el uso de X++
El último punto clave del caso de uso consiste en el procesamiento del documento tras recibirlo a través de la acción OData.
Para llevar a cabo esta tarea recurrimos a la clase JATExcelHelper (MSDyn365FO/JATExcelHelper.xml at master · jatomas/MSDyn365FO · GitHub) creada por Juan Antonio Tomás (Technical Lead en Axazure y MVP en la categoría de BizzApps) y disponible de forma púbica en su repositorio de GitHub. En el siguiente enlace podemos obtener información acerca de cómo utilizarla: Generar e Importar ficheros Excel con X++ en #MSDyn365FO – Juan Antonio Tomás (jatomas.com). Gracias al uso de esta clase podemos convertir un objeto MemoryStream en una colección Map.
El primer paso entonces es transformar la cadena codificada en Base64 en un objeto MemoryStream. Para ello utilizamos la clase BinData para obtener un Container de Bytes y la clase Binary para traducir este Container en un MemoryStream.
Una vez obtenemos el objeto que necesitamos a partir del parámetro de la acción OData, usamos la clase JATExcelHelper para convertirlo en una colección Map. Este mapa usará como clave el número de la fila de la hoja de cálculo y como valor usará objetos Container con los valores de las diferentes columnas de la fila correspondiente.
En esta propuesta, recorremos el mapa mediante el uso de su enumerador y creamos registros a partir de los valores de cada fila del fichero Excel.
El resultado final se puede observar en el formulario alimentado por la tabla de la cual hemos creado los nuevos registros.
Espero que os sea de utilidad este artículo y podáis aplicarlo en vuestros futuros desarrollos. ¡Hasta la próxima! 😊