Recicla tu código para Dynamics 365: Shared Projects

Recicla tu código para Dynamics 365: Shared Projects

23 septiembre, 2019 eromerof 0

Si algo he aprendido estos años que me dedico a desarrollar es que es vital la reutilización de código pero ¿por qué? Vamos a aplicarlo a un ejemplo de la vida real: Imaginad que necesitas poner unos clavos en la pared para colgar tu cuadro favorito. Para esto necesitamos los clavos, un martillo y la pared, ¿no?. Algo relativamente sencillo sin embargo, imaginad que por cada clavo que pongáis tengáis que fabricar un martillo nuevo.. algo realmente costoso, ¿verdad?. Pues este ejemplo me sirve para ilustrar lo que ocurre en nuestro código de Dynamics 365: Si tenemos una consulta que debemos hacerla desde un plugin y a la vez desde un workflow, podemos crear un método que extraiga este resultado y reutilizarlo en ambas partes y, para ello, podemos crear un proyecto común que contenga esta clase común y que vamos a referenciar desde ambos proyectos de workflow y plugin.

Hasta aquí todo es muy sencillo pero pronto nos veremos con un enemigo que no dudará en derrotarnos: Sandbox. SandBox es la «caja segura» donde tu puedes ejecutar código para Dynamics 365 pero con ciertas limitaciones. Desgraciadamente nuestra «clase común» será considerada una librería de terceros y Sandbox no permite la ejecución de librerías de terceros.

Sin embargo por supuesto que existen formas de incluir estas librerías de terceros y esta solución será ILMerge. Esta librería fusiona dll’s y que, en principio podría ser una solución porque fusionamos la dll de nuestro plugin con nuestra librería común y solucionado (de hecho me gustaría algún día escribir un post sobre este paquete de Nuget).

¿Solucionado, no? Pues siento decepcionarte de que NO, porque según Scott Durow esta solución no es soportada (o se pone bastante en duda) según este post. Finalmente la solución está en los Shared Projects: Son proyectos de Visual Studio ‘especiales’ donde podemos añadir clases «comunes» y estos proyectos se encargan de heredar las dependencias de los proyectos de los que dependen por ejemplo: Si tenemos un proyecto de plugin que está referenciado por la SDK, si también referenciamos el proyecto compartido este, también heredará las dependencias de la SDK. Las clases del proyecto compartido serán como las propias de cada proyecto y no será necesario utilizar ILMerge porque todas las clases estarán incluídas en la librería.

De este modo se nos acaban las excusas para hacer un código reutilizable, modularizado y sólido.. ¿Qué te parece? Espero que te haya sido útil esta aportación y espero tus comentarios sobre mejoras!

Leave a Reply:

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *