Al trabajar con la solución de Dynamics 365 Finance (previamente conocida como Dynamics 365 for Finance and Operations) se puede agregar funcionalidades a través de la extensibilidad que ésta posee. Sin embargo, existen algunos lineamientos y mejores prácticas que se deben de seguir para garantizar la integridad de la solución.

¿Cómo se puede aprovechar las capacidades de la extensibilidad para escribir un código más limpio?

A continuación, se muestra un ejemplo de cómo llevarlo a cabo.

Reducir el número event handlers vinculados a varios eventos a una misma función.

En la mayoría de lenguajes .Net (VB.Net o C#.Net) es posible vincular un solo event handler a múltiples eventos, un escenario simple podría ser cuando varios controles tienen una funcionalidad similiar. Además, es viable programar una única función que use los mismos parámetros del delegado para estos eventos, el resultado dependería del objeto sender y de los eventargs. Esto podría ser una buena opción si se busca reusar el código o reducir el número de métodos o funciones.

En el siguiente escenario se explica a continuación el procedimiento para poder implementarlo:

Requerimos implementar la misma funcionalidad en dos eventos de la tabla, cuando el registro es insertado y cuando es actualizado. Una solución poco efectiva es cuando se copia el mismo código en los dos event Handlers, por lo tanto, un mejor procedimiento es crear una única función en un solo event handler.

Como se puede observar en la siguiente imagen, primero tenemos que obtener la definición del event handler:

How Dynamics 365 Finance runs complex schedules with more efficient code extensions

Los dos eventos tienen la misma definición, esto quiere decir que tiene los mismos parámetros, un objeto sender del tipo Common y un parámetro args del tipo DataEventArgs.

Para darle un mejor significado a la función es recomendable renombrarla con el objetivo que alguien pueda entender el propósito de la función al leer el código.

Podemos copiar la definición del evento por la cual el event handler es implementado, y pegarlo separado de una coma (,) dentro de los corchetes, tal como se muestra la sección de código resaltada en amarillo. Esto hará que el mismo event handler sea ejecutado para ambos eventos.

Copy to Clipboard



Para verificar la funcionalidad podemos usar el siguiente job, en el cual hay dos eventos que han sido vinculados al mismo event handler previamente desarrollado y que debería ejecutarse dos veces, cuando el registro sea insertado y después cuando sea actualizado. En la siguiente imagen se muestra el job:

Copy to Clipboard



Al correr el job se confirma la doble ejecución de la función. A continuación, se muestra el resultado en el infolog:

How Dynamics 365 Finance runs complex schedules with more efficient code extensions

Podemos llegar a otro nivel, es posible implementar el mismo event handler no únicamente para eventos del mismo objeto, sino que también es posible para diferentes objetos siempre y cuando sean del mismo tipo, para el ejemplo que se está desarrollando es posible usar la clase base Common para implementar el código.

Para demostrarlo de una forma práctica se modifica la función del event handler previamente desarrollada.

Copy to Clipboard



Se vinculan dos eventos más, pero para un objeto diferente, en este caso en la tabla VendTable. Colocamos el job anterior y se le añade un código más complejo para comprobar que la implementación funciona para diferentes objetos. La función retornará un infolog mostrando la tabla y el registro que fue insertado o modificado.

A continuación, el job de comprobación:

Copy to Clipboard



En la siguiente imagen podemos ver el resultado similar al primer caso:

How Dynamics 365 Finance runs complex schedules with more efficient code extensions

Conclusión

Siempre se debe considerar que esto es posible únicamente si los eventos tienen event handlers con la misma definición, es decir, los mismos tipos de parámetros. El enfoque principal para esta implementación debería ser el objeto sender. Los objetos para los cuales se realiza este tipo de implementaciones comúnmente son formularios y tablas, para formularios el objeto sender son tipos xFormRun y para tablas son tipos Common, ambas son clases base. Los parámetros de los event handler deberían ser la base para programar funciones complejas para cualquier objeto y evento.

Acerca de AlfaPeople

Líder del mercado en el suministro de soluciones Microsoft Dynamics 365 por más de 10 años, AlfaPeople ha expandido sus operaciones a 14 países en todo el mundo con más de 550 empleados, AlfaPeople ofrece una gama de soluciones para negocio de Microsoft, Dynamics 365 Finance, Dynamics 365 Supply Chain Management, Dynamics 365 Sales, Dynamics 365 Customer Service y otros. Nuestros equipos combinan negocios y conocimiento técnico con experiencia en la industria, proporcionando excelentes resultados para las organizaciones que tengan la intención de dar el siguiente paso en la actualización de sus soluciones.

¡Contáctenos para hablar con uno de nuestros consultores!

Jose Fuentes
Jose Fuentes
Ingeniero de Desarrollo en AlfaPeople