APEX_APPLICATION: el corazón del contexto de ejecución en Oracle APEX

Durante mis años de experiencia profesional, he trabajado en la migración de formularios y módulos de Oracle Forms 6i a Oracle APEX, así como en el desarrollo de nuevos módulos en diversas campos. Mi trayectoria laboral incluye roles en las empresas Hilagro S.A, Transagro S.A, y actualmente, en Consultagro S.A. En estos puestos, he demostrado habilidades en la gestión de proyectos, la mejora de procesos y la formación de usuarios, lo cual me ha permitido optimizar y desarrollar soluciones.
Oracle APEX es la plataforma low-code por excelencia, pero debajo de su interfaz visual vive un motor PL/SQL muy sofisticado. Para sacarle verdadero provecho ,especialmente cuando trabajamos con procesos, validaciones, automatizaciones o lógica compleja, es clave entender cómo APEX expone el contexto de ejecución de una aplicación.
Ahí es donde entra en juego el paquete APEX_APPLICATION: una API fundamental que nos permite acceder a variables globales, valores enviados desde formularios, controlar el flujo de ejecución e interactuar directamente con el motor de APEX.
En este artículo vamos a desmenuzar qué es APEX_APPLICATION para APEX 24.2+ por qué es tan importante y cómo usarlo correctamente con ejemplos reales en PL/SQL.
¿Qué es APEX_APPLICATION?
APEX_APPLICATION es un paquete PL/SQL global que Oracle APEX utiliza para:
Exponer información de la aplicación en ejecución
Compartir valores entre páginas, procesos y componentes
Recibir datos enviados desde formularios HTML
Controlar el flujo del motor de APEX
En otras palabras, es el puente entre la capa web (HTML/JS) y la lógica PL/SQL de tu aplicación.
Este paquete solo tiene sentido dentro del contexto de ejecución de APEX. No está pensado para ser usado como un paquete PL/SQL genérico fuera de una aplicación APEX.
Variables globales en APEX_APPLICATION
El paquete APEX_APPLICATION expone una serie de variables globales que reflejan el estado actual de la aplicación mientras se está ejecutando.
Identidad y contexto de ejecución
APEX_APPLICATION.G_FLOW_ID
ID de la aplicación APEX actualmente en ejecución.APEX_APPLICATION.G_FLOW_STEP_ID
ID de la página actual dentro de la aplicación.APEX_APPLICATION.G_USER
Usuario autenticado en la sesión APEX.
Esquema y propietario
APEX_APPLICATION.G_FLOW_OWNER
Parsing schema de la aplicación.
Puede referenciarse en SQL y PL/SQL usando #OWNER#.Cambiar este valor en tiempo de ejecución no modifica el parsing schema real.
APEX_APPLICATION.G_FLOW_SCHEMA_OWNER
Propietario del esquema APEX que ejecuta la aplicación.
Flujo y control de ejecución
APEX_APPLICATION.G_REQUEST
Contiene el valor del REQUEST más reciente.
Se utiliza para identificar qué botón o acción disparó el procesamiento.APEX_APPLICATION.G_DEBUG
Indica si el modo debug está activado (Yes / No).
Cuando está activo, APEX registra información detallada del procesamiento.
Entorno y presentación
APEX_APPLICATION.G_BROWSER_LANGUAGE
Idioma preferido del navegador del usuario.APEX_APPLICATION.G_PRINTER_FRIENDLY
Indica si la página se ejecuta en modo de vista de impresión.APEX_APPLICATION.G_HOME_LINK
URL de la página inicial de la aplicación.APEX_APPLICATION.G_LOGIN_URL
URL utilizada para redirigir a usuarios no autenticados.
Recursos y configuración técnica
APEX_APPLICATION.G_IMAGE_PREFIX
Ruta virtual al directorio de imágenes estándar de APEX.APEX_APPLICATION.G_PROXY_SERVER
Proxy configurado a nivel de aplicación.APEX_APPLICATION.G_PUBLIC_USER
Esquema Oracle utilizado por el DAD para conectarse a la base de datos.APEX_APPLICATION.G_SYSDATE
Fecha y hora del servidor de base de datos (DATE).
Variables para AJAX y procesos On-Demand
- APEX_APPLICATION.G_X01 … G_X10
Variables utilizadas para intercambiar datos entre JavaScript y PL/SQL, muy comunes en procesos AJAX On-Demand.
Ejemplo: el siguiente codigo lo podemos usar en un proceso, activar el debug y en el debug de APEX podremos ver los datos
BEGIN
APEX_DEBUG.ENABLE(p_level => APEX_DEBUG.C_LOG_LEVEL_INFO);
apex_debug.message(
'- Usuario: %s
- App: %s
- Página: %s
- Schema: %s
- Propietario_Schema: %s
- Request: %s
- idioma_Naveg: %s
- HOME_LINK: %s
- G_LOGIN_URL: %s
- G_IMAGE_PREFIX: %s
- G_PROXY_SERVER: %s
- G_PUBLIC_USER: %s
- G_SYSDATE: %s ',
apex_application.G_USER,
APEX_APPLICATION.G_FLOW_ID,
apex_application.G_FLOW_STEP_ID,
APEX_APPLICATION.G_FLOW_OWNER,
APEX_APPLICATION.G_FLOW_SCHEMA_OWNER,
APEX_APPLICATION.G_REQUEST,
APEX_APPLICATION.G_BROWSER_LANGUAGE,
APEX_APPLICATION.G_HOME_LINK,
APEX_APPLICATION.G_LOGIN_URL,
APEX_APPLICATION.G_IMAGE_PREFIX,
APEX_APPLICATION.G_PROXY_SERVER,
APEX_APPLICATION.G_PUBLIC_USER,
APEX_APPLICATION.G_SYSDATE
);
END;
RECUERDA QUE : APEX_APPLICATION se procesa del lado del servidor, por eso necesita un submit para ejecutarse.
Al realizar submit de una pagina que tenga este codigo en un proceso obtendremos

Si quieres aprender mas sobre APEX_DEBUG, descubre como te puede salvar la vida AQUI
Conclusión
APEX_APPLICATION es uno de esos paquetes que no se ven, pero sostienen todo el funcionamiento interno de Oracle APEX. Dominarlo te permite pasar de aplicaciones básicas a soluciones realmente profesionales y controladas.
Si trabajás seriamente con Oracle APEX, entender este API no es opcional: es una herramienta esencial para escribir código más robusto, claro y mantenible.
Hoy hablamos de las variables Globales si te parecio interesante, compartelo para llegar a mas DEV’s APEX y estate atento que en proximas ediciones estaremos hablando de Arrays G_Fnn, el procedimiento APEX_APPLICATION.HELP y APEX_APPLICATION.STOP_APEX_ENGINE.





