Ir al contenido principal

Export Data Model en GeneXus

Una feature incluída en la linea Beta de GeneXus que puede parece menor y por ende pasar inadvertida, es la opción (propiedad) "Only Structure for Transactions" que se incluye en las Export Options:


Al exportar transacciones, si esta opción está en "true", entonces en el XPZ solo se incluye la estructuras de las mismas (no va el form, variables, etc).

Si a eso agrego que puedo configurar "References Type" en "Minimal", entonces seleccionando todas las transacciones de una KB puedo obtener un XPZ que tenga el modelo de datos de la misma.

Es decir: Transacciones, atributos, dominios, subtipos, tablas, etc.

En un esquema:



Donde DBClon tiene las mismas estructuras que DBOriginal.

Incluso podría configurar KB DataModel con "Reorganize Server Server Tables" en "no" y acceder directamente a la DBOriginal:
Prueba de concepto

Como prueba de concepto utilicé la KB GeneXusMeeting, exporté el modelo de datos y lo consolidé en una KB nueva que cree y el modelo de datos quedó exactamente igual:


Tip: el modelo de datos lo comparé generando un Create DB en ambas KBs y comparando los ReorganizationScript.txt de ambas

¿Qué utilidad tiene ésto?

Extraer el modelo de datos de una KB seguro puede tener muchos usos, en particular a mi me sirvió para tener varias aplicaciones que se desarrollan en diferentes KBs pero que se integran a nivel de base de datos (integrarlas en una KB sola no era una opción). Una KB es la "dueña" de las estructuras y exporta las mismas al resto de las KBs que es donde se desarrolla.

A su vez combinada con otras opciones en el export, la utilización de módulos, etc se pueden utilizar arquitecturas interesantes.
Bastante de esto comentaba Armin en su charla en el GX29 sobre Arquitectura de Sistemas grandes y complejos con GeneXus




Nota: en la beta actual (dic/2019) las fórmulas se exportan como nullvalue de las mismas, salvo las UDPs que no son exportadas. Es decir, una fórmula AttFormula=Expression se transforma en AttFormula=Nullvalue(AttFormula) esto es un comportamiento a mejorar.

UPDATE 13/Feb - esta funcionalidad fue incluída en V16U8 actualmente en Preview, a liberar semana del 17/Feb.

Comentarios

  1. La verdad que esta es terrible feature y de tenerla antes me hubiera ayudado con grandes cosas. Es necesaria para cuando tenemos que plantearnos re-ingeniería o cambios en la arquitectura de nuestros sistemas. Espero que este pronto en la versión para poder tenerla disponible.

    ResponderBorrar
    Respuestas
    1. Como bien decís: tiene varios escenarios de uso y puede resultar muy útil en esos.

      La opción ya está disponible en la versión Stable (preview) https://www.genexus.com/es/developers/downloadcenter?data=4978;; así que se puede probar sin problemas.
      Será liberada en el U8 (Feb/2020).

      Borrar
  2. ¿como se puede hacer esto en genexus ev3, debido a que esto esta disponible en versiones superiores?

    ResponderBorrar

Publicar un comentario

Entradas más populares de este blog

Abrir links con aplicaciones nativas y no el browser (deeplinking)

El problema que tengo con algunas aplicaciones Android/iOS es que cuando recibo un link por algún medio (mail, tweet, etc) al abrirlo me lo abre con el browser, en lugar de abrirlo con una aplicación nativa asociada a ese “contenido”. Por ejemplo, si recibo un link a un tweet espero que lo abra con alguna aplicación de twitter que tenga instalada y no con el browser. De modo análogo si recibo un mail con una nota de prensa de un medio X y tengo la aplicación de ese medio X instalada, espero que el link lo abra con la aplicación nativa y no con el browser. Lo mismo quisiera con mi aplicación de "banking" o cualquiera que tenga instalada y sepa manejar ese "contenido" (link). Los motivos son bastante obvios pero los resumo en: la experiencia de usuario es mucho mejor en la aplicación nativa que en el navegador. Parte importante del tema es que el mismo link sea válido tanto para ver el contenido en el browser como para verlo en la aplicación, porque como prove

¡A la salud de mi KB!

Es bueno, especialmente en "bases de conocimiento" (KB) que han pasado por varias versiones de Genexus, chequear su "estado de salud". En este sentido KBDoctor  es una herramienta que ayuda mucho, principalmente desde el punto de vista del "modelo" Genexus (atributos, calls, definiciones de variables, etc) representado en una KB. También es útil revisar la salud de los archivos que lo soportan. Hasta la 9.0 eran archivos C-tree (los famosos .DAT) que tenían indices (los famosos .IDX) y teníamos en "rebuild -y" que mejoraba esos archivos y sobre todo reconstruía los indices. A partir de la X las KBs se almacenan en MS SQL Server por lo cual la administración de la misma pasó de ser un "file server" a un "database server". En este sentido algo que me ha dado muy buenos resultados es el "CheckKnowledgeBase".

Rocha:Constantes tipo fecha

En la Rocha se soportan constantes del tipo fecha o fecha-hora con formato ANSI/ISO (AAAA-MM-DD HH:MM:SS).  Tecnicamente (Sintáxis): <date>::=    [0-9]{1,4}"/"[0-9]{1,2}"/"[0-9]{1,2} | [0-9]{1,4}"."[0-9]{1,2}"."[0-9]{1,2} | [0-9]{1,4}"-"[0-9]{1,2}"-"[0-9]{1,2} <hms>::=    [0-9]{1,2}[ap] | [0-9]{1,2}":"[0-9]{1,2}[ap]? | [0-9]{1,2}":"[0-9]{1,2}":"[0-9]{1,2}[ap]? <constant> ::=   "#"<date>"#" | "#"<date> <hms>"#" | "#"<hms>"#" Funcionalmente Se pueden utilizar esas constantes en las reglas, eventos, propiedades, etc (todo lugar donde se utilice el parser): Algunos ejemplos básicos: &FechaInicial=#2007-01-01# &FechaHoraInicial=#07-1-1 11:15a# &HoraInicial=#11a# Me parece bueno no tener que escribir funciones (CTOD, TTOC) sobre constantes tipo char para lograr una fecha y mucho mejor aun en