Recuerdo que cuando me inicie en APEX uno de los puntos que más se me dificultaba tener claro era cómo APEX manejaba la depuración mientras desarrollábamos nuestras aplicaciones web.

En mi experiencia con otras herramientas de desarrollo, siempre me ha gustado el hecho de poder recorrer líneas de códigos a partir de un punto de interrupción y verificar paso a paso, línea por línea, que la lógica del código no tenga error y si había un error recuerdo que era muy fácil encontrarlo ya que podía identificar exactamente en qué sentencia se producía el mismo.

Pero en APEX no se realiza de la misma forma la depuración, por ello, en este artículo te voy a mostrar como depurar errores en APEX mientras desarrollamos y ante de empezar necesitamos conocer cómo habilitar o deshabilitar la funcionalidad de depuración. Empecemos!

Habilitar la Depuración

Para comprender cómo podemos depurar nuestras aplicaciones es necesario primero habilitarlo, para ello, tenemos dos formas de hacerlo, por un lado, desde la barra de herramientas del desarrollador lo podemos activar haciendo clic en “Debug”.

La otra forma es configurar en la URL de APEX que la depuración esté en YES o LEVELn donde n puede estar entre 1 (más crítico) y 9 (menos críticos). En este post puedes leer sobre los distintos niveles de depuración.

Podemos ver dos ejemplos con la sintaxis de la URL usando el componente DEBUG habilitado en sus dos formas:

http://server/apex/f?p=App:Page:Session:Request:Debug:ClearCache:ItemNames:ItemValues

http://server/apex/f?p =100:1:111860568950630::YES:::

http://server/apex/f?p =100:1:111860568950630::LEVEL8:::

Para que podamos usar la depuración interactiva es necesario que esté habilitada en propiedades de la aplicación ya que por defecto este atributo esta deshabilitado.

Desde la página de inicio de la aplicación de ejemplo de APEX, hacemos clic en el botón “Editar Propiedades de Aplicación” y configuramos en la Depuración.

Cuando habilitamos la depuración, la página se refresca pero podremos notar que nada ha pasado, eso es así, porque APEX guarda la información de la depuración en tablas del diccionario de datos.

Disponemos de formas para saber si la depuración está activada o no, si la barra de herramientas está a la vista, el texto del botón de depuración se mostrará cómo “No Debug” y en el caso de que la barra de herramientas no esté visible, podemos ver en la URL si contiene YES o LEVELn en la posición que corresponde a la depuración.

Cuando ejecutamos una aplicación en modo de depuración, Oracle Application Express escribe información acerca de cómo se procesa cada solicitud de página en una tabla. Como he mencionado antes se puede controlar el nivel de registro de detalle, agregar llamadas de depuración en nuestro propio código y analizar la información del log.

Visualización de informes de depuración en modo desarrollo

Para ver los informes de depuración en modo desarrollo, tenemos dos formas de hacerlo: una de ellas es a través de Utilidades (que lo veremos más adelante en este artículo) y la otra forma es ver el informe de la página que actualmente estamos depurando, para ello hacemos clic en el botón de la barra de herramientas del desarrollador que dice “View Debug”, se abre una ventana modal con un reporte que muestra todas las vistas (o las depuraciones de sesiones) que han sido capturas para la actual página.

Podemos ver que es un informe interactivo que tiene aplicado el filtro que corresponde al número de la aplicación y otro filtro que es el número de la página que estamos viendo la información de la depuración.

Para ver la información detallada de depuración de una determinada sesión hacemos clic en el número de sesión que queremos visualizar en el View Identifier. Podemos tener muchas sesiones abiertas en este caso vamos a hacer clic en el ID 1429470.

Presentación y Procesamiento de una Página

Cuando se crea una aplicación con el Creador de Aplicaciones, nosotros podemos enlazar páginas entre sí mediante pestañas, botones o enlaces de hipertexto. Cada página puede tener botones y elementos y puede incluir además lógica de la aplicación. Se puede pasar de una página a la siguiente utilizando la navegación condicional, o también realizar cálculos, validaciones y mostrar informes, calendarios y gráficos.

Ahora bien… ¿Cómo el motor de Oracle Application Express Presenta y Procesa una página?

El motor de Application Express dinámicamente presenta y procesa las páginas basadas en los datos almacenados en las tablas de la base de datos Oracle. Para ver una versión de la presentación (o renderización) de una página de nuestra aplicación, nosotros lo solicitamos desde el motor de APEX. Cuando se ejecuta una aplicación, el motor de Application Express se basa en dos procesos:

  • Mostrar la Página es el proceso de renderización o presentación de página. Reúne todos los atributos de página (incluidas las regiones, elementos y botones) en una página HTML visible.
  • Aceptar Página realiza el procesamiento de página. Se realiza los cálculos, validaciones, los procesos y las bifurcaciones.

Cuando se solicita una página utilizando una dirección URL, el motor está trabajando en Mostrar la Página. Cuando se sumite una página, el motor de Application Express está trabajando en el Aceptar Página o más claramente podemos decir que está realizando el procesamiento de la página en la que se guarda los valores presentados en la caché de sesión y luego realiza todos los cálculos, validaciones o procesos.

¿Pero por qué menciono esto de la Presentación y Procesamiento de Página?

Básicamente porque el motor de Apex guarda la información de depuración de estas dos fases en vistas separadas.

Podemos ver en el último reporte que en la fase de Presentación la ejecución son muy rápidas, pero en cambio en la fase de Procesamiento a menudo toma más tiempo.

Por otro lado, la página de depuración muestra la información en dos formatos, por un lado muestra un gráfico de histogramas en la parte superior de la página. En este gráfico las barras representan la duración de cada paso en relación a un simple paso con el de mayor duración.

La segunda parte muestra un reporte con el detalle de lo que fue ejecutado durante la fase de ejecución. Este reporte es un Informe Interactivo que nos permite crear filtros y manipular los datos de muchas maneras diferentes.

En el reporte podemos ver una columna llamada gráfico que muestra la duración que tomó ese paso y allí podemos identificar los pasos que más tiempo tomaron en la fase de ejecución.

Utilidades de la Aplicación

La otra forma de acceder a la visualización del reporte de depuración es desde la página de inicio de la aplicación, y luego hacemos clic en Utilidades:

En la página Utilidades, hacemos clic en Debug Messages.

Aparece la página de depuración. La principal diferencia con la otra forma de acceder es que en este caso se muestran todas las vistas por todas las páginas de la actual aplicación.

Para ver la información de una sesión determinada, hacemos clic en el número de la sesión que deseamos ver, que se encuentra en la columna del Identificador de Vista. Por ejemplo veamos la última sesión:

En este otro post te muestro cómo puedes activar el modo de depuración nivel 9 en APEX (debug/trace). El valor por defecto es Level4.

Aparece la página Depurar Datos de Mensaje

Nosotros podemos ir visualizando cada vista en detalle y determinar los tiempos que cada una de ella toma, dependiendo de las dos fases que tiene una página en APEX, la fase de Presentación y la fase de Procesamiento, ya que la depuración se visualiza cada paso que se realiza en cada fase.

En esta forma de ver la información no tiene el gráfico de histograma, pero lo que sí tiene es el botón “Page Debug Messages”, este botón permite tanto al administrador de APEX como al desarrollador purgar la data de la depuración para la presente aplicación según ciertos criterios. Los criterios disponibles son:

  • Depurar Todos los Mensajes: seleccionando esta opción se depura todos los datos de mensajes de depuración de la aplicación.
  • Depurar Mensajes por Duración: esta opción nos permite seleccionar un marco de tiempo para purgar que va desde 1 a 4 semanas.
  • Depurar Mensajes de Sesión Actual: esta opción nos permite purgar todos los mensajes de la sesión actualmente activa.
  • Depurar por Identificador de Vista: esta opción nos permite purgar todos los mensajes relacionados a un identificador de vista.

Recordemos que cuando purgamos la información de depuración tengamos claro que en nuestro Espacio de Trabajo, precisamente en nuestra aplicación no esté trabajando otro desarrollador que le sea importante mantener dicha información ya que puede ser importante para él. 

Depurando un Informe Interactivo

Por ejemplo vamos a poner en modo depuración un Informe Interactivo de la tabla EMP de una aplicación demo que tengo desarrollada.

Ejecutamos el Informe, activamos la depuración desde la barra de herramientas del desarrollador y luego hacemos clic en Ver Depuración:

Si nos desplazamos hacia abajo del informe interactivo podemos ver lo siguiente:

  • En la línea 42 indica que se inició una región.
  • En la línea 54 muestra las columnas que serán visualizadas
  • En la línea 57 muestra la consulta SQL de base
  • En la línea 58 muestra el valor de la variable BIND “APXWS_MAX_ROW_CNT” porque es usada en la consulta SQL

Ahora si vamos al Informe Interactivo y seleccionamos que solo se muestren los empleados que correspondan al departamento 10:

Podemos ver en la depuración lo siguiente:

  • En la línea 23 muestra las columnas que serán visualizadas
  • En la línea 24 indica que se está usando un ID diferente
  • En la línea 26 muestra la consulta SQL el cual esta cláusula WHERE del filtro.
  • En las líneas 27 y 28 se muestran las variables BIND “APXWS_EXPR_1” y “APXWS_MAX_ROW_CNT” que muestran el ID del departamento y la cantidad de registros mostrados en el informe respectivamente las cuales son usadas en la consulta SQL.

Con toda esta información disponible de la depuración no solo podemos encontrar posibles errores sino que podemos examinar la performance de la consulta SQL que se ha generado.

Espero que ahora que ya sabes cómo usar la funcionalidad de depuración de APEX puedas encontrar mucho más rápido los problemas que se nos presentan en el día a día cuando estamos desarrollando nuestras aplicaciones web.

Hasta la Próxima!!!