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:
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:
Publicar un comentario