Un programa es un objeto y su circunstancia.
¿Que es un programa dentro de una KB GeneXus?.
No le encuentro una respuesta fácil.
Un objeto puede verse afectado por su entorno, por otros objetos a los que hace referencia. Por ejemplo, los dominios, la forma en que están definidos los atributos, las tablas en que están dichos atributos, los programas a que llama o por cuales es llamado, las imágenes que maneja, las propiedades del modelo y un gran montón de etcéteras, hace que el funcionamiento de un programa pueda variar muchisimo.
El mismo código GeneXus, puede realizar operaciones bien diferentes, por ejemplo:
for each Att1, Att2
Msg(Att1 + Att2)
endfor
Si Att1 y Att2, estan en una misma tabla, leerá solo una tabla, pero puede hacer un join bien complejo si Att1 y Att2 están en dos tablas diferentes que puedan relacionarse correctamente.
Y preguntarse que es un programa para puede ser útil?.
El tema, tiene varias puntas. Por ejemplo si queremos hacer un control de versiones, se debería poder reconstruir un objeto a su versión anterior y para lograrlo, es importante poder identificar cuales son las cosas que afectan a un programa.
También para la realización de pruebas en un sistema grande, y ante la imposibilidad de probarlo en su totalidad, es de fundamental importancia identificar cuales son los programas que puedan haber cambiado su comportamiento para concentrar las pruebas en ellos.
Para la instalación de los objetos que cambiaron y que pueden depender de otros, es importante entender dichas dependencias y poder instalar sin producir interrupciones en el funcionamiento de nuestros sistemas.
Entonces, que afecta el funcionamiento de un programa Genexus?.
Algunas de las cosas que afectan a un objeto son:
1) Atributos utilizados (Nombres, Tipo, Picture, Control, etc)
2) Tablas referenciadas (Nombre, Clave, Atributos, Cache Change frecuency)
3) Objetos referenciados (Nombre, parámetro de los mismos y si son de in/out)
4) Objetos que referencian al objeto
5) Propiedades del generador
6) ....
Entonces, una cosa que puede estar buena es tener asociado a cada tabla, un digest (MD5 o algo así) del texto formado por la tabla, atributos con sus tipos y algunas propiedades importantes) de forma de poder guardar dicha información en el objeto que la utiliza.
Lo mismo puede hacerse con los objetos referenciados, guardándose un resumen del nombre, parámetros y sus tipos.
Si tupiéramos esta información en el objeto (dll o class) a instalar y la misma fuese consultable con reflection, podríamos chequear que se pueda instalar un objeto, pues no han variado los elementos que el referencia. Por ejemplo se podría ver que las tablas de la base de datos, tienen la misma estructura que la que tenia esa misma tabla cuando dicho objeto fue generado.
Lo mismo podría hacerse con los programas llamados.
No es una idea del todo elaborada y le falta mucho para redondearla, pero creo que seria de mucha utilidad poder contar con la misma.
Hola Enrique.
ResponderBorrarAcabas de dar una descripción de parte del proyecto en el cual estoy hace un tiempo.
El módulo de descripción de dependencias es parte de un módulo de una herramienta interna encargada de la generación de los objetos, obtención de metadata, compilación, empaquetado y distribución de los mismos.
Luego otra herramienta se encargará de la aplicación de paquetes en los ambientes, tendrá análisis de impacto, aplicación de actualizaciones y posiblemente también se incorpore un módulo de diagnóstico.
El producto de la empresa en donde trabajo es muy grande y variado, por lo que surgió hace ya un tiempo la necesidad de tener mayor control y automatismo sobre los procesos actualmente ejecutados.
Tenemos la suerte de que GeneXus actualmente nos brinda las herramientas para tener acceso a toda la información necesaria para poder hacerlo.
Esperamos tener a futuro una herramienta que permita tener automatizado para nuestro producto el proceso de integración, generación, compilación, deploy y distribución, así como la actualización, análisis de impacto de updates y autodiagnóstico del propio producto sobre el ambiente de ejecución.
En cuanto tenga un tiempo veré de ir incorporando en mi blog algo más de información sobre las herramientas que estoy desarrollando.
Creo que tanto tus ideas como las mías ayudarán en un futuro a que GeneXus nos brinde (de forma nativa o no) información más detallada para la creación de herramientas.
Hoy en día el conocimiento está, las herramientas están, es cuestión de liberar nuestro talento y comenzar a actuar.
David:
ResponderBorrarEs bueno conocer que en otras empresas tienen necesidades similares, lo que confirma que es algo en lo cual vale la pena trabajar.
Veo que vos estas mucho mas avanzado pues ya estas en la etapa de implementacion, mientras que por aca lo tenemos en la etapa de idea/necesidad.
Estare a la espera de lo que puedas hacer publico, para poder avanzar en el tema.
Veremos si alguien mas se muestra interesado.