Cómo utilizar Upgrade Codeunits en NAV 2017

Desde la versión 2015 de Microsoft Dynamics NAV hasta la presente, se han venido incorporando al producto bastantes novedades a nivel de desarrollo. Después de haber pasado cierto periodo de madurez, inexplicablemente algunas de éstas no han gozado de tanta popularidad como merecieran, aún siendo tremendamente útiles. Una de estas características es la utilización de upgrade codeunits.

Habitualmente nos habremos topado con este concepto en los entornos de migración de versiones de NAV, como parte del proceso estándar de actualización de datos.

Sin embargo, podemos utilizar esta técnica en tareas más mundanas o habituales, siempre que haya que actualizar la estructura de una o varias tablas.

Un sencillo escenario habitual

Para ilustrar el uso de upgrade codeunits, vamos a realizar un ejemplo simplificado a partir de un escenario muy sencillo.

Imaginemos que tenemos una tabla en NAV, con la siguiente definición de campos:

Cómo utilizar Upgrade Codeunits en NAV 2017

Esta tabla, en el entorno de producción de nuestro cliente, contiene datos:

Cómo utilizar Upgrade Codeunits en NAV 2017

Sobre esta tabla, queremos hacer un cambio en su estructura. Concretamente, queremos cambiar el ID, el nombre, y el tipo de datos del último campo, de forma que la tabla resultante quede así:

Cómo utilizar Upgrade Codeunits en NAV 2017

Vamos a suponer que ya hemos realizado los cambios en esta tabla en un entorno de desarrollo, y ahora queremos actualizar el entorno de producción del cliente. Como hemos visto, en el entorno de producción esta tabla actualmente contiene datos, así que no podemos cambiar su definición tan fácilmente si no queremos perderlos.

Veamos cómo podemos llevar a cabo esos cambios sin perder información.

Cara a cara con el problema

Si intentásemos actualizar esta tabla en el entorno del cliente importando un fichero .fob con la tabla modificada, nos toparemos con este problema.

El sistema detectará que hay cambios potencialmente destructivos en la nueva tabla que estamos importando, y nos avisará de ello.

Cómo utilizar Upgrade Codeunits en NAV 2017

[ Recordemos las opciones de sincronización. Si elegimos la opción Synchronize Schema… Force, estaremos obligando a NAV a actualizar la tabla sí o sí, perdiéndose el contenido de los campos modificados. Evidentemente no es eso lo que queremos. ]

Cómo utilizar Upgrade Codeunits en NAV 2017

La sincronización, evidentemente, fallará:

Cómo utilizar Upgrade Codeunits en NAV 2017

Cómo utilizar Upgrade Codeunits en NAV 2017

Y la tabla nueva se habrá importado, pero como su esquema no se ha sincronizado con SQL Server, no podremos utilizarla. Y entonces sí tenemos un problema.

Cómo utilizar Upgrade Codeunits en NAV 2017

Vamos a ver qué tendríamos que haber hecho para actualizar correctamente los objetos sin perder datos.

El proceso de actualización de datos

Vamos a seguir estos pasos.

En nuestro caso tendremos esta nueva tabla:

Cómo utilizar Upgrade Codeunits en NAV 2017

Cómo utilizar Upgrade Codeunits en NAV 2017

Deberemos marcar la propiedad Subtype = Upgrade.

Cómo utilizar Upgrade Codeunits en NAV 2017

Esta codeunit deberá tener al menos dos funciones:

Opcionalmente es posible crear una tercera función para comprobar que se cumplen ciertas precondiciones que indicaremos nosotros, antes de realizarse la actualización de datos. Esta función deberá tener la propiedad FunctionType = CheckPrecondition.

Cómo utilizar Upgrade Codeunits en NAV 2017

Cómo utilizar Upgrade Codeunits en NAV 2017

Cómo utilizar Upgrade Codeunits en NAV 2017

Cómo utilizar Upgrade Codeunits en NAV 2017

Cómo utilizar Upgrade Codeunits en NAV 2017

Cómo utilizar Upgrade Codeunits en NAV 2017

Cómo utilizar Upgrade Codeunits en NAV 2017

Cómo utilizar Upgrade Codeunits en NAV 2017

Cómo utilizar Upgrade Codeunits en NAV 2017

Elegimos sincronización con Validación:

Cómo utilizar Upgrade Codeunits en NAV 2017 Cómo utilizar Upgrade Codeunits en NAV 2017

Cómo utilizar Upgrade Codeunits en NAV 2017 Cómo utilizar Upgrade Codeunits en NAV 2017

Cómo utilizar Upgrade Codeunits en NAV 2017 Cómo utilizar Upgrade Codeunits en NAV 2017

Cómo utilizar Upgrade Codeunits en NAV 2017

Cómo utilizar Upgrade Codeunits en NAV 2017

Comentarios adicionales

¿Qué ha pasado con nuestra función de tipo CheckPrecondition? Si la base de datos destino no hubiese cumplido los requisitos (en nuestro caso, no debería haber registros en la tabla Lín. Diario General), el proceso de actualización se hubiese detenido con un error, y tendríamos que usar los comandos de Powershell para averiguar el motivo del mismo:

Cómo utilizar Upgrade Codeunits en NAV 2017 Cómo utilizar Upgrade Codeunits en NAV 2017

Conclusión

Aunque la solución a este tipo de escenarios puede implementarse por código realizando usualmente varios procesos manuales (a los que estamos más que habituados), conviene plantearse la utilización de upgrade codeunits en aquellos casos en los que el volumen de datos a actualizar sea muy grande, o tengamos varias empresas.

Sus principales bazas residen en su alto rendimiento de proceso y en la posibilidad de semiautomatizar su ejecución mediante los comandos de Powershell.

Como siempre, estoy abierto a críticas constructivas. Así que podéis hacernos llegar vuestros comentarios o correcciones respecto a este artículo con total libertad. Un saludo.

 

Fran Blanco
Dynamics

 

Si quieres contactar con nosotros puedes enviarnos un email a mkt@aitana.es, usar el formulario de contacto o llamar al 902 500 358.

Nuestras últimas publicaciones:

Tuitear Compartir en Facebook Compartir en G+ Compartir en LinkedIn
Salir de la versión móvil