BC Way - Implement Custom Business Events


Bienvenido a BC Scout Path, hoy vamos a explorar los Business Events📃(en el sentido técnico, no eventillos de postureo empresarial) en Business Central.

En Business Central, los Business Events son la forma oficial de decirle al mundo exterior:

👉 “Oye, acaba de pasar algo importante aquí dentro”.

En este artículo de la serie BC Way, vamos a recorrer el camino correcto (y limpio) para implementar Business Events personalizados, pensados para integraciones modernas con Power Automate, Dataverse u otros sistemas externos.

Nada de hacks chungos o acoplamientos imposibles.
Solo eventos bien diseñados, mantenibles y listos para producción.

🎯 ¿Qué es un Business Event (y qué NO lo es)?

Antes de escribir una sola línea de AL, aclaremos conceptos.

✅ Un Business Event es:

  • Un evento de negocio, no técnico

  • Algo que tiene sentido fuera de Business Central

  • Un disparador para flujos, procesos o integraciones

Ejemplos:

  • Pedido liberado

  • Factura registrada

  • Cliente bloqueado

  • Stock por debajo de mínimo

❌ No es:

  • Un OnAfterInsert() técnico

  • Un evento por cada cambio de campo

  • Un “por si acaso alguien lo necesita”

Regla BC Way:
Si no sabes como se lo explicarías a alguien de negocio en una sola frase, no es un Business Event.

La estructura limpia suele ser:

  1. Evento técnico interno

  2. Capa de dominio / lógica

  3. Business Event público

  4. Consumo externo (Power Automate, etc.)

Esto nos permite:

  • Separar lógica de integración

  • Reutilizar eventos

  • Versionar sin miedo

Como siempre, recuerda que tienes todo el código que voy mencionando en el siguiente repositorio:

fernandoartalf/BC-Scout-Path 


1- Contexto funcional:

Seguimos extendiendo la extensión de cuentas estadísticas, esta vez los requisitos de nuestra funcionalidad son los siguientes:

  • Necesitamos exponer Business Events para permitir integrar con Power Automate cuando creamos nuevas cuentas estadísticas desde una Power App así como al registrar valores de las mismas a lo largo del tiempo.
  • Deberemos de disponer de un log en el que ver si los eventos de negocio se han lanzado correctamente y en que fecha y hora.
  • Los flujos creados en Power Automate deberán de ser almacenados en una solución de Dataverse y su gobernanza deberá de seguir los estandares de buenas practicas de desarrollo (veremos pronto que significa esto en Dataverse😉).
2- Contexto técnico:

Seguimos extendiendo la extensión de Microsoft “Statistical Accounts”, para ello hemos declarado en el archivo app.json nuestra dependencia.

Si quieres saber como puedes verlo en este articulo:

Además vamos a reutilizar parte de la estructura de nuestro código relacionado con las API Pages que puedes ver en este articulo:


3- Desarrollo:

Vamos a hacer lo siguiente:
  • Definir Event publishers. 
  • Definir Event subscribers.
  • Definir nuestra categoría de eventos para cuentas estadisticas.
  • Definir los Business Events.
  • Publicar la extensión y Crear nuestros Power Automates relacionados.
No son muchas cosas 📚 este desarrollo es mas sencillo que la receta del bocata de jamón y queso 🥪. La complejidad de este desarrollo es diferente, ya que debemos de saber como suscribirnos y crear los eventos en el lugar adecuado del proceso.

Empezamos!

Crearemos una función publicadora que nos permita enlazar nuestro evento de negocio tras crear una cuenta estadística (la tenemos definida al final de la tabla).


Crearemos ahora los event subscribers relacionados con el publicador que hemos creado así como otro para enlazar con el registro de valores de cuentas estadísticas en históricos.

Recuerda que tienes snippets para crear event subscribers



Pero si hay algo mejor que un snippet es que te den la función ya lista para usar 🔝, y eso existe y lo tienes disponible desde VS Code, busca AL Explorer, navega al apartado de eventos y si filtras el modulo puedes ver los eventos tanto del Base Application como de otras extensiones que tengas definidas en packages. Selecciona cuidadosamente la que tiene sentido, pulsa el botón de subscribe y pega el código en tu Codeunit favorita!.



Antes de crear los Business Events que tienes arriba deberemos de crear un Enum Extension para extender las categorias de eventos de negocio (y por si te lo preguntabas, Business Central no permite por ahora usar las categorias estandares en tus eventos de negocio personalizados).



4- Funcionalidad:

Ahora una vez publiquemos la extensión en Business Central podemos crear los flujos de Power Automate desde nuestra solución en Dataverse.

En el entorno de Dataverse iremos a nuestra solución y crearemos un flujo cloud de Power Automate de tipo automated. En este flujo simplemente usaremos como trigger la creación de cuentas estadísticas, la cual desencadenará la acción de enviarnos un Email avisándonos de que se ha creado en la empresa de BC.

Nota muy importante: Usa variables de entorno en soluciones de Power Platform para definir Entornos y empresas en los flujos, meterlo a fuego como lo ves en mi ejemplo es descriptivo pero no una buena practica. 


Una vez creado y guardado el Power Automate podremos ver en nuestro entorno de Business Central que se ha creado un registro en "Business Event Subscriptions" que hace referencia a nuestra conexión de Power Automate contra nuestro Business Event. Desde esta pantalla seleccionando el registro que nos interesa y pulsando el activity log podemos navegar a la tabla de logs filtrado por ese evento.


En "Business Event Notifications" y "Business Event Activity Log" vas a poder ver los logs de registro de actividad de los Business Events, esto es especialmente util para hacer debug y entender si tus problemas vienen de BC o de Dataverse.


Desde Dataverse también puedes ver logs de actividad del cloud flow que te interese desde el mismo flow. Incluso puedes revisar el motivo de error si este falla en Power Automate.  En el  caso de ejemplo de error vemos que el trigger funcionó bien, sin embargo el envió de Email tiene una incidencia técnica de Microsoft que nos limita el poder usarlo.


Nota muy importante:
tener en cuenta que un Business Event funciona de manera asíncrona y que un error en el código posterior a nuestro business event (dentro de la misma transacción) lo anulará ya que se hace rollback de la transacción y esto incluye el dejar un event notification para que Power Automate lo ejecute (salvo que se te ocurra poner un Commit después del business event y antes del error pero es una pésima idea por el peligro que eso supone). 

5- Conclusión:

Los External Business Events no son solo una característica más de Business Central, son una declaración de intenciones sobre cómo entiendes tu ERP y su papel dentro del ecosistema digital de la empresa.

Implementarlos bien significa asumir que Business Central ya no vive solo:

  • Vive conectado a Power Automate

  • Vive junto a Dataverse

  • Vive rodeado de Power Apps, agentes, procesos y automatizaciones

  • Vive en un mundo event-driven, no reactivo ni manual

Un Business Event bien diseñado convierte a Business Central en:

  • Un emisor de contexto de negocio

  • Una fuente fiable de verdad

  • Un orquestador, no solo un registrador de datos

Y aquí está la clave compañero! 👇

No se trata de lanzar eventos, se trata de comunicar decisiones de negocio.

Cuando publicas un Business Event estás diciendo:

  • “Esto importa”

  • “Esto es estable”

  • “Esto puede ser usado por otros sin preguntarme cada semana”

Por eso, diseñarlos sin criterio es peligroso…
pero diseñarlos bien es liberador.

Liberas:

  • A los equipos de Power Platform

  • A los integradores

  • A los futuros tú que heredarán ese código 😅

Y, sobre todo, liberas a Business Central de ser “el sistema al que hay que preguntar”, para convertirlo en el sistema que avisa.

Nos vemos en la próxima parada del BC Scout Path 🧭
Spoiler: habrá más código, más integraciones… y probablemente mas Dataverse de por medio😉.

Remember: Talk is cheap, show me the code!

Post a Comment

Previous Post Next Post