Filtrar un módulo dependiendo del filtro de una lista
N
Nuria Forte
empezó un tema
más de 4 años hace
Buenos días,
Estamos haciendo un proyecto en FlexyGo y necesitamos mostrar una grid con una serie de datos filtrados por el usuario y debajo un sumatorio de una serie de datos de las columnas de la grid superior.
Hemos creado para ello dos módulo: uno con la grid con los datos y otro con otra grid con la suma. El problema es que cuando filtramos en la grid superior no se filtra en la inferior.
Nos gustaría saber cuál sería la forma adecuada de hacerlo.
Gracias. Un saludo
Mejor respuesta
D
Daniel Lutz
ha dicho
más de 4 años hace
Hola Nuria Forte,
Los módulos deben estar en la misma página y tener de base el mismo objeto. Además los módulos deben ser de tipo object list para que el filtro "where" que monta sea totalmente compatible.
1- Crear una función javascript que capture el evento de filtrado del módulo de lista y aplique el filtro al módulo en cuestión. Este js se debe añadir como plugin, o como función en la propia página (hay que entrar en la edición de la página y en el apartado javascript poner la función que se detalla a continuación, ¡ah! y no te olvides de dejar activo el javascript. También se puede poner en un template de la lista principal, en el apartado header entre el tag <script></script>, pero este caso haría que el sctipt se cargue de la mano del template seleccionado. Se recomienda quitar el módulo de lista estándar y crear uno personalizado para la página, usando la funcionalidad de clonación.
--Este código captura el evento de filtrado del módulo de la lista de la colección y el filtro lo aplica a otro módulo llamado TotalCC. --Es fundamental que los módulos se basen en el mismo objeto, para que el filtro sql sea compatible.
--Dejo el debugger para que puedas depurarlo desde el propio navegador.
function Capture_moduleReady(){
debugger;
let modList=$('flx-module[modulename="NombreDelModuluPrincipalDelListObject"]');
flexygo.events.off(modList,'module','filtered');
flexygo.events.on(modList,'module','filtered',function(e){
debugger;
let listItm=$(e.sender).closest('main').find('flx-module[modulename="TotalCC"] flx-list');
let filItem=$(e.sender).find('flx-list');
if(filItem.length>0 && listItm.length>0){
filItem=filItem[0];
listItm=listItm[0];
listItm.activeFilter = filItem.activeFilter;
listItm.filterValues = filItem.filterValues;
listItm.refresh();
}
});
}
2- Añadir la llamada a la función js en el módulo de lista principal. En la casilla "JSAfterLoad"
Por poner un ejemplo gráfico, con éste método podemos lograr lo que muestra la siguiente imagen:
A continuación os paso una función que hace ésto mismo. La hemos optimizado e incorporado al producto CRM. Se utiliza para refrescar los módulos totalizadores de listas.
Básicamente recibe el nombre del módulo padre y el dependiente, aplica los mismos filtros, vengan de un preset, de propiedades filtradas, o del propio filtro de la colección que abre.
/**
* injects the filter of an object module list, into a module of the same type. When the user filtering the collection, inject the sql filter and presets filters, then execute refresh action in a depending module.
* @method moduleListFilterCapture
* @param {string} dependingModuleName - name of the depending module object list.
* @param {string} parentModuleName - name of the parent module object list.
*/
function moduleListFilterCapture(dependingModuleName, parentModuleName) {
var opToList = $('flx-module[modulename="' + dependingModuleName + '"] flx-list');
var opList = $('flx-module[modulename="' + parentModuleName + '"] flx-list');
if (opList[0] && opToList[0]) {
var opToListItm_1 = opToList[0];
var opListItm_1 = opList[0];
opToListItm_1.presets = opListItm_1.presets;
flexygo.events.off(opList, 'module', 'filtered');
flexygo.events.on(opList, 'module', 'filtered', function (e) {
if (e.sender === opList.closest('flx-module')[0]) {
opToListItm_1.activeFilter = opListItm_1.activeFilter;
opToListItm_1.filterValues = opListItm_1.filterValues;
opToListItm_1.setPreset(opListItm_1.presetId, opListItm_1.presetText, opListItm_1.presetIcon);
}
});
}
}
Daniel Lutz
ha dicho
más de 4 años hace
Respuesta
Hola Nuria Forte,
Los módulos deben estar en la misma página y tener de base el mismo objeto. Además los módulos deben ser de tipo object list para que el filtro "where" que monta sea totalmente compatible.
1- Crear una función javascript que capture el evento de filtrado del módulo de lista y aplique el filtro al módulo en cuestión. Este js se debe añadir como plugin, o como función en la propia página (hay que entrar en la edición de la página y en el apartado javascript poner la función que se detalla a continuación, ¡ah! y no te olvides de dejar activo el javascript. También se puede poner en un template de la lista principal, en el apartado header entre el tag <script></script>, pero este caso haría que el sctipt se cargue de la mano del template seleccionado. Se recomienda quitar el módulo de lista estándar y crear uno personalizado para la página, usando la funcionalidad de clonación.
--Este código captura el evento de filtrado del módulo de la lista de la colección y el filtro lo aplica a otro módulo llamado TotalCC. --Es fundamental que los módulos se basen en el mismo objeto, para que el filtro sql sea compatible.
--Dejo el debugger para que puedas depurarlo desde el propio navegador.
function Capture_moduleReady(){
debugger;
let modList=$('flx-module[modulename="NombreDelModuluPrincipalDelListObject"]');
flexygo.events.off(modList,'module','filtered');
flexygo.events.on(modList,'module','filtered',function(e){
debugger;
let listItm=$(e.sender).closest('main').find('flx-module[modulename="TotalCC"] flx-list');
let filItem=$(e.sender).find('flx-list');
if(filItem.length>0 && listItm.length>0){
filItem=filItem[0];
listItm=listItm[0];
listItm.activeFilter = filItem.activeFilter;
listItm.filterValues = filItem.filterValues;
listItm.refresh();
}
});
}
2- Añadir la llamada a la función js en el módulo de lista principal. En la casilla "JSAfterLoad"
Por poner un ejemplo gráfico, con éste método podemos lograr lo que muestra la siguiente imagen:
Nuria Forte
Estamos haciendo un proyecto en FlexyGo y necesitamos mostrar una grid con una serie de datos filtrados por el usuario y debajo un sumatorio de una serie de datos de las columnas de la grid superior.
Hemos creado para ello dos módulo: uno con la grid con los datos y otro con otra grid con la suma. El problema es que cuando filtramos en la grid superior no se filtra en la inferior.
Nos gustaría saber cuál sería la forma adecuada de hacerlo.
Gracias. Un saludo
Hola Nuria Forte,
Los módulos deben estar en la misma página y tener de base el mismo objeto. Además los módulos deben ser de tipo object list para que el filtro "where" que monta sea totalmente compatible.
1- Crear una función javascript que capture el evento de filtrado del módulo de lista y aplique el filtro al módulo en cuestión. Este js se debe añadir como plugin, o como función en la propia página (hay que entrar en la edición de la página y en el apartado javascript poner la función que se detalla a continuación, ¡ah! y no te olvides de dejar activo el javascript. También se puede poner en un template de la lista principal, en el apartado header entre el tag <script></script>, pero este caso haría que el sctipt se cargue de la mano del template seleccionado.
Se recomienda quitar el módulo de lista estándar y crear uno personalizado para la página, usando la funcionalidad de clonación.
--Este código captura el evento de filtrado del módulo de la lista de la colección y el filtro lo aplica a otro módulo llamado TotalCC.
--Es fundamental que los módulos se basen en el mismo objeto, para que el filtro sql sea compatible.
--Dejo el debugger para que puedas depurarlo desde el propio navegador.
2- Añadir la llamada a la función js en el módulo de lista principal. En la casilla "JSAfterLoad"
Por poner un ejemplo gráfico, con éste método podemos lograr lo que muestra la siguiente imagen:

Un saludo,
Daniel Ernesto Lutz
- El mas antiguo primero
- Popular
- El mas nuevo primero
Sorted by El mas nuevo primeroDaniel Lutz
A continuación os paso una función que hace ésto mismo. La hemos optimizado e incorporado al producto CRM. Se utiliza para refrescar los módulos totalizadores de listas.
Básicamente recibe el nombre del módulo padre y el dependiente, aplica los mismos filtros, vengan de un preset, de propiedades filtradas, o del propio filtro de la colección que abre.
Daniel Lutz
Hola Nuria Forte,
Los módulos deben estar en la misma página y tener de base el mismo objeto. Además los módulos deben ser de tipo object list para que el filtro "where" que monta sea totalmente compatible.
1- Crear una función javascript que capture el evento de filtrado del módulo de lista y aplique el filtro al módulo en cuestión. Este js se debe añadir como plugin, o como función en la propia página (hay que entrar en la edición de la página y en el apartado javascript poner la función que se detalla a continuación, ¡ah! y no te olvides de dejar activo el javascript. También se puede poner en un template de la lista principal, en el apartado header entre el tag <script></script>, pero este caso haría que el sctipt se cargue de la mano del template seleccionado.
Se recomienda quitar el módulo de lista estándar y crear uno personalizado para la página, usando la funcionalidad de clonación.
--Este código captura el evento de filtrado del módulo de la lista de la colección y el filtro lo aplica a otro módulo llamado TotalCC.
--Es fundamental que los módulos se basen en el mismo objeto, para que el filtro sql sea compatible.
--Dejo el debugger para que puedas depurarlo desde el propio navegador.
2- Añadir la llamada a la función js en el módulo de lista principal. En la casilla "JSAfterLoad"
Por poner un ejemplo gráfico, con éste método podemos lograr lo que muestra la siguiente imagen:

Un saludo,
Daniel Ernesto Lutz
1 Persona Le Gusta
-
Ocultar módulos en función del tamaño del dispositivo
-
Anclar modulo al menú de inicio de FlexyGo
-
Instalación de AhoraFlexy en Visual Studio
-
LLamar a función hecha con JavaScript
-
Tokens en DBCombo
-
¿Gestión de imágenes vinculadas con ERP?
-
Desanclar objetos del interfaz de FlexyGo
-
Como acceder a los setting desde DLL
-
Combos de templates no se muestran
Ver los 87 temas