Skip to main content

Command Palette

Search for a command to run...

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

Updated
4 min read
APEX_PAGE en Oracle APEX: Redirección, cache y control de páginas.
C

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.

More from this blog

U

Untitled Publication

42 posts