How To: Depurar Business Central SaaS - Business Central

Breaking

martes, 30 de noviembre de 2021

How To: Depurar Business Central SaaS

Uno de los problemas que nos podemos encontrar en una extensión en Business Central es detectar un error o mal funcionamiento en un entorno de producción en la nube.  ¿Como podemos hacer el seguimiento para descubrir que lo está provocando?  No disponemos de un Debugger para reproducirlo.  ¿O sí?

Snapshot Debugging

Desde la versión 17.2, podemos hacer una foto de lo que ha ocurrido en nuestro entorno de producción de Business Central, mediante el Snapshot Debugging para luego reproducirlo en Visual Studio Code.

Imagen 1 - Configuración adicional para Debug


Nueva configuración

Podemos hacer una depuración desde un nuevo proyecto de VSCode, aunque yo aconsejaría hacerla desde el mismo proyecto en el que tenemos desarrollada la extension a verificar ya que de lo contrario, según como esté configurada (principalmente la opción ShowMyCode), no podremos poner puntos de interrupción (ahora llamados SnapPoints) ya que nos aparecerá un mensaje como este:

File cannot be opened. Publisher of the application has set ShowMyCode property to false.

En el fichero Launch.json crearemos una nueva configuración como la mostrada en la imagen 1 de arriba.

Los datos a incluir serían, además de los habituales type y name:

request: se trata de una nueva propiedad llamada "snapshotInitialize".  Sera la encargada de indicarle a nuestro tenant que vamos a hacer un snapshot.

environmentType y environmentName:  Son el nombre y el tipo de entorno que vamos a comprobar, incluyendo los de producción.

breakOnNext: WebClient, indicará que vamos a revisar el cliente web.

snapshotVerbosity: Full / SnapPoint .  Indicarán la extensión de la grabación.  Si queremos grabar todo o queremos grabar solamente en los SnapPoints.

sessionID: 83755 Indica la sesión a analizar.  La podemos localizar desde la ayuda de Business Central:




executionContext: Debug / Profile / DebugAndProfile.  Indica cual es la razón de la ejecución:  Para debugear, para generar un perfil de rendimiento (esto sería para otro post) o para las dos cosas.

Poner puntos de interrupción (SnapPoint)

Una vez configurado el archivo launch.json, nuestro siguiente paso será poner puntos de interrupción donde queramos que el sistema empiece a grabar.  En mi caso, he creado una extensión en la que desde una acción de "Item List" llama a una codeunit.  Por lo que he puesto varios SnapPoints para que se vaya parando:


 

Nuevas instrucciones: Initialize SnapShot y Finish SnapShot

Desde la Paleta de comandos tenemos dos nuevas instrucciones:


Initialize snapshot

Con la instrucción Initialize snapshot (F7) comenzamos la grabación de nuestro snapshot.  Ejecuta un request al servidor, para indicarle que tiene que empezar a depurar:


Comprobaremos que tenemos una depuración lanzada, puesto que nos aparece un 1 en la parte inferior izquierda de VSCode:



Para que se dispare el snapshot, deberemos de pasar por los SnapPoints que hemos puesto, por lo que iremos en el cliente web a nuestra extensión para que el sistema pase por ellos.

Finish snapshot

Cuando hemos pasado por los SnapPoints ya podemos parar el proceso, mediante el comando Finish snapshot (Alt + F7).  Esto hará que nos muestre las grabaciones que tenemos en marcha (podemos tener más de una) y seleccionemos cual es la que queremos finalizar. 


Una vez seleccionada nos descarga un fichero zip con la grabación en la carpeta .snapshots:



Observamos también que el icono de sesiones de SnapShot ha cambiado a color naranja, indicando que podemos ejecutar la grabación:

Icono de sesiones de SnapShot

Ejecutando el SnapShot

Ahora sí, con el fichero zip descargado, podemos ejecutarlo tantas veces como necesitemos, pinchando sobre el icono de sesiones de SnapShot (el de la imagen de arriba).  Nos mostrará las grabaciones descargadas, seleccionamos una y comenzará a ejecutarse el debug:



Podemos inspeccionar las variables que queramos en cada caso e ir avanzando por los diferentes SnapPoints que hubiesemos marcado.

Notas importantes

Hay una serie de puntos a tener en cuenta a la hora de hacer la depuración:

  • La versión en VSCode y la versión en el servidor debe ser exactamente la misma.  De lo contrario, puede ser que estemos poniendo SnapPoints en una línea, que no tiene que ser la misma de la que tendríamos en el servidor.
  • Puedes ir avanzando entre los SnapPoints de la grabación mediante F5
  • Una sesión de SnapShot en el servidor se desconectará después de 30 minutos si no ha pasado por los breakpoints para iniciarlo.
  • Si ha pasado por un SnapPoint que inicie la grabación, esta tendrá que descargarse antes de 10 minutos.
  • El usuario que inicie los SnapShot deberá estar en el grupo de permisos D365 Snapshot Debug

Os dejo aquí el enlace a la documentación oficial (aquí) y como siempre cualquier duda, podéis contactarme por twitter o linkedin






No hay comentarios: