Archivo de la categoría: Patrones de diseño

Patrón de diseño: Métodos de enganche

Este patrón de diseño es uno de los mejores que existen en Dynamics NAV para tener un menor acoplamiento de las personalizaciones en una empresa con respecto a la versión estándar y quitar la lógica de negocio de las tablas y páginas.

Gracias a este patrón, las migraciones de versiones se pueden hacer en un tiempo récord, ya que reduciremos el código personalizado al mínimo imprescindible. Una de las grandes recomendaciones que se hace desde Microsoft es que utilicemos este patrón en cualquier parte que modifiquemos el estándar, además de en todos los objetos que no sea necesario que contengan lógica de negocio.

La idea de este patrón es contar con un método que llame a diferentes funciones que realizan las personalizaciones que queramos hacer en el estándar de Dynamics NAV.

¿Cómo utilizamos este patrón?

Para ver la utilización de este patrón, a continuación se muestra un ejemplo para que entienda mejor. Imaginemos que cada vez que cada vez que creamos un proveedor queremos que se bloquee con el valor Todos. Para conseguir nuestro objetivo vamos a tener que modificar el método OnInsert de la tabla Vendor.

Para seguir el patrón, primero crearemos una nueva codeunit llamada Vendor Hook. Es decir, añadimos el sufijo Hook al nombre del objeto estándar que vamos a modificar.

hook1

Una vez creada la codeunit, crearemos una función que se llame como la función que estemos modificando, e insertamos en ella llamadas a diferentes funciones con nuestro código personalizado.

hook2

Ahora modificaremos el objeto estándar insertando una variable global con la codeunit que acabamos de crear, e insertaremos la llamada a la función.

hook3

hook4

Este ejemplo es muy simple, pero sirve a la perfección para entender el funcionamiento del patrón y ver cómo aplicarlo. Si lo pensamos a fondo, veremos que este patrón no tiene sentido que sea utilizado en el estándar, ya que las ventajas que proporciona no son aplicables al mismo.

Personalmente, me parece uno de los mejores patrones de Dynamics NAV que existen en la actualidad, ya que aunque utilicemos una codeunit por cada objeto del estándar que modifiquemos, la ventaja de tener la lógica de negocio separada y el poder realizar migraciones de versiones mucho más ágiles supera este inconveniente con creces. Eso sin contar con la posibilidad de poder reutilizar funcionalidad en las funciones que vayamos creando.