Gestión de Registros con Interactive Grids (basado en el modelo)

Gestión de Registros con Interactive Grids (basado en el modelo)

Introducción

En esta ocasión veremos 2 de las funcionalidades más requeridas por parte de los usuarios, que serían la de suma de valores de una grilla y suma de valores según los registros seleccionados. Dichas funcionalidades son posibles gracias a las API's provistas por APEX para el manejo del modelo a nivel de interfaz mediante Javascript, vamos a verlas!!

Realizar sumatoria de todos los registros

Para este ejemplo realizaremos la sumatoria de una columna por registro, generando un totalizador basado en los datos proveidos por la grilla.
Lo primero que debemos hacer es obtener el modelo de la grilla. ¿Cómo hacemos eso? asignandole un ID estático a la región que contiene la grilla, luego recorreremos ese modelo utilizando la función forEach y posteriormente las funciones getRecordId que nos permite obtener el id interno del registro y getRecordMetadata con el cuál obtenemos el estado del registro basado en los metadatos, por ejemplo podemos determinar si un registro fue recientemente agregado o si se encuentra seleccionado para su eliminación.

Así que veamos el código que realizará esta acción.

//obtenemos el modelo
var modelo = apex.region('id_de_la_region').widget().interactiveGrid('getViews','grid').model;
    total = 0;
//recorremos el modelo
modelo.forEach(function(r) {
    //obtenemos el metadato basado en el id del registro
    var registro = r,
    id = modelo.getRecordId(registro),
    meta = modelo.getRecordMetadata(id),
    //obtenemos el valor de la columna
    salario = parseFloat(modelo.getValue(registro,"NOMBRE_COLUMNA"));
    /* para este cálculo sumamos solo los registros que contengan números, 
    excluimos los marcados para eliminar y los recien agregados*/
    if ( !isNaN( salary ) && !meta.deleted && !meta.agg ) {
        total += salario;
    }
})
/*llegado este punto la variable total 
ya contiene la sumatoria de los registros y puede ser utilizada por ejemplo
para mostrarla en algún campo*/
apex.item("P1_CAMPO").setValue(total);

De esta manera muy simple y en poco más de 10 líneas de código hemos recorrido de manera sencilla todo el modelo de la grilla realizando la sumatoria de una sola columna por cada registro.

Modo de uso

Puede ser usada en acciones dinámicas de tipo javaScript, pero lo ideal para evitar repetir el código es colocarlo dentro de una función javaScript y agregarlo a la sección de Function and Global Variables ubicada las propiedades de la página que vamos a utilizar, de esta manera solamente debemos llamar a la función por su nombre desde las acciones dinámicas y en caso de que necesitemos modificar el código lo haríamos solamente en un solo lugar.

Puedes verlo en funcionamiento en este laboratorio (Gestión de Registros).

Sumatoria de registros seleccionados

Ahora realizaremos nuevamente una sumatoria de columnas pero solo de los registros seleccionados, para lo cuál modificaremos nuestro código de la siguiente manera.

Utilizaremos nuevamente la funciones del modelo getRecordId y getRecordMetadata, también agregaremos el widget de nombre getSelectedRecords y la función getFieldKey los cuales son ideales para estos casos.

Vamos al código.

var region = apex.region('id_de_la_region'),
    //obtenemos el modelo
    modelo = region.widget().interactiveGrid('getViews','grid').model,
    //obtenemos los registros seleccionados almacenados en un array
    registros = region.call( "getSelectedRecords"), 
    total = 0,
    //especificamos la columna que utilizaremos
    salario = modelo.getFieldKey("NOMBRE_COLUMNA"),
    i;
//recorremos los registros seleccionados
for ( i = 0; i < registros.length; i++ ) {
    var id = modelo.getRecordId(registros[i]),
        meta = modelo.getRecordMetadata(id);
    //validamos cada registro del array y realizamos la sumatoria
    if (!isNaN( salario ) && !meta.deleted && !meta.agg ) {
        total += parseFloat(registros[i][salario]);
    }
}
/*llegado este punto la variable total 
ya contiene la sumatoria de los registros y puede ser utilizada por ejemplo
para mostrarla en algún campo*/
apex.item("P1_CAMPO").setValue(total);

Como verán en pocas líneas hemos recorrido los registros seleccionados uno por uno y obteniendo en este caso nuevamente el totalizador a nuestra disposición para mostrarlo al usuario o realizar alguna otra acción con el mismo.

Puedes verlo en funcionamiento en este laboratorio (Gestión de Registros).

Conclusión

Llegamos al final de otro post cargado de información, hemos visto 2 pequeñas funciones muy útiles pero que no se limitan solo a realizar sumatorias, sino que también nos muestran un sin fín de posibles usos y aplicaciones, tales como validaciones, cálculos, gestión de ciertos datos y mucho más.

Espero que te sea de mucha ayuda, consultas y sugerencias siempre son bienvenidas. Nos encontramos próximamente en otro post.

No olvides seguirme en las redes sociales para enterarte de más :) !!
Saludos!!

Did you find this article valuable?

Support Osvaldo González by becoming a sponsor. Any amount is appreciated!