Callouts: extendiendo la lógica de negocio de Microsoft CRM con .Net (1)

Introducción


Este es el primer post de lo que espero sea una serie de post dónde tratar de recopilar información sobre callouts en Microsoft CRM 3.0. El objetivo final es tratar de hacer un tutorial (en castellano) sobre los callouts en Microsoft CRM 3.0. Intentaré cubrir todos los temas relacionados con los callouts, pero os animo a que si echáis en falta algo me lo comentéis para incluirlo. Así mismo, me gustaría recibir vuestros comentarios sobre cada post que vaya publicando para corregir los errores que encontréis, o cualquier otra sugerencia que queráis hacer.


Pues, ¿empezamos?…


El Concepto


La idea de los callouts en Microsoft CRM 3.0 es proporcionar un mecanismo, más o menos sencillo, para personalizar la lógica de negocio del CRM. Es decir, poder modificar o extender el comportamiento de las operaciones de negocio básicas del CRM.


Una forma de ver los callouts es pensar en eventos. Podemos pensar que Microsoft CRM 3.0 nos proporciona unos puntos de extensión en forma de eventos a los que nos podemos subscribir. Así, los callouts son como unos manejadores de eventos que cumplen un determinado interfaz y que se ejecutan cuando el CRM dispara el evento para el que lo hemos subscrito. Además, como Microsoft CRM 3.0 está creado sobre .Net, podemos utilizar cualquier lenguaje disponible en .Net (.Net CLR-Compilant).


La arquitectura


El modelo de los callouts de CRM 3.0 sigue una arquitectura bastante sencilla e intuitiva, lo que los convierte en una herramienta de extensión muy efectiva. Para empezar, disponemos de dos tipos de callout: los pre-callouts y los post-callouts. Los pre-callouts son aquellos que se ejecutan antes de que se realice la operación de negocio, mientras que los post-callouts se ejecutan después de que se ha completado la operación de negocio. La siguiente imagen, obtenida del SDK de Microsoft CRM 3.0, ilustra este concepto.



Cuando se solicita la ejecución de una operación de negocio, ya sea a través de un cliente de Microsoft CRM, de alguna herramienta de Microsoft CRM como el Administrador de implementaciones, o a través de terceras aplicaciones utilizando los servicios web del CRM, el servidor de Microsoft CRM se encarga de ejecutar uno a uno el código de los pre-callouts que hayamos registrado para esa operación. Una vez ejecutados todos exitosamente sin que ninguno de ellos indicase que se debe abortar la operación, el Servidor de Microsoft CRM ejecuta la operación de negocio. Cuando ha terminado la ejecución de la operación de negocio, Microsoft CRM comienza la ejecución uno a uno de los post-callouts registrados para la misma. Una vez terminado el proceso devuelve el resultado al solicitante de la operación. Para el solicitante de la operación (cliente del CRM, herramientas del CRM, o terceros) la ejecución de los callouts es totalmente transparente, en ningún momento tienen conocimiento de que se está ejecutando código personalizado.


A continuación tenéis la lista de tipos de callouts disponibles en Microsoft CRM 3.0. Pero hay que recordar, que no todos los tipos de callouts están disponibles para todas las entidades. Cada entidad tiene disponible un subconjunto de esta lista, podéis consultar la lista completa de callouts por entidad en esta página del SDK.




















































Evento Descripción
PreCreate Generado antes de que sea creada una instancia de una entidad
PostCreate Generado después de la creación de una instancia de una entidad.
PreUpdate Generado antes de la actualización de una instancia.
PostUpdate Generado después de la actualización de una instancia.
PreDelete Generado antes del borrado de una instancia.
PostDelete Generado después del borrado de una instancia.
PreAssign Generado antes de que a una instancia se le asigne un Nuevo dueño.
PostAssign Generado después de que a una instancia se le asigne un Nuevo dueño.
PreSetState Generado antes de cambiar el estado de una instancia.
PostSetState Generado después de cambiar el estado de una instancia.
PreMerge Generado antes de mezclar dos instancias.
PostMerge Generado después de mezclar dos instancias.
PreSend Generado antes de enviar un e-mail.
PostDeliver Generado después de enviar un e-mail.

Como podéis ver tenemos disponibles, más o menos, un pre y un post callout por cada tipo de operación básica del CRM. Hay que destacar que no existe limitación en cuanto al número de callouts que podemos subscribir a un evento, el servidor ejecutará secuencialmente todos los que se encuentre subscritos al evento disparado.


Los callouts reciben parámetros (marcados por un interfaz) cuando son invocados por el Servidor de Microsoft CRM, y pude devolver resultados al mismo. Los parámetros y valores de retorno disponibles dependen del tipo de callout. Pero en general reciben información sobre la instancia que genera el evento, el usuario que ha solicitado la ejecución y puede devolver modificaciones sobre los datos de la instancia y decisiones sobre la ejecución de la operación (pudiendo incluso abortarla).


Aplicaciones de los Callouts


Aunque no creo que haga falta explicar la utilidad de este mecanismo de personalización de la lógica de negocio del CRM, voy a proponer un par de ejemplos que a lo mejor ayudan a verle la utilidad.


Imaginad que necesitáis auditar los cambios que se realizan sobre los datos contenidos en el CRM y quien los realiza. En este caso los callouts son una buena solución. Podemos registrar post-callouts para todos los eventos que nos interese auditar y que estos se encarguen de escribir un registro de modificaciones. (En este post ya habíamos tratado este tema)


O pensad que necesitamos recoger ciertos datos adicionales al crear una nueva cuenta en Microsoft CRM, o simplemente comprobar si ya está duplicada. En este caso, un pre-callout puede ser la solución.


En el siguiente post….


En el siguiente post veremos las diferencias existentes entre los pre-callouts y los post-callouts, los interfaces disponibles para los callouts, la información que podemos recibir y devolver, y los pasos básicos necesarios para registrar un pre-callout y un post-callout en Microsoft CRM 3.0.


Espero vuestras sugerencias y comentarios,


Un saludo,


Marco Amoedo

2 comentarios en “Callouts: extendiendo la lógica de negocio de Microsoft CRM con .Net (1)”

Deja un comentario

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