APEX_PAGE en Oracle APEX: Redirección, cache y control de páginas.

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.
Cuando desarrollamos aplicaciones en Oracle APEX, interactuar con páginas, items, procesos y navegación mediante la interfaz gráfica. Pero, cuando necesitamos un control más avanzado, Oracle nos ofrece un paquete muy poderoso: APEX_PAGE.
Esto nos permite trabajar con la página actual o otras páginas desde PL/SQL, pudiendo consultar atributos, construir URLs dinámicas, o limpiar caché, entre otras funciones.
En este artículo te muestro qué hace realmente APEX_PAGE y cómo podés aplicarla en escenarios reales.
¿Qué es APEX_PAGE?

APEX_PAGE es un paquete PL/SQL que expone funcionalidades internas de APEX relacionadas a:
Información de la página actual
Navegación entre páginas
Modo de operación de la página
Detección de interfaz (Desktop vs Mobile)
Manejo de caché
Construcción de URLs seguras
Es especialmente útil cuando querés controlar el comportamiento de una página desde PL/SQL.
Ejemplo 1: Crear una URL dinámica y redirigir hacia otra página usando PLSQL (GET_URL).
Cuando necesitás enviar al usuario a otra página con parámetros, o generar enlaces para emails o notificaciones, APEX_PAGE.GET_URL simplifica todo.
Utilizando el siguiente codigo en un proceso podemos generar una URL para redirigur a la página 24 con valores de ítems.
DECLARE
l_url VARCHAR2(4000);
BEGIN
l_url := apex_page.get_url(
p_page => 24,--Puede ser dinamico y no en durango, se puede definir una variable o un item :P23_nro_pagi_dest
p_clear_cache => '24',
p_items => 'P24_ID,P24_MODE',--Lista de los items de la página destino que recibirán valores. Deben existir en la página 24.
p_values => :P23_ID||','||:P23_MODO,--Valores que se enviarán a los items definidos en p_items. Provienen de los items de la página actual (23).
p_session => :APP_SESSION
);
apex_util.redirect_url(l_url);
END;


En este ejemplo, tenemos en la pagina 23, los item´s “ID“ y “MODO“, cuyos valores vamos a enviar a la pagina 24.

Al hacer clic en el boton, los valores son Seteados a la pagina de destino.

También podemos redirigir a otra página usando JavaScript.
Sin embargo, como la URL debe ser generada en el servidor (usando apex_page.get_url), necesitamos almacenar esa URL en un item —generalmente un item oculto— para que JavaScript pueda leerla y ejecutar el redireccionamiento.
Este item funciona como un “item bandera”, conteniendo la URL final que JavaScript debe usar.
Ejemplo 2: Crear una URL dinámica y redirigir hacia otra página usando javascript (GET_URL).
1. PL/SQL procesa y coloca la URL en un item oculto
:P23_URL := apex_page.get_url(
p_page => 27,--Puede ser dinamico y no en durango, se puede definir una variable o un item :P23_nro_pagi_dest
p_clear_cache => '27',
p_items => 'P27_ID,P27_MODE',--Lista de los items de la página destino que recibirán valores. Deben existir en la página 27.
p_values => :P23_ID||','||:P23_MODO,--Valores que se enviarán a los items definidos en p_items. Provienen de los items de la página actual (23).
p_session => :APP_SESSION
);
2. El siguiente código JavaScript redirige a otra página utilizando una URL generada previamente en el servidor.
El item P23_URL contiene la URL construida con apex_page.get_url, y luego JavaScript realiza la redirección utilizando la API nativa apex.navigation.redirect:
let url = $v("P23_URL");
apex.navigation.redirect(url);
Al dar clic en el boton nos redirige a la pagina modal con los parametros recibidos.

Ejemplo 3: Forzar la recarga de una página limpiando la caché (PURGE_CACHE)
Si trabajás con Interactive Reports, Grids o regiones con caché, quizá necesites invalidarla tras una actualización importante.
Limpiar la caché de la página 24
BEGIN
apex_page.purge_cache( p_page_id => 24 );
END;
Limpiar caché solo para la sesión actual
BEGIN
APEX_PAGE.PURGE_CACHE (
p_current_session_only => true );
END;
Ejemplo 4: Consultar el modo de página (GET_PAGE_MODE)
Cuando una página funciona tanto para Insert, Update o Read Only, puede ser útil adaptar lógica según su modo.
Diferenciar entre Insert y Edit
DECLARE
l_mode VARCHAR2(30);
BEGIN
l_mode := apex_page.get_page_mode(p_application_id=>:APP_ID,
p_page_id=>:APP_PAGE_ID)
IF l_mode = 'NORMAL' THEN
apex_debug.info(p_message => 'Página editable');
ELSIF l_mode = 'READ_ONLY' THEN
apex_debug.info(p_message => 'Página solo lectura');
END IF;
END;
APEX_PAGE es una herramienta sencilla pero potente, ideal para elevar las aplicaciones APEX a un nivel más profesional y flexible.

Si te gustó este artículo comentame que te parecio y si aprendiste algo nuevo, podés darle “Follow“ al blog, compartir la publicación o incluso invitarme un café así seguimos creando más contenido sobre Oracle APEX.





