top of page

Business Events en Dataverse



Hace unos dias desde Power CAT Live (que si no estás suscrito, te lo recomiendo encarecidamente), subían un video muy interesante donde hablaban de los eventos empresariales o Business Events en Dataverse.


Como ya sabrás Dataverse ofrece un marco de trabajo basado en eventos: cuando ocurre una cosa, hago otra. Por ejemplo: cuando se crea/comparte/asigna/actualiza/elimina un contacto, hago una serie de acciones. Nada nuevo.


Pero no podía faltar una parte muy importante. La de poder crear nuestros propios eventos customizados. Y más importante aún, en un escenario donde los eventos customizados se multipliquen por momentos, organizar estos eventos. Es aquí donde aparecen los conceptos: Catalog y CatalogAssignment.

Pero no nos adelantemos. ¡Espera!.


Si no te has dado una vuelta por los post donde hablabamos de Custom API, echa un vistazo por que precisamente para crear eventos customizados nos basamos en eso: en las Custom API.


Como ya hablamos en estas entradas cuando creamos una nueva Custom API, automáticamente en Dataverse se crea un mensaje o evento con el mismo nombre. Y es justo con este mensaje con el que vamos a trabajar. Unos cuantos pasos muy sencillos.


Vamos allá.


Crea una nueva solución y da de alta una nueva Custom API. En mi caso lo que he hecho ha sido crear una a la que he llamado ApproveContact y que como habrás podido deducir es una API a la que vamos a llamar cuando se apruebe un Contacto. La configuración es muy sencilla como ves en la siguiente imagen.


Los parámetros de entrada son muy fáciles de configurar como ya habíamos visto. En mi caso he creado dos parámetros: uno que recibe el nombre del contacto en formato string y un identificador único de cada request para poder tener cierta trazabilidad.




Aquí es donde entran dos conceptos importantes para tener un catálogo sostenible y escalable de eventos que poder poner a disposición de cualquier sistema que necesite integrarse con nosotros. Estos conceptos son Catalog y CatalogAssignment. Aquí te dejo el link a la documentación oficial de Microsoft, aunque resumiendo es un modelo de datos capaz de organizar nuestro catalogo de eventos.



Como ves hay una tabla principal llamada Catalog que almacena y organiza catálogos de eventos que pueden depender unos de otros. Para relacionar los catálogos de eventos hijos con los propios eventos, aparece la tabla CatalogAssignment.


Diríjete a tu solución y añade un nuevo catálogo desde New > More > Other > Catalog, que hará de catálogo padre e indica el nombre interno, el nombre y el display name. Repite la operación creando un catálogo hijo del que acabas de crear en el paso anterior. En mi caso, el catálogo hijo almacenará eventos customizados por lo que le dado un nombre descriptivo:

¡Listo!, no hay nada mas que hacer. Fácil, ¿verdad? Vamos a probar lo que hemos hecho. Crea un nuevo flujo de Power Automate para desencadenar el evento y observa que cuando indicas el evento, te pide los parámetros de la Custom API que hemos indicado:


Crea otro flujo de Power Automate y como trigger de este nuevo flujo selecciona el conector de Dataverse y la acción con nombre: "Cuando se produce una acción". Fíjate que en todos los desplegables disponibles, van apareciendo los catálogos que hemos ido creando. ¿Está organizada la cosa o no? 😉 En mi caso la configuración es la siguiente:


Ahora solo falta ejecutar nuestro primer flujo para lanzar nuestro evento customizado y comprobar que el segundo se ejecuta, que ya te digo que si se va a ejecutar sin problemas 😊. Observa el body de la request donde tenemos todos los parametros y toda la información necesaria para procesar este evento como sea requerido:


A partir de aquí las posibilidades son múltiples: capturar estos eventos con Power Automate, notificar eventos a un WebHook dando de alta el step desde PluginRegistrantionTool, etc.


Como puedes comprobar, prácticamente no hay requisito o necesidad funcional que no podamos cubrir con el potencial que nos ofrece Power Platform y Dataverse.


¡Gracias por tu tiempo! ¡Nos vemos en la siguiente!

bottom of page