En el artículo de hoy voy a responder una consulta que me hicieron de cómo colocar filtros a un Formulario Tabular en Oracle APEX 5.0
Para ello primero de todo creamos una Pantalla Tabular con el asistente y usamos la tabla EMP para ejemplo.
Nuestra Pantalla Tabular se visualizará como sigue:
Vamos a crear a continuación una Lista de Valores Dinámica que muestre los Departamentos de la Tabla DEPT.
Nos dirigimos a Componentes Compartidos, en la sección Otros Componentes, hacemos clic en Lista de Valores:
1) Hacemos clic en el botón Crear
2) Se abre el asistente, seleccionamos Nuevo, clic en Siguiente
3) Nombre: Departamentos y Tipo Dinámico, clic en Siguiente
4) Nos desplazamos hacia abajo y hacemos clic en el enlace Crear Lista de Valores Dinámica, se abre el asistente:
- Seleccionamos la tabla DEPT, clic en Siguiente
- Columna de Visualización: DENAME, Valor de Retorno: DEPTNO, clic en Siguiente
- Clic en Terminar
5) Clic en Crear Lista de Valores
Regresamos a la página donde creamos nuestra Pantalla Tabular, en mi caso es la página 2.
Creamos una región de contenido estático y la arrastramos hacia arriba de la pantalla tabular y le colocamos el nombre Filtro.
Dentro de la región Filtro creamos un elemento de página:
1) En la sección Identificación en el panel de propiedades del elemento
- Nombre: PX_DEPARTAMENTO
- Tipo: Listado de Selección
2) En la sección Etiqueta
- Etiqueta: Seleccionar un Departamento
3) En la sección Configuración
- Acción de Página al Seleccionar: Submit Page
- En la sección Lista de Valores:
4) Tipo: Componente Compartido
- Lista de Valores: DEPARTAMENTOS
- Mostrar Valores Adicionales: Sí
- Mostrar Valor Nulo: No
5) Hacemos clic en el botón Guardar
Para que el filtro funcione debemos agregar en la consulta SQL de la Pantalla Tabular la cláusula WHERE.
Seleccionamos la Pantalla Tabular desde el panel de la izquierda en el diseñador de página y pasamos nuestra mirada al panel de la derecha de propiedades en la sección Origen:
Cambiamos esta Consulta SQL:
select
"EMPNO",
"EMPNO" EMPNO_DISPLAY,
"ENAME",
"JOB",
"MGR",
"HIREDATE",
"SAL",
"COMM",
"DEPTNO"
from "#OWNER#"."EMP"
Por ésta otra consulta SQL
select
"EMPNO",
"EMPNO" EMPNO_DISPLAY,
"ENAME",
"JOB",
"MGR",
"HIREDATE",
"SAL",
"COMM",
"DEPTNO"
from "#OWNER#"."EMP"
where DEPTNO = TO_NUMBER(:P2_DEPARTAMENTO)
El resultado de la consulta no filtra los empleados según el departamento seleccionado.
Si queremos agregar otro filtro lo realizamos del mismo modo, por ejemplo, agregamos dos elementos de páginas de tipo Campo Numérico dentro de la región Filtros: P2_SAL_MIN y P2_SAL_MAX.
Indicamos que ambos elementos en la sección Cuadrícula, Iniciar Nueva Fila: Sí
En el elemento P2_DEPARTAMENTOS en la sección Configuración colocamos None en Acción de Página al Seleccionar, porque vamos a crear un botón que ejecute la consulta para el filtrado de la pantalla tabular.
Dentro de la región Filtro, creamos un botón que le colocaremos el nombre Ejecutar y en comportamiento seleccionamos Ejecutar Página.
Seleccionamos la Pantalla Tabular y en Origen de la Consulta SQL cambiamos la consulta por la siguiente:
select
"EMPNO",
"EMPNO" EMPNO_DISPLAY,
"ENAME",
"JOB",
"MGR",
"HIREDATE",
"SAL",
"COMM",
"DEPTNO"
from "#OWNER#"."EMP"
where DEPTNO = TO_NUMBER(:P2_DEPARTAMENTO)
and SAL >= :P2_SAL_MIN and SAL <= :P2_SAL_MAX
Vemos el resultado:
Será hasta la próxima!