External Business Events en Business Central - Business Central

Breaking

lunes, 9 de diciembre de 2024

External Business Events en Business Central

En ocasiones necesitamos hacer algún tipo de acción cuando algo ocurre en Business Central.  Alguno dirá, pues vaya descubrimiento, ya tenemos los disparadores de Power Automate:



Efectivamente, estos triggers o disparadores nos ayudan a lanzar flujos de Power Automate cuando algo ocurre:  Cuando se crea un registro, cuando se borra un registro, y... cuando se modifica un registro.  Ahora bien, ¿como sé el campo que se ha modificado?  Ya sé que se ha modificado un registro, pero sí quiero saber si se ha modificado un campo específico.  ¿como lo sabemos?

Podría hacer una copia del campo que se actualizase cuando se modifica...  Así puedo comparar cualquier nueva modificación, con lo existente en el campo copiado.  Pero eso no es muy eficiente.

Business Events


Para solucionar este tema, hace ya un tiempo nos aparecieron los Business Events.  Eventos externos que podemos usar para lanzar triggers cuando ocurran cambios en Business Central, pero no tan genéricos como una creación, modificación o borrado de un registro.  Son para cosas más específicos:



Cuando un cliente se bloquea, cuando una Job Queue falla, cuando un pedido de venta de libera,...  Estos son algunos de los eventos que tenéis disponibles en Business Central.  

Puedes encontrar toda la documentación aquí: 


Pero, y si a mí me interesan otros, ¿Como los creo?

Desarrollar Business Events personalizados


Si lo que queremos es que se ejecute un Power Automate cuando el nombre de un cliente se modifique, podemos diseñarnos un Business Event personalizado.

Para ello iremos a VSCode y crearemos una extensión, en la que añadiremos:

- Una extensión de un enumerado para ampliar las categorías de los eventos.  Como has podido ver en la documentación, tenemos varias categorias de eventos.

- Una codeunit en la crearemos el Business Event y una suscripción al evento deseado.

Sobre la extensión del enumerado no hay mucho que decir.

Para el Business Event, usaremos la siguiente firma:

[ExternalBusinessEvent('name', 'Display Name', 'Description', EventCategory)]
 procedure customerChanged(customerID: Guid; customerName: Text[250])
    begin
    end;

Es decir, creamos un ExternalBusinessEvent con un nombre, un nombre a mostrar, una descripción y una categoría del evento.  Además, añadiremos un procedimiento con la firma que necesitemos, en mi caso he puesto dos parámetros customerID (que será el systemID del cliente) y el customerName (el nombre del cliente).

Después nos suscribimos al evento que queramos.  En este caso, si lo que queremos es que se ejecute cuando modifiquemos el nombre del cliente, usaremos el evento "OnAfterValidateEvent" de la tabla Customer y del campo Name:

 [EventSubscriber(ObjectType::Table, database::Customer, 'OnAfterValidateEvent', Name, true, true)]
    local procedure OnAfterValidateEventCustomer(var Rec: Record Customer; var xRec: Record Customer; CurrFieldNo: Integer)
    begin
        customerChanged(rec.SystemId, rec.Name);
    end;

Y allí sí, llamamos al procedimiento creado como External Business Event, en mi caso customerChanged.

Probar el nuevo External Business Event en Power Automate


Una vez compilada y publicada nuestra extensión, lo único que nos quedaría es probar el evento en Power Automate.

Para ello abriremos el conector de Business Central y buscamos el trigger "When a business event occurs"



Dentro de los diferentes eventos predefinidos, tendremos ahora el "Name Changed" de la extensión publicada por mi.

Solo nos queda preparar nuestro flujo y como ejemplo, enviar un email al comercial, para que sepa que se ha cambiado el nombre:


Conclusion

Como podéis ver, podemos desarrollar nuestros propios Business Events para cualquier acción que tengamos en Business Central.

Si quieres verlo en funcionamiento, puedes verlo en mi canal:

No hay comentarios: