Hola querido lector, el día de hoy quiero presentar un tema que me emociona demasiado.
En la mayoría de proyectos que
desarrollamos en nuestro día a día, siempre existe la necesidad de llevar
información a otros sistemas para múltiples fines. Ya sea para mantenerla en
sincronía e integra, ejecutar operaciones transaccionales, cambio de estados y
miles de reglas de negocio que puedan surgir en el desarrollo de un proyecto.
El día de hoy quiero mostrarles cómo
utilizar el Service Bus de Microsoft Azure, una excelente
herramienta que nos permite de hacer múltiples
escenarios de integraciones que cubren muchas de las necesidades con las que
nos topamos día a día.
Para seguir este paso a paso debes contar con lo
siguiente:
- PowerShell de Microsoft Azure
- Cuenta de Microsoft Azure
- Dynamics CRM Online
- Visual Studio
- SDK Crm 2016
Nota: El Powershell de azure lo
puedes instalar a través de Web Platform installer.
Instalación de powershell desde web platform installer |
Una vez tengamos estos elementos, haremos lo siguiente:
Primero y antes que nada me gustaría compartir la arquitectura de integración de Dynamics CRM con Azure Service Bus, en la siguiente imagen se ve como es la integración:
Todo este proceso es el que vamos a implementar a continuación, como primer paso, procedemos a crear en Azure el bus de servicios. Antes de hacerlo hay que tener algo en cuenta que es muy importante. El asistente de Azure para crear el service bus, viene con un tipo de autenticación diferente a Access Control Service (ACS), que no es compatible con la implementación que realizaremos. Es por eso que como primer paso, vamos a autenticarnos en la consola de azure para poder realizar esta implementación por medio de consola, entonces procedemos a ejecutar como administrador el powershell de Azure.
Primero y antes que nada me gustaría compartir la arquitectura de integración de Dynamics CRM con Azure Service Bus, en la siguiente imagen se ve como es la integración:
Arquitectura de integración Dynamics CRM y Service Bus tomado de MSDN Microsoft |
- En la imagen # 1 hay un cliente que está escuchando y procesando los mensajes que hay en una cola de service bus llámese aplicación de consola, Servicio de windows, Biztalk o alguna tecnología similar.
- En la Imagen # 2 vemos a un usuario que interactúa con Dynamics CRM y dispara una acción (create, update, delete ... etc).
- En la Imagen # 3 vemos el contexto que viaja y es almacenado en una cola de Service bus
Todo este proceso es el que vamos a implementar a continuación, como primer paso, procedemos a crear en Azure el bus de servicios. Antes de hacerlo hay que tener algo en cuenta que es muy importante. El asistente de Azure para crear el service bus, viene con un tipo de autenticación diferente a Access Control Service (ACS), que no es compatible con la implementación que realizaremos. Es por eso que como primer paso, vamos a autenticarnos en la consola de azure para poder realizar esta implementación por medio de consola, entonces procedemos a ejecutar como administrador el powershell de Azure.
Importante: Antes de iniciar con este paso, en mi caso tuve problemas con el proxy de la compañía, ya que no me permitía ejecutar completamente los comandos, si este es tu caso, solicita los permisos apropiados o intenta con una red que no tenga este bloqueo, y espero esto te sirva de referencia porque suele pasar en muchos casos.
Luego de estar autenticados, la consola nos confirmará mostrando los datos que tengo tachados en esta imagen. |
Una vez autenticados, procedemos a crear el Service Bus por medio del Power shell con el siguiente comando:
La consola nos confirmará mostrando los datos de la cola que ha sido creada |
Aquí hemos terminado el uso de PowerShell y lo que vamos a realizar en este momento es la creación de una cola que almacenará todos los contextos de ejecución que necesitemos en caso de integración, para esto ingresamos al portal de Azure y hacemos la creación de una cola.
En este caso para crear la cola, entra al service bus que ya ha sido creado,
Y en la opción de abajo haga clic en la opción Nuevo:
Una vez hagas clic en esta acción, se muestra el siguiente menú, en cual ingresarás la información solicitada.
Al hacer clic en crear una nueva cola, se creará la cola que utilizaremos
El siguiente paso es conectar Dynamics con esta cola, para ello vamos a configurar por medio del SDK un extremo de servicio, Autenticados en la herramienta plugin registration tool, que está contenida en la carpeta SDK\Tools\PluginRegistration del SDK. Realizaremos los siguientes pasos:
En la parte superior del plugin registration tool, utilizamos la opción Register, y seleccionamos Register new service EndPoint:
Configuración de extremo de servicios |
Una vez ingresemos la configuración inicial, vamos a presionar el botón Save & Configure ACS, y se nos abrirá una pantalla solicitando alguna información la cual es muy importante para que se haga el proceso de autenticación, en este caso el Management key, se encuentra en el Service Bus de azure, en las siguientes imágenes se observa cómo obtener dicha key:
Hacer clic a Información de conexión |
Conexión |
En el campo Management Key pegamos el valor de "Clave predeterminada" mostrado en la anterior imagen, en Certificate File, seleccionamos un certificado que encontraremos en Dynamics CRM en el área de personalizaciones:
Área de personalizaciones Dynamics |
Herramientas de desarrollador |
Procedemos a descargar el certificado a nuestro equipo local y lo seleccionamos, y en el campo Issuer Name, ingresamos el que nos proporciona Dynamics.
Configuración ACS |
Verificación de configuración |
EndPoint Creado |
En mi caso registraré un paso en el evento Create del contacto y otro en el Update de contacto, para que a medida que vayan actualizando esos registros, estos se encolen y sean procesados por una aplicación de consola:
Pasos registrados |
Así quedaría mi endpoint con los dos pasos:
Pasos registrados |
Para leer los mensajes de la cola, hay que configurar algunas cosas:
En el app.config, hay una key llamada "Microsoft.ServiceBus.ConnectionString", esta deberá ser reemplazada por la cadena de conexión que está en el service bus de azure:
Cadena de conexión Azure |
Así mismo, en el código fuente de la clase, hice un par de modificaciones:
En las variables del método consumer, puse los siguientes valores:
string serviceNamespace = "integracioncrmig"; // Es el nombre del bus de servicios
string issuerName = "owner"; // Es el emisor predeterminado
string issuerSecret = "ClavePredeterminada";// Es la clave predeterminada
En el método ProcessMessages de la misma clase, añadí la siguiente lógica para que leyera los eventos del create y update del contacto:
Con esto ya listo y la aplicación de consola corriendo, al crear un contacto o actualizarlo, ya podré ver los contextos registrados en la cola:
Al guardar el contacto, se llevará todo el contexto de esa transacción hasta la cola:
Vista de cola en Azure |
Finalmente nuestra consola estará en capacidad de procesar los mensajes almacenados en la cola:
En conslusión, Dynamics CRM ofrece sólidas posibilidades de integrar su información de una manera muy fácil y en pocos pasos. permitiendo así reducir los costos de tiempo y dinero al momento de pensar en integrar o de idearse un mecanismo seguro de integración.
Los invito a que hagan su propio experimento y me cuenten como resultó.