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.
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:
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.
Observamos también que el icono de sesiones de SnapShot ha cambiado a color naranja, indicando que podemos ejecutar la grabación:
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:
Publicar un comentario