📄 Uso de Filtros Custom en Exportaciones Excel (GeneXus + Work With Plus)
🧩 Problema
Al trabajar con exportaciones a Excel/PDF generadas por el patrón Work With Plus (WWP) en GeneXus, se detectó el siguiente comportamiento:
- ✅ Los filtros estándar del grid (los del pattern) se aplican correctamente en el Excel.
- ❌ Los filtros personalizados (custom) creados manualmente no se aplican en el export.
Esto genera inconsistencias entre:
- Lo que el usuario ve en pantalla
- Lo que realmente se exporta
🔍 Causa raíz
El problema ocurre porque:
- Los filtros estándar se guardan automáticamente en el GridState y se reutilizan en el procedimiento de exportación mediante el Data Selector.
- Los filtros personalizados NO forman parte del GridState.
- Aunque se guarden en
Session, no se están cargando en el procedimiento de exportación.
👉 Resultado: en el export, las variables de filtros custom están vacías.
⚠️ Ejemplo del problema
En el Web Panel:
&Session.Set(!"CUSTOM_FILTER_PERARS", &PERARS)
Pero en el Procedure (VAuMAeWWExport):
// Nunca se recupera el valor
&PERARS = '' // vacío
Entonces esta condición:
Where upper(PERARS) like '%' + upper(&PERARS) + '%'
when Trim(&PERARS) <> ''
👉 NO se ejecuta
✅ Solución
✔ Paso 1: Guardar filtros custom en Session
Esto debe ir en el evento de llamada al procedimiento Export/ExportReport, previo al código generado por WWPlus
&Session.Set(!"CUSTOM_FILTER_PERARS", &PERARS)
&Session.Set(!"CUSTOM_FILTER_PFINOM", &PFINOM)
&Session.Set(!"CUSTOM_FILTER_CALDESSCOR", &CalDesCor)
&Session.Set(!"CUSTOM_FILTER_VAUPTAENV", &VauPtaEnv.ToString())
&Session.Set(!"CUSTOM_FILTER_IDBIEN", &IdBien.ToString())
&Session.Set(!"CUSTOM_FILTER_VAUNROMOT", &VauNroMot)
✔ Paso 2: Recuperar filtros en el Procedure de Export
Agregar en el LoadGridState de la transacción a modificar y en los Procedure de Exporty ExportReport(este código debe ir al final, por debajo del creado por WWPlus):
&PERARS = &Session.Get(!"CUSTOM_FILTER_PERARS")
&PFINOM = &Session.Get(!"CUSTOM_FILTER_PFINOM")
&CalDesCor = &Session.Get(!"CUSTOM_FILTER_CALDESSCOR")
&VauPtaEnv = Val(&Session.Get(!"CUSTOM_FILTER_VAUPTAENV"))
&IdBien = Val(&Session.Get(!"CUSTOM_FILTER_IDBIEN"))
&VauNroMot = &Session.Get(!"CUSTOM_FILTER_VAUNROMOT")
📌 Nota importante
Esta solución se basa en la transacción VAuMAe, incluyendo sus procedimientos Export y ExportReport.
Gracias por la info!!
de nada máquina!