Cambiar el valor default de una propiedad en una KB GeneXus
En GeneXus, las propiedades de los objetos tienen un comportamiento jerárquico: pueden definirse a distintos niveles (KB, Version, Environment, Generator, Folder, Object, etc.), y los valores definidos en niveles superiores se heredan como default por los niveles inferiores.
Este modelo facilita la consistencia general del desarrollo, pero plantea un desafío cuando queremos cambiar el valor por defecto de una propiedad en toda la Knowledge Base (KB).
Ese cambio puede tener un impacto masivo, afectando a miles de objetos en cascada.
Un ejemplo concreto: Commit on Exit
Supongamos que tenemos la propiedad Commit on Exit configurada en YES a nivel del Environment.
Esto significa que todos los objetos que no tengan un valor explícito heredan ese comportamiento y realizan un commit automático al finalizar la ejecución.
Ahora imaginemos que queremos modificar esta configuración para que cada desarrollador maneje manualmente las UTL (Unit of Transaction Logic), y por tanto necesitamos cambiar el valor por defecto a NO.
-
Si hacemos el cambio directamente a nivel de Environment, todos los objetos que usan el valor por defecto pasarán a tener
Commit on Exit = NO.
En este caso, el cambio es global, instantáneo y coherente.
Cuando el cambio debe ser paulatino
El problema aparece cuando el cambio no puede hacerse de forma total e inmediata, por ejemplo:
-
Queremos que los objetos nuevos adopten el nuevo valor (
NO), -
pero mantener los objetos existentes con el valor anterior (
YES) hasta que puedan ser revisados uno a uno.
En este escenario, la herencia jerárquica deja de ser suficiente.
Necesitamos romper la herencia en los objetos existentes (es decir, establecer explícitamente Commit on Exit = YES en cada uno) antes de cambiar el valor por defecto en el nivel superior.
De esta manera:
-
Los objetos existentes quedan con su comportamiento actual (valor fijo).
-
Los nuevos objetos, al heredar el nuevo default, comenzarán con el valor actualizado.
Estrategia recomendada
-
Identificar los objetos afectados: aquellos que tienen la propiedad en valor por defecto.
Puede hacerse con herramientas como KBDoctor o mediante un script de exportación de propiedades. -
Asignar explícitamente el valor actual (
YES) a esos objetos. -
Cambiar el valor default a nivel de Environment o Version (
NO). -
Migrar paulatinamente los objetos, revisando el manejo de transacciones.
Conclusión
Cambiar el valor default de una propiedad en GeneXus parece simple, pero implica entender la herencia jerárquica de configuraciones.
Si el cambio es global, basta con modificarlo en el nivel superior.
Si es gradual, se requiere una estrategia intermedia que preserve la estabilidad del sistema mientras se avanza hacia el nuevo estándar.
Creo que es una buena oportunidad para automatizar y definir una buena práctica para lograr cambiar propiedades. Ayudaría mucho, poder tener una herramienta que fije el valor actual en los objetos que tienen el valor default, de forma de poder cambiar sin miedo a los valores más modernos.
Otros ejemplos de propiedades definidas a varios niveles (hay mas)
- Default Style (Version / Objeto)
- Default Master Page (Version / Objeto)
- Web Form Defaults (Version / Objeto)
- Default Web Form Editor (Version / Objeto)
- Web User Experience (Version / Objeto)
- Default Form Layout (Version / Instancia / Objeto)
- Exposed Namespace (Version / SDT / BC)
- Disabled Warning (Generador / Objeto)
- Object Visibility (Modulo / Objeto)
Comentarios
Publicar un comentario
1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.