Frecuentemente, como partner o como responsable del departamento de informática, puedes escuchar eso de: algo no funciona en Business Central. Después de perder un tiempo, te das cuenta que esa cola de proyectos que se debía de haber programado, lleva tres días sin ejecutarse por un error.
No sería mejor, adelantarnos y que de alguna manera, pudieramos recibir una alerta para detectar que las colas de proyecto se han parado.
¿Que son las colas de proyectos?
Las colas de proyecto es una herramienta disponible en Business Central para ejecutar procesos (reports y codeunits) desatendidamente en unos horarios predeterminados. Lo habitual es que dichos procesos se ejecuten fuera del horario habitual de trabajo, bien por los recursos que consumen (facturación automática, generación de facturas por EDI,...) bien por que solamente con que se ejecuten una vez al día sería suficiente (actualización del tipo de cambio, descargar las reservas de un Channel manager,...)
En una cola de proyecto, debemos definir:
El tipo de objeto a ejecutar: Codeunit o Report
El ID del objeto a ejecutar: El número de la codeunit o del report
Primera hora de inicio: A partir de cuando se tendrá que ejecutar.
Periodicidad: Cuando se tendrá que ejecutar y a qué hora.
Una vez configurada, hay que marcar la cola de proyecto como "Preparada":
El problema puede venir, si en algún momento ese proceso nos da un error. Dado que se ha ejecutado desatendidamente, no veremos que realmente no ha finalizado correctamente. Solamente queda una marca indicando "Error" pero no avisa a nadie.
Eso puede llevarnos a unos problemas como por ejemplo que estemos facturando con un tipo de cambio que no está actualizado, o que por ejemplo si fuesemos un hotel y desde Booking nos han realizado una reserva, no nos hemos enterado puesto que no se han descargado correctamente.
Telemetría
La telemetría de Business Central ha llegado para ayudarnos en estas tareas. En un post anterior (ver aquí) os indicaba como poder conectar Business Central a un Azure Application Insight y visualizar los datos en un Power BI. Esto está fenomenal, pero claro o tenemos un panel en nuestra oficina al estilo de la NASA para controlar nuestros sistemas:
O utilizamos las alertas.
En esta documentación oficial de Microsoft (link) podemos encontrar todos los eventos que genera la telemetría de Business Central. Es importante saber que se generan, los utilices tú o no, generarse se están generando.
Hay muchos eventos: Accesos con error, accesos satisfactorios, borrados de empresas, ... pero hoy nos vamos a centrar en el error cuando una cola de proyectos falla: AL0000HE7
Puedes ver la documentación oficial aquí: AL0000HE7
Si quieres utilizarlos, tienes que crearte un recurso de Azure Application Insight (en tu tenant, no tiene que ser en el tenant del cliente), como explicaba en el anterior post, y obtener la cadena de conexión:
Probando que la telemetría llega.
Ya está configurado, ahora solamente nos queda probar que realmente la telemetría está llegando a nuestro Application Insights.
Para ello seleccionaremos en el panel lateral de Azure Application Insights, la opción "Registros" y aquí podemos hacer consultas en lenguaje KQL. Es verdad, que no es un lenguaje conocido pero es una variación del SQL. (ver documentación aquí ). Pese a todo, Microsoft nos suministra ya una serie de ejemplos de consultas que podemos utilizar en Github (ver aquí)
En especial, para el caso que nos ocupa, tenemos una consulta ya definida en la que nos muestra como capturar los errores de las colas de proyectos:
Por tanto, ya podemos probar la consulta en Application Insights:
La consulta en cuestión es la siguiente:
traces
| where timestamp > ago(1d) // adjust as needed
and customDimensions.eventId == 'AL0000HE7'
| project timestamp
, aadTenantId = customDimensions.aadTenantId
, environmentName = customDimensions.environmentName
, environmentType = customDimensions.environmentType
, alJobQueueId = customDimensions.alJobQueueId
, alJobQueueObjectId = customDimensions.alJobQueueObjectId
, alJobQueueObjectType = customDimensions.alJobQueueObjectType
, alJobQueueStatus = customDimensions.alJobQueueStatus
, alJobQueueExecutionTimeInMs = customDimensions.alJobQueueExecutionTimeInMs
, alJobQueueStacktrace = customDimensions.alJobQueueStacktrace
Una vez probada, comprobamos en la parte inferior que efectivamente ha habido errores en nuestros tenants. Hemos ganado que ahora, podemos comprobar todos desde el mismo sitio, pero seguimos teniendo un problema de tener que venir a mirar aquí.
Creando alertas en Power Automate
Es posible crear alertas desde el propio Application Insights como nos explica en este blog Stefano Demiliani (ver blog) pero tiene coste en Azure por cada alerta, por lo que yo voy a generarlo con Power Automate, que tendrá que no tiene coste asociado (salvo el del propio Power Automate y Azure Application Insights. Hay que decir, que esto mismo se puede programar en Logic Apps.
Lo primero que debemos hacer es crear un flujo programado. Es decir, que se ejecute a unos determinados momentos. La periodicidad será en función de la criticidad de las colas de proyecto que tengamos. Supongamos que lo programamos para que el flujo se ejecute cada hora.
La clave API generada, solamente la podrás ver una vez, así toma nota de ella.
Una vez que tenemos la conexión en Power Automate, nos pedirá la consulta a ejecutar. Es decir, la misma que hemos ejecutado en el Application Insight, la pondremos aquí para que se ejecute con la recurrencia indicada.
El siguiente paso será poner una condición en el flujo, mediante el cual decidiremos si la condición nos ha devuelto algo o no. Esto lo haremos con la expresión:
Si tienes cualquier duda, puedes preguntarlo en los comentarios.
No hay comentarios:
Publicar un comentario