Multiple Selección / Selection

Multiple Selección / Selection

Muchas veces nos enfrentamos a requerimientos en donde nuestros usuarios necesitan ver información entre tener un report y a la vez graficas. En este post veremos cómo hacer que desde un reporte interactive, al seleccionar una o más registros, el gráfico se refresque en base a la selección. Esto hace que la visualización al usuario sea más dinámica, fácil de entender e intuitiva.

En este link podemos observar el comportamiento:

https://apex.oracle.com/pls/apex/r/kcbarra/example-multiple-seleccion-selection/multiple-selection-report-and-chart

Pasos:

  1. Crear el interactive report con las columnas necesarias.

  2. En Atributos añadir el siguiente código para permitir que se seleccione más de un registro en el reporte:

function(config) {
    config.defaultGridViewOptions = {
        multiple: true,
        selectAll: true
    }
    return config; 
}
  1. Crear un Page_Item: P20_SELECTED, en donde almacena uno o más valores en base a la selección de los registros en el reporte.

  2. Crear una región de tipo: Chart, y en donde se hará el select en base al Page_Item creado, siguiendo como ejemplo lo siguiente:

Select budget, NAME
 from EBA_PROJECTS
  where  instr( :P20_SELECTED, ':' || id || ':' ) > 0

5. Luego hay que crear una Action Dynamic en donde indiquemos que al seleccionar uno o más registros del interactive report, se almacene todos los datos seguidos en el Page_Item: P20_SELECTED y luego refresque la región del gráfico.

A nivel del interactive report crear: Action Dynamic

En la action de TRUE, ejecutar un JavaScript Code, como el siguiente:

var i, selectedIds = ":",
    model = this.data.model;

for ( i = 0; i < this.data.selectedRecords.length; i++ ) {
    selectedIds += model.getValue( this.data.selectedRecords[i], "ID") + ":";
}
$s("P20_SELECTED", selectedIds);
apex.region("budgetchart").refresh();

En este código vemos que al momento de seleccionar los registros los empieza a guardar dentro de la variable selectedIds, uno a uno separado con ':', luego asigna el valor al Page_Item creado y refresca la región del gráfico.

Como resultado obtenemos lo siguiente: