Inicio Blog Gestión de flujos de datos entrantes de Acumatica

Gestión de flujos de datos entrantes de Acumatica

El post de hoy es doble. Espero que el ejemplo de código incluido sea interesante para el lector, ya que resuelve un problema que sé que le ha ocurrido a más de un desarrollador e ilustra una metodología para procesar datos con un método Genérico.
Patrick Chen | 28 de febrero de 2022

Gestión de flujos de datos entrantes de Acumatica

Introducción

Nuestro producto, SPS Commerce EDI lleva los datos EDI a tablas de preparación en Acumatica a través de Web Service para su posterior importación en el ERP. En concreto, los datos JSON deben deserializarse y luego añadirse a los objetos de datos de Acumatica. Dado que eludimos la interfaz de usuario al cargar datos en el producto, es posible cargar datos de cadena en la caché que excederán las especificaciones SQL al ser insertados por el ORM. En iteraciones anteriores, el sistema ORM de Acumatica truncaba estos datos automáticamente para ajustarlos al campo SQL. Sin embargo, desde hace unos años, el ORM ha cambiado de modo que intenta insertar los datos sin una comprobación y la base de datos genera un error SQL si se supera una especificación de campo. Necesitaba una forma de restablecer esta comprobación y el posible truncamiento. Además, debido al tamaño de nuestro producto EDI, tengo que comprobar unos 20 flujos de datos entrantes diferentes, y aún quedan más. Por lo tanto, el reto consistía en validar los datos de cadena entrantes para múltiples DAC en una base de código fácil de gestionar sin codificar los tamaños de campo.

Solución

Check_Field_Lengths_InsertUpdate<T> is a generic method which means that the parameter data types are deferred until the method is called.  After I’ve deserialized my JSON data and translated it into DAC objects, I call the method with the cache of the appropriate data view and the list of DAC objects as parameters.  The method then loops through each DAC object accessing the DAC definition via the cache and checking each string field in the object for length.  If necessary, the method truncates the incoming data and then inserts or updates the object (myCache.Update() does both!) via myCache.


GIST: https://gist.github.com/patrick711/9ff5b6e9da90bcc52e14803269be5dd7

En la versión de producción de este método, se genera una advertencia para el usuario cuando se ha producido un truncamiento. Dado que se trata de datos de ensayo, el usuario tiene la opción de corregir los datos y volver a procesarlos. De este modo, nuestro flujo de trabajo está protegido de errores fatales que podrían haber hecho caer toda la transacción.

Resumen

Esperemos que esto te haya resultado interesante e incluso si no tienes necesidad de validar datos de cadena, te interesará implementar métodos genéricos para procesar múltiples tipos DAC y mantener tu código fácil de mantener.

¡Feliz desarrollo!

Autor del blog

Patrick es el desarrollador principal de SPS Commerce EDI para Acumatica. Está totalmente certificado como desarrollador de Acumatica y lleva trabajando con el producto desde 2013. Lleva más de 17 años desarrollando software a medida en el sector de los ERP.

Reciba las actualizaciones del blog en su bandeja de entrada.