La Utilidad Asesor de Oracle Apex 19.1

Por Clarisa Maman Orfali Oracle ACE director
Publicado en Septiembre 2019

Revisado por Francisco Riccio




El Asesor de Oracle Application Express es una herramienta que puede ser usada para comprobar errores generales de programación, problemas de seguridad, problemas de rendimiento, control de calidad y otras mejores prácticas en el desarrollo de nuestras aplicaciones en Apex. Esta utilidad está disponible desde la versión 4.0 de Apex y brevemente veremos cómo hacer uso de ella.

Desde la página de inicio de Oracle Apex hacemos clic en el módulo de Creador de Aplicaciones e ingresamos a la página de inicio de la aplicación “Sample Database Application”.

Hacemos clic en el módulo Utilidades y luego hacemos clic en el enlace Asesor.

Podemos comprobar una única página, o una lista de páginas separadas por comas o si dejamos en blanco se van a realizar las comprobaciones para todas las páginas de la aplicación.

Por defecto Las comprobaciones a realizar están marcadas para todos los grupos de opciones:

  • Errores
  • Seguridad
  • Advertencias
  • Rendimiento
  • Uso
  • Control de Calidad
  • Accesibilidad




Sección Errores


  • Referencias con sintaxis de sustitución
    - ¿Existe el elemento o la columna de pantalla tabular a los que se hace referencia con '&P999_NAME.'?

  • Referencias con sintaxis de columna
    - ¿Existe la columna de informe a la que se hace referencia con #NAME#?

  • Referencias con sintaxis de variable de enlace
    - ¿Existe el elemento o la columna a los que se hace referencia con ':P999_NAME'?

  • Referencias declarativas de elementos de aplicación, elementos de página, columnas o filtros de informe interactivo
    - ¿Existen los elementos y alias de columna especificados?

  • Existe número de página de referencia
    - ¿Existe el número de página al que se hace referencia?

  • Es código SQL o PL/SQL válido
    - Verifica si la sentencia SQL o el código PL/SQL es válido.

  • Los procesos Recuperación, DML, MR* son válidos
    - Verifique que la cláusula where de la tabla, columnas y tiempo de ejecución son válidas.

  • Rama incondicional antes que otras ramas
    - ¿Existe una rama incondicional antes de otra rama? Si es así, la otra no se llegará a ejecutar.

  • Existe el botón al que se hace referencia en Si se hace clic en el botón
    - ¿Existe el botón al que se hace referencia en "Si se hace clic en el botón" de un proceso o validación?

  • El botón no es compatible con las acciones dinámicas
    - Los botones con un identificador definido en 'Atributos de botón' o los botones basados en plantilla que hacen referencia a una plantilla de botón que no contiene la cadena de sustitución #BUTTON_ID# no son compatibles con las acciones dinámicas.



Sección Seguridad


  • Uso incorrecto de sintaxis de sustitución
    - Comprueba si el código SQL o PL/SQL contiene una referencia de aplicación, elemento de página o columna de pantalla tabular con la sintaxis de sustitución (ejemplo). Dicha referencia de elemento o columna tiene el potencial para la inyección SQL. Además, el rendimiento general de la aplicación es superior al utilizar variables de enlace en lugar de sustituciones de elementos en SQL y PL/SQL.

  • Atributos de aplicación que se pueden bloquear
    - Informa de los atributos de nivel de aplicación que se pueden bloquear para mejorar la seguridad.

  • Autorización
    - Informa sobre las autorizaciones que faltan o son inconsistentes.

  • Protección de estado de la sesión
    - Informa de la protección de estado de la sesión que falta.

  • Configuración de seguridad del explorador
    - Informa de los atributos de seguridad que se pueden bloquear para proteger al explorador del cliente.



Sección Advertencias


  • El elemento de referencia está en la página actual
    - ¿Pertenecen los elementos de página a los que se hace referencia en componentes de la página a la página actual?

  • El elemento de referencia es el elemento de página de la página de destino
    - ¿Es el elemento de página definido en el enlace un elemento de página de la página de destino?

  • Referencias de elemento de página en una cadena
    - Busque los patrones 'P999_NAME' y "P999_NAME" y verifique si son elementos de página válidos. Un nombre de elemento de página como una cadena se puede utilizar en JavaScript, V, NV o cualquier otra llamada de función o procedimiento que necesite un nombre de elemento de página.

  • El número de página Borrar Caché es igual a la página de destino o actual
    - ¿Coincide el número de página Borrar Caché de un enlace con la página actual o de destino? Esta comprobación no se realiza si se especifican varios números de página Borrar Caché.

  • Longitud de elemento o nombre de columna de pantalla tabular
    - La aplicación, los elementos de página y las columnas de pantalla tabular deben tener como máximo 30 caracteres; de lo contrario, no se puede hacer referencia a los mismos con la sintaxis de variable de enlace.

  • Referencias inconsistentes entre las acciones dinámicas y los botones
    - Los botones a los que hacen referencia las acciones dinámicas con una acción no están definidos por acción dinámica o los botones con una acción definida por acción dinámica no tienen su correspondiente acción dinámica.

  • Elementos protegidos en llamadas AJAX
    - No se debe hacer referencia a los elementos que tienen la protección de estado de la sesión activada en "Elementos de página que ejecutar" de los elementos, los informes interactivos o las acciones dinámicas. No se pueden ejecutar sin un valor de total de control válido.



Sección Rendimiento


  • Función V utilizada en sentencias SQL
    - El uso de V/NV/DV en sentencias SQL puede dar como resultado problemas de rendimiento. Utilice en su lugar la sintaxis de variable de enlace.

  • La interfaz de usuario incluye JavaScript de compatibilidad
    - La interfaz de usuario incluye JavaScript de compatibilidad, JavaScript de APEX que ya no se soporta/anticuado o migración de jQuery



Sección Uso


  • La autorización de página de destino está definida también para el componente actual
    - Si una página de destino tiene un esquema de autorización asociado, ¿tiene el componente procesado el mismo esquema de autorización? Si no, el usuario podrá visualizar un separador, pero obtendrá un error al hacer clic en él.

  • Elemento o columna de validaciones asociado
    - Comprueba si el elemento o la columna de pantalla tabular de la expresión de validación coincide con el elemento/columna asociados. También comprueba si se selecciona un elemento/columna asociados cuando es necesario, como por ejemplo cuando las validaciones se van a mostrar "En línea con campo".



Sección Control de Calidad


  • Identificador de aplicación de código fuente
    - ¿Se ha codificado en enlaces el identificador de aplicación actual?

  • El informe tiene un orden por defecto
    - Es la "Secuencia de ordenación" definida al menos para una columna del informe o la sentencia SQL que contiene la cláusula ORDER BY.

  • Elemento de página con texto de ayuda
    - ¿Todos los elementos de página con una plantilla de etiqueta de tipo "Etiqueta opcional con ayuda" o "Etiqueta necesaria con ayuda" tienen texto de ayuda?

  • Valores de atributo en desuso
    - Indica atributos de página y de componentes de página cuyos valores definidos están en desuso.



Sección Accesibilidad


  • Accesibilidad de estilo de tema probada
    - ¿Su aplicación usa un estilo de tema cuya accesibilidad se haya probado? Los estilos de tema cuya accesibilidad no se haya probado pueden causar más problemas, como contrastes de color con intensidad insuficiente.

  • La página tiene título
    - ¿La página tiene título? En aras de la accesibilidad, es importante asignar títulos de página relevantes para que los usuarios se hagan una idea del contenido y el objetivo de la página en la que se encuentren. Nota: Esta comprobación no incluye las páginas globales ni las que carecen de región.

  • La región tiene fila de cabecera
    - Las regiones que admiten cabeceras de fila deben disponer de una columna con el atributo "Usar como cabecera de fila" definido en Sí.

  • El tipo de gráfico soporta la accesibilidad
    - ¿Utiliza tipos de gráficos antiguos que soportan un nivel de accesibilidad limitado? Debería cambiarlos por nuestros nuevos gráficos basados en Oracle JET.

  • El elemento de página tiene etiqueta
    - ¿Se ha definido una etiqueta para el elemento? Por ejemplo, definir el texto 'Marcador de posición de valor' no es suficiente para mejorar la accesibilidad de un elemento al asignarle la etiqueta.

  • El elemento de página no causa ningún cambio de contexto inesperado
    - Ciertos valores de elementos de página pueden provocar cambios inesperados de contexto para el usuario, por ejemplo, listas de selección que envíen la página después de seleccionar un valor. A menos que el usuario sepa de antemano que esto va a ocurrir, esto presenta un problema de accesibilidad.

  • El elemento Mostrar imagen tiene texto alternativo de imagen definido
    - Los elementos de la página Mostrar imagen deben indicar texto, o una columna (en función de la configuración de Basado en), que se utilizará como texto alternativo de la imagen. Es muy importante para mejorar la accesibilidad, puesto que, de no ser así, a algunos usuarios podría resultarles imposible percibir el contenido de la imagen.



Para ejemplificar vamos a comprobar la página 1 de inicio de la aplicación demo y verificar si tiene errores, desmarcamos todas las secciones de todas las secciones y solo seleccionamos las opciones del grupo Errores y hacemos clic en el botón azul Realizar Comprobación.





Podemos ver que nos indica que la página 1 no tiene Errores.





Ahora vamos a controlar si hay errores en todas las secciones, para ello hacemos clic en el botón Seleccionar Todo para que se marquen todas las opciones de todas las secciones y hacemos clic nuevamente en el botón Realizar Comprobación.

El Asesor nos indica que en la página 1 hay cuatro errores, tres de seguridad y otro una advertencia.





Hacemos clic en el botón Ver del primer error el cual nos dirige a la página 1 y en el panel derecho de propiedades de la página, en la sección de Seguridad podemos observar que la página no tiene asignado un esquema de autorización.

Lo mismo podemos ver en el segundo y tercer error que hay que comprobar la Protección del Estado de Sesión de las regiones Dashboard y Top Orders by Date de la página analizada.

Para el siguiente consejo que nos brinda el Asesor de APEX es una advertencia con el siguiente mensaje: “Puede que P7_CUSTOMER_ID,P7_BRANCH no exista”, de la región Top Costumers.





Hacemos clic en el botón Ver y nos lleva a la página 1, y en la región Top Costumers en la consulta SQL de Origen podemos ver p_items => 'P7_CUSTOMER_ID,P7_BRANCH'.

Comprobamos que los elementos existan en nuestra aplicación.

De ese modo podemos ir verificando distintos errores que podamos tener a lo largo de nuestro desarrollo en Oracle Application Express.

Recomiendo altamente utilizar esta utilidad de APEX para prevenir cualquier error antes de pasar a desarrollar otras páginas. Si nos acostumbramos a comprobar cada página que desarrollamos que no tenga errores, será mucho más fácil terminar la aplicación sin mayores problemas para luego pasar a la fase de testing.




Clarisa Maman Orfali es fundadora y CEO de ClarTech Solutions Inc. Se ha convertido en Oracle ACE hace algunos años, tiene más de 15 años de experiencia en el desarrollo y la capacitación en tecnologías de la información. Hace unos años descubrió la belleza de Oracle Application Express (APEX) y se ha especializado en esa área. Ella también es una Co-Fundadora y Directora del Argentina Oracle User Group (AROUG) y ha participado activamente en la organización de grandes y populares eventos. Ella tiene una gran pasión por las tecnologías de Oracle y quiere ampliar esa pasión e influencia transfiriendo su conocimiento y experiencia a la totalidad de las comunidades de Oracle América Latina y en todo el mundo.

Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.