Cómo debuggar una sesión Webservice/NAS en NAV2013/NAV2015 y superior

debug-featured-2PNGAl fin! Cuántas horas habré estado con el debugger en sesiones sin UI usando MESSAGEs y ERRORes… Qué tiempos.

Si tú también lo has sufrido, entonces probablemente estarás de acuerdo conmigo que no es la manera más elegante de encontrar el motivo del problema. No te ha pasado que te has dejado alguna vez un MESSAGE después de una sesión depurando código y que ha sido el cliente el que te lo ha dicho más tarde al verlo? A mí tampoco :-)

En cualquier caso, finalmente podemos utilizar la herramienta de depuración de NAV para depurar las sesiones sin UI. Es genial. Y también incluye sesiones ADCS!

Esto llevamos pudiéndolo hacer un tiempo ya, pero no quería perder la oportunidad de escribir un post al respecto.

¿Que cómo podemos hacer esto dices? ¡Veámoslo!

Primero de todo, para aquellos de vosotros que no conocéis como abrir el debugger, debéis ir al entorno de desarrollo a Herramientas>Debugger>Depurar sesión

Esta acción abrirá una ventana similar a la siguiente:

debugger-general

Ahí encontraremos la lista de sesiones que están actualmente activas o abiertas por los distintos métodos de acceso que Dynamics NAV tiene disponible. En mi caso podemos ver que tengo una sesión abierta por cliente Windows (se puede ver por el valor de la columna “Client Type”).

Pongamos ahora que queremos capturar el error ocurrido durante una llamada por webservice, pero como la ejecución de webservice es tan rápida, será difícil poder seleccionarla en la ventana de depuración y debugarla. Lo mismo ocurre con sesiones NAS.

Para esto he creado una pequeña y simple codeunit con una función que provoca un error del siguiente modo:

Codeunit 50000 – Function RaiseAnError(ShowError : Boolean) : Text[50]

IF ShowError THEN
 ERROR('I am an error')
ELSE
 EXIT('Everything is fine');

debugger-codeunit

Se supone que el código dará un error si el parámetro que acepta se lo pasamos como TRUE. De lo contrario simplemente debería enseñar un mensaje “Everything is fine”. Hasta ahí bien. Vamos a probarlo mediante webservices con SoapUI (para ver cómo hacer esto, podéis verlo en este enlace).

Primero, lo haremos con el parámetro a FALSE.
debugger-test-falseY funciona. Estupendo :-)

Ahora probemos con el parámetro a TRUE.

debugger-test-true

En este caso nos da el error que esperábamos. Genial.

Si vamos al debugger deberíamos ver algo así:

debugger-web-service

Y ahí vemos la sesión webservice. Si intentamos debuggarla..

debugger-error

Aun probando refrescando el debugger la sesión seguía apareciendo, por lo que a pesar de no encontrarse, está ahí. Esto es porque la sesión se mantiene reservada para una nueva llamada, aunque la ejecución del proceso que ha originado esa sesión ya ha terminado.

Dicho esto, lo que hacemos para capturar el error del webservice es hacer click en la opción “Debug Next” o “Depurar siguiente” y provocar el error una vez más…

debugger-ribbon

(Esto abrirá una ventana de depuración esperando una pausa)

Y justo después de provocar el error llamando el webservice una vez más…

debugger-error-capture

Si aceptamos el mensaje veremos exactamente dónde en el código ha fallado:

debugger-error-capture-2

Y simplemente añadiendo una inspección o “watch” somos capaces de detectar que el motivo por el cual ha saltado el error es porque el parámetro tiene como valor TRUE.

Por supuesto en el caso de un servicio web, este puede dar un error de “Time out” durante la depuración. Es normal, nuestro tiempo de trabajo diagnosticando el error con el debugger es mayor al máximo tiempo de espera permitido normalmente :-)

Que paséis un buen día, y si aun estáis de vacaciones, disfrutadlas!

 









This entry was posted in NAV2013, NAV2013R2, NAV2015, Navision, Tips&Tricks, Web Services and tagged , , , , , , , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*