📄 Exportación de datos desde API GAM a Excel (GeneXus)

📄 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.

Deja un comentario 0

Your email address will not be published. Campos requeridos marcados *