Skip to main content

Command Palette

Search for a command to run...

APEX_APPLICATION: checkboxes (G_F01)

Updated
3 min read
APEX_APPLICATION: checkboxes (G_F01)

Uno de los usos más comunes , y potentes, de APEX_APPLICATION es el procesamiento de selecciones múltiples realizadas desde un reporte mediante checkboxes.

Cuando el usuario marca varias filas y hace “Submit”, Oracle APEX envía los valores seleccionados al backend usando arrays globales, siendo el más utilizado G_F01.

Este comportamiento no puede reemplazarse con v(), ya que v() solo lee un valor por item, mientras que G_Fxx permite manejar estructuras tipo lista o tabla.

Ejemplo: selección múltiple de empleados

Tenemos un “Interactive Report“ que lista empleados y permite seleccionar varios usando checkboxes.

SELECT
    apex_item.checkbox2(
        p_idx   => 1,
        p_value => e.nombre
        ) AS sel,
    e.nombre,
    e.estado AS nuevo_estado
FROM empleados e

¿Qué hace este reporte?

  • Cada checkbox marcado envía su valor a APEX_APPLICATION.G_F01

  • p_value define qué dato viaja al backend

  • En este caso, se envía el nombre del empleado

A tener en cuenta.*
Solo los checkboxes
**marcados se envían en G_F01.
Las filas no seleccionadas
no existen** para el proceso PL/SQL.*

Procesamiento en el backend

Se crea un procedimiento en que podemos llamar “PP_CARGAR_COLL” de tipo excecute code.

Lo que hara

  • Recorrer solo los registros seleccionados

  • Guardarlos temporalmente en una colección APEX

  • Prepararlos para procesamiento posterior (aprobación, confirmación, etc.)

Procedimiento Completo

begin
  apex_collection.create_or_truncate_collection(p_collection_name => 'COLL_PRUEBA'); -- Crear o limpiar la colección
  if apex_application.g_f01.COUNT = 0 then    --Validamos si al menos de marco una fila
    raise_application_error(-20001,
                            'Debe seleccionar al menos un registro.');
  end if;

  for i in 1 .. apex_application.g_f01.COUNT loop    --Recorrer únicamente los checkboxes marcados
    apex_collection.add_member(p_collection_name => 'COLL_PRUEBA',--guardamos los marcados en la collection COLL_PRUEBA
                               p_c001            => apex_application.g_f01(i));
  end loop;
end;

Esto hace el procedimiento

  • G_F01.COUNT indica cuántos checkboxes fueron marcados

  • El loop recorre solo esos valores

  • Cada valor seleccionado se guarda en la colección COLL_PRUEBA

  • p_c001 almacena el dato enviado desde el checkbox

Al ejecutar la pagina, “Submit“, las filas marcadas ya estaran insertadas en la collection lo podemos comprobar usando las herramientas de desarrollador de APEX. En la barra de herramientas hacemos clic en “Session“ y “View Session State“.

Se abrira esta ventana.

En la opcion view, seleccionamos “Collections“ y hacemos clic sobre el boton “Set“ y la pantalla se va a refrescar.

Despues de refrescar podremos ver el contenido de las colleciones creadas y asociadas a nuestra sesion

¿Por qué usar colecciones APEX?

Las colecciones son ideales cuando:

  • Necesitás almacenar selecciones temporales

  • Querés mostrar una pantalla de confirmación

  • El proceso se divide en varios pasos

  • No querés impactar tablas definitivas aún

Ejemplo de lectura posterior:

select c001 as nombre_empleado
  from apex_collections
 where collection_name = 'COLL_PRUEBA';

¿De que me serviria este patrón?

Este enfoque (checkbox + G_F01 + colección) es muy común en:

  • Aprobaciones masivas

  • Eliminación múltiple de registros

  • Selección de ítems para facturación

  • Migraciones desde Oracle Forms

  • Procesos en varias pantallas (wizard)

  • Reportes interactivos con acciones personalizadas

Buenas prácticas al usar G_F01

  • Validar siempre que G_F01.COUNT > 0, es decir, que existe.

  • Usar colecciones para estados intermedios.

  • Usar apex_debug para diagnóstico.

  • No asumir que siempre habrá datos.

  • No mezclar G_Fxx con lógica compleja innecesaria.

APEX_APPLICATION.G_F01 permite capturar listas dinámicas de datos enviadas desde el frontend de manera simple, directa y controlada.
Cuando se utiliza correctamente, especialmente en combinación con colecciones APEX, se transforma en un patrón sólido para implementar procesos masivos, selecciones múltiples y flujos de trabajo en varios pasos.

Este enfoque no solo resuelve problemas comunes en reportes interactivos y grillas personalizadas, sino que también facilita la migración desde Oracle Forms y la construcción de soluciones más claras, mantenibles y escalables dentro de Oracle APEX.

Si este artículo te ayudó a entender mejor cómo funcionan los G_Fxx y cuándo usarlos, compartilo con tu equipo o con otros desarrolladores APEX a los que les pueda servir.

Gracias por leer , ¡seguimos explorando APEX!

More from this blog

U

Untitled Publication

42 posts