Listas de valores en cascada en 3 niveles, para Tabular forms o Reports.

Tarde o temprano, todos necesitamos desarrollar tabular forms de APEX con más o menos inteligencia, para poder introducir datos, más coherentes y guiar así al usuario final.

En esta nota, basada en el blog de Jari´s,  vamos a mostrar cómo implementar diferentes Listas de Valores que dependen unas de otras para mostrar datos (Cascading LOV Parent Item), dentro de un tabular form.

En nuestro ejemplo os mostraremos un Tabular form de APEX con tres dependencias.

Abuelo → Padre → Hijo

De manera que el hijo depende del valor del padre y el padre depende del valor del abuelo.

Una vez descrito el escenario, vamos a ver cómo implementarlo:

  1. Crear un tabular form.
  2. Definir 3 ítems cómo LOV, del tabular Form, de una manera particular.
  3. Crear 2 Items Globales de Aplicación.
  4. Crear 2 Procesos de Aplicación OnDeman.
  5. Incluir a nivel de página una función jQuery a medida.
  6. Crear 1 acción dinámica After Refresh de la Región donde se encuentra el tabular form.
  7. Crear la funcionalidad para el botón ADD_ROW.
  8. Ejemplo funcionando

1. Crea un tabular form

Primero crea un tabular form de la tabla que quieras, donde tengas que guardar 3 datos dependientes unos de otros, como por ejemplo:

  • Empresa
  • Departamento
  • Empleado

1

2. Definir columnas como LOV’s.

Después de hacer el tabular form tengo que definir las tres columnas como LOV´s. Para ello debo conocer la query o definir una LOV en las ShareComponets.

En principio, sólo conozco la query para el Empresa, pero la query del Departamento depende de Empresa y la query del Empleado, dependerán del Departamento.

Por lo tanto la LOV de Departamento y la LOV de Empleado, la definiremos a priori como una query  “sin sentido”.

2

3. Crear items Globales a nivel de Aplicación

Creamos dos items globales a nivel de aplicación, donde la propiedad Session State Protection sea “Restricted-May not be set from browser

3

4

4. Crear Procesos PL/SQL a nivel de Aplicación tipo OnDeman.

Después de crear los items globales, tengo que crear dos procesos PL/SQL a nivel de Aplicación tipo ‘OnDeman’

5

Ambos procesos son casi idénticos, cambia la query para la LOV del item a cargar, (es importante destacar que los alias utilizados sean RET y DIS) y el Aplication Item Global que hemos creado, para condicionar la query.

Devolvemos los valores de la LOV como un JSON.

5. Incluir a nivel de página una función JQuery

A nivel de página incluimos la siguiente función JQuery, que será la responsable de llamar a los procedimientos OnDeman, en los cuales se almacenarán las sentencias de las LOV dependientes. Donde le pasaremos como parámetro:

  • El valor padre.
  • El nombre del proceso OnDeman que hay que ejecutar, para generar y construir en tiempo de ejecución la LOV.
  • Opciones particulares de la lista de valores.

6. Crear una acción dinámica

Creamos una acción dinámica programada para que ejecute un código javascript, cuando se lance el evento “After Refresh” de la región donde esté el tabular Form.

6

El código JavaScript que lanza es el siguiente.

El primer bloque hace referencia al proceso padre (Departamento), y el segundo al proceso hijo (Empleado).

Atención:

Cuando creamos un tabular form con el Wizard  de APEX, por debajo está asignando un ID a cada columna, estos ID’s son “fXX” siendo f01 la primera y así sucesivamente.

Si se modifica la query del tabular form, probablemente APEX reasigne los id’s y perdamos la funcionalidad definida.

Para solventar esa casuística, podemos definir la query del tabular form usando el API de APEX con:

  • select_list
  • popup_from_query

Os dejamos el enlace de la documentación de cómo utilizar estas funciones de APEX: Documentación

7. Crear la funcionalidad del botón ADD_ROW.

Hay que crear una acción dinámica para que al pulsar el botón “ADD ROW” o “Añadir Registro” lance también el código Javascript para cargar los valores de las listas de valores en el nuevo registro.

Este es el código que hay que implementar.

 

8. Aplicación de ejemplo funcionando.

 

 

6 comments on “Listas de valores en cascada en 3 niveles, para Tabular forms o Reports.Add yours →

    1. Hola Oscar

      Gracias por el comentario.
      He probado la aplicación y funciona perfectamente, la hemos dado de alta con el tipo de autentificación Open Credential, es decir, debes de poner un nombre de usuario, el que quieras, y podrás entrar en la aplicación.
      Vuelve a intentarlo.

      Gracias un saludo

    1. Hola Alex
      La manera de poder ver como APEX asigna los ID’s a los elementos de tu report, es usando F12 y podrás ver el código HTML y la consola donde puedes navegar y ver cada elemento de la página.

      Saludos

  1. Buenas,

    Alguien me explica como puedo editar los elementos (item) Select List por dentro del html , es que necesito cambiar el tamaño de esos select pero como lo tengo en la plantilla login no me deja hacer mucho.

    Gracias , saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">