Solución de problemas de la caché de Acumatica

La próxima vez que te encuentres dándote cabezazos contra el escritorio por culpa de errores vagos y poco específicos, recuerda que no, Acumatica no te odia y que sí, que hay una razón para el error aunque el mensaje no sea ni de lejos suficiente.
Patrick Chen | 28 de julio de 2022

Solución de problemas de la caché de Acumatica

Introducción

Solucionar errores de plataforma en Acumatica puede ser difícil. En general, esperamos que los mensajes de error nos digan exactamente qué es lo que ha ido mal. Lamentablemente, hay errores que los ingenieros de la plataforma no pueden prever. Difícilmente se puede culpar a Acumatica cuando mi software personalizado causa un problema al integrarse con el producto estándar. A veces, la plataforma xRP arrojará errores genéricos o, peor aún, ningún error.

Como ejemplo, nuestro producto, SPS Commerce EDI tiene un proceso que empaquetará automáticamente los envíos basándose en un complicado conjunto de opciones. Crearemos x número de paquetes, contenido para cada paquete con y número de artículos de las líneas de envío, asignaremos palés, etc. También tenemos una página de procesamiento en la que el cliente puede empaquetar varios envíos a la vez. Es como barajar cartas o hacer un sándwich gigante de Dagwood. El bucle se complica, y me he encontrado con algunos problemas en el camino.

A continuación se presentan dos de los problemas más difíciles con los que me he encontrado y los detallo aquí porque espero que mi experiencia sea útil para otros. Estos dos problemas no suelen lanzar excepciones y sólo te enteras de ellos cuando intentas guardar el trabajo al final del procesamiento.

Problemas con los sellos de tiempo

El temido Otro proceso ha actualizado el registro 'xxx'. Tus cambios se perderán. error tiene muchas causas posibles. Una de ellas es que el objeto con el que está trabajando actualmente tiene un valor de fecha y hora que no coincide con el de la base de datos y es más joven. Si intentas guardar el envío de nuevo en la base de datos cuando está desfasado, el proceso lanzará una excepción. Obvio, ¿verdad? Sin embargo, puede ser que haya actualizado un objeto DAC relacionado que, debido a alguna conexión, también hará que el objeto de cabecera con el que está trabajando se actualice en la base de datos.

Como ejemplo, tengo un código que realiza algunas transacciones contra varias tablas de Acumatica en un ámbito de transacción separado. Actualizo SOPackageDetail y SOShipline antes de refrescar esas cachés y comenzar a empaquetar. He encontrado que en algunos escenarios, una vez que el ámbito de la transacción se compromete, el objeto SOShipment con el que estaba trabajando estaba ahora fuera de fecha en relación con la base de datos. Cuando fui a guardar mis cambios al final del proceso, se lanzó la excepción. La conclusión es que otros procesos pueden actualizar la caché e incluso guardar en la base de datos mientras usted interactúa con Acumatica. Si obtiene este error, es posible que sus objetos necesiten una actualización de la caché.

Inserciones fallidas

Uno de los problemas más frustrantes que me he encontrado al trabajar con Acumatica es cuando una inserción falla sin excepción. El objeto devuelto al final de una inserción en caché es nulo y no hay ningún error que describa el problema.

GIST: https://gist.github.com/patrick711/40653d1db0358bfcede94011fb7df22c

Según tengo entendido, hay tres razones principales para ello:

  1. El registro insertado no es del tipo correcto. Lo que has enviado no es del DAC correcto. Esto es bastante fácil de detectar
  2. El guardado se canceló en un evento RowInserting. Alguna lógica de evento ligada a la Caché puede estar cancelando la inserción.
  3. Atributos PXParent y PXLineNbr. Si su DAC está en una relación Padre-Hijo. Es posible que el registro se haya rechazado porque su caché no está sincronizada con el registro .Current del DAC principal. En particular, el atributo PXLineNbr puede causar problemas si no puede calcular correctamente el siguiente número de línea basado en el .Current padre.

Conclusión

Con suerte, este artículo le dará un punto de partida la próxima vez que se encuentre con errores similares. Es fácil sentir que no hay nada a partir de lo cual trabajar en estos casos. Por lo menos, la próxima vez que te encuentres golpeándote la cabeza contra el escritorio debido a errores vagos e inespecíficos, recuerda que no, Acumatica no te odia y sí, hay una razón para el error, incluso si el mensaje no es suficiente.

Respire hondo y examine las relaciones que el DAC con el que está trabajando puede tener con la Base de Datos, el Modelo de Eventos y con otros DACs.

¡Feliz codificación!

Patrick

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.