📄 Exportación de datos desde API GAM a Excel (GeneXus)
📄 Exportación de datos desde API GAM a Excel (GeneXus)
🔹 Contexto
Esta implementación permite exportar a Excel datos provenientes de la API de GAM respetando el estado actual de una grilla en pantalla (paginación, cantidad de filas y filtros aplicados).
👉 Aplica para cualquier entidad de GAM:
-
Roles
-
Permisos
-
Usuarios
-
Permisos asignados a usuarios
-
etc.
🔹 Objetivo
Generar un archivo Excel que refleje exactamente lo que el usuario visualiza en pantalla:
-
Página actual
-
Cantidad de registros por página
-
Filtros aplicados
-
Contexto funcional (rol, usuario, aplicación, etc.)
🔹 Flujo ordenado de implementación
1) Guardar datos en sesión (desde el Web Panel)
&WebSession.Set("EXP_ROLE_ID", &RoleId.ToString())
&WebSession.Set("EXP_APP_ID", &ApplicationId.ToString())
&WebSession.Set("EXP_FIL_NAME", &FilName)
&WebSession.Set("EXP_GRID_SIZE", &GridState.ToJson())
2) Recuperar datos en el objeto de exportación (Procedure / Web Panel)
&RoleId = &WebSession.Get("EXP_ROLE_ID").ToNumeric()
&AppId = &WebSession.Get("EXP_APP_ID").ToNumeric()
&FilName = &WebSession.Get("EXP_FIL_NAME")
&GridStateJSON = &WebSession.Get("EXP_GRID_SIZE")
&GridState.FromJson(&GridStateJSON)
3) Definir ruta y nombre del archivo (ANTES de toda la operación)
&Filename = 'Export.xlsx'
if &file.Separator = '\\'
&Path = 'Reportes\\' + &Filename
else
&Path = 'Reportes/' + &Filename
endif
👉 La carpeta Reportes debe existir en el servidor.
4) Crear el Excel
&ExcelDocument.Open(&Path)
&ExcelDocument.Clear()
5) Cargar entidad GAM (ejemplo)
&GAMRole.Load(&RoleId)
👉 Esto es variable:
-
Puede ser
GAMUser -
Puede ser
GAMApplication -
Depende de qué quieras exportar
6) Definir filtros
&PermissionFilter = new()
&PermissionFilter.ApplicationId = &AppId
if not &FilName.IsEmpty()
&PermissionFilter.Name = "%" + &FilName.Trim() + "%"
endif
👉 Los filtros dependen del método que uses.
7) Obtener paginación desde GridState
&PageSize = &GridState.PageSize.ToNumeric()
&CurrentPage = &GridState.CurrentPage
&Start = ((&CurrentPage - 1) * &PageSize) + 1
8) Aplicar paginación al filtro
&PermissionFilter.Limit = &PageSize
&PermissionFilter.Start = &Start
Limit → Es el limite a exportar de filas en grilla (si tenemos 15 filas exporta 15 no mas).
Start → Indica la pagina que debe exportar (si nos encontramos en la pagina 3 de nuestra grilla exporta los datos ubicados en esa pagina).
9) Llamar a la API de GAM (extracción de datos)
&Permisos= &GAMRole.GetPermissions(&PermissionFilter, &Errors)
👉 IMPORTANTE:
-
Este método cambia según el caso
Ejemplos:
| Caso | Método |
|---|---|
| Permisos de rol | GetPermissions() |
| Permisos no asignados | GetUnassignedPermissions() |
| Usuarios | GetUsers() |
👉 Cada método puede soportar distintos filtros
10) Crear encabezados del Excel
&ExcelDocument.Cells(1,1).Text = "Título del reporte"
&ExcelDocument.Cells(1,1).Bold = 1
&ExcelDocument.Cells(3,1).Text = "Columna 1"
&ExcelDocument.Cells(3,2).Text = "Columna 2"
&ExcelDocument.Cells(3,1).Bold = 1
&ExcelDocument.Cells(3,2).Bold = 1
11) Rellenar el Excel
&Row = 4
For &GAMPermission in &Permisos
&ExcelDocument.Cells(&Row,1).Text = &GAMPermission.Name
&ExcelDocument.Cells(&Row,2).Text = &GAMPermission.Description
&Row += 1
EndFor
12) Guardar y cerrar el Excel
&ExcelDocument.Save()
&ExcelDocument.Close()
13) Limpiar variables de sesión
&WebSession.Remove('EXP_ROLE_ID')
&WebSession.Remove('EXP_APP_ID')
&WebSession.Remove('EXP_FIL_NAME')
&WebSession.Remove('EXP_GRID_SIZE')
14) Descargar el archivo automáticamente
&HttpResponse.AddHeader("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
&HttpResponse.AddHeader("Content-Disposition", "attachment;filename=" + &Path)
&HttpResponse.AddFile(&Path)
🔹 Consideraciones
✔ GridState
Permite replicar:
-
Página actual
-
Cantidad de filas
✔ Filtros
Deben guardarse manualmente
⚠️ Case Sensitive
GAM diferencia mayúsculas/minúsculas
Este flujo es reutilizable para cualquier exportación basada en GAM.