Filtro Case-Insensitive en Permisos GAM (GeneXus)
📄 Filtro Case-Insensitive en Permisos GAM (GeneXus)
🔹 Contexto
En el Web Panel de administración de permisos (GAM), se requiere filtrar los permisos por nombre desde la grilla.
Por defecto, el método:
&GAMRole.GetPermissions(&RolePermissionFilter, &Errors)
utiliza:
&RolePermissionFilter.Name
Este filtro es case-sensitive, es decir:
-
“Del” encuentra “Delete” ✅
-
“del” NO encuentra “Delete” ❌
🔹 Problema
El filtrado por nombre utilizando:
&RolePermissionFilter.Name = "%" + &FilName.Trim() + "%"
depende del motor interno de GAM, el cual distingue mayúsculas/minúsculas, generando resultados inconsistentes para el usuario.
🔹 Solución implementada
1. Deshabilitar filtro por nombre en GAM
Se evita el uso del filtro case-sensitive asignando:
&RolePermissionFilter.Name = ""
De esta forma:
-
GAM devuelve todos los permisos según los demás filtros
-
Se delega el filtrado por nombre a la lógica de la aplicación
2. Aplicar filtro manual case-insensitive
Dentro del For, se implementa un filtro utilizando Upper() y like:
For &Permission in &Permissions
if &FilName.IsEmpty() or
Upper(&Permission.Name) like "%" + Upper(&FilName.Trim()) + "%"
// carga de datos en la grilla
Grid.Load()
endif
EndFor
🔹 Funcionamiento
El filtro transforma ambos valores a mayúsculas:
Upper(&Permission.Name)
Upper(&FilName)
Esto permite comparar.
✔ Ejemplos
| Input usuario | Permiso | Resultado |
|---|---|---|
| del | Delete | ✅ |
| DEL | Delete | ✅ |
| Del | Delete | ✅ |
Los filtros de GAM no funcionan como si fuese un atributo, hay que manejarlos desde la API del GAM, de esta manera.