Ir al contenido principal

Mi primer msbuild

Una de las features que incluye la versión Rocha son las GX MSbuild Task, basicamente brindan un "api" con el cual se puede acceder a información de la base de conocimientos e incluso automatizar/ejecutar tareas sin levantar el IDE.

Utilizando esta feature se pueden hacer cosas muy divertidas que dejo a la imaginación de cada uno, en mi caso he usado varios "scripts" que me han pasado pero nunca había hecho uno yo.

Hoy hice el primero, SUPER básico pero me sirvió. El problema a resolver: tenía dos KBs "parecidas" y quería comparar los schemas de las base de datos, eso en versiones anteriores hubiera sido meterme con GXpublic o en su defecto un listado de tablas, etc.
En la Rocha fue simplemente escribir un script.



Con cualquier editor cree escribi el archivo dbschema.msbuild con las siguientes lineas:

<Project  xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
<Import Project="C:\Archivos de programa\ARTech\GeneXus\Rocha\Genexus.Tasks.targets" /> 
<Target Name="ExportarDBSchema">    
<OpenKnowledgeBase Directory="C:\gc\modelos\evento2007"/>    
<WriteKnowledgeBaseSchema File="c:\tmp\dbschema.xml"/>
</Target>
</Project>

Linea a linea:

<Project  xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
Acá se define el "namespace" del XML del proyecto, es una linea mandatoria y va con ese valor, si no es incluye aparecerá un error: MSB4041

<Import Project="C:\Archivos de programa\ARTech\GeneXus\Rocha\Genexus.Tasks.targets" /> 
En esta linea se especifica donde están las extensiones especificas de GX, es el path donde está instalado GX Rocha y luego se incluye "GeneXus.Tasks.Targets". Linea mandatoria también.

<Target Name="ExportarDBSchema">    
Nombre "fantasía" que le quieran asignar.

<OpenKnowledgeBase Directory="C:\gc\modelos\evento2007"/>    
Obviamente esta es la "task" a ejecutar para abrir la KB y le paso el directorio donde está la KB que quiero abrir.

<WriteKnowledgeBaseSchema File="c:\tmp\dbschema.xml"/>
Acá incluyo la tarea a ejecutar luego de abierta la KB y especifico donde quiero el output (archivo XML a crear en este caso).

Ejecución

Una vez que tengo el script creado (dbschema.msbuild) lo ejecute del siguiente modo:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\msbuild.exe dbschema.msbuild

Obvio que el path donde está instalado el .NET Framework depende de la versión de Windows y del Framework en si.

Resultado

Obtengo un XML del tipo:

<Tables>
    <Table>
      <Name>Tabla1</Name>
      <Attributes>
        <Attribute>
          <Name>Att1</Name>
          <Type>NUMERIC</Type>
          <Length>6</Length>
          <Decimals>0</Decimals>
          <AllowNulls>False</AllowNulls>
          <Autonumber>False</Autonumber>
          <IsPrimaryKey>True</IsPrimaryKey>
          <Inferred>False</Inferred>
          <Formula>False</Formula>
        </Attribute>
etc, etc, etc.

Luego comparé ese XML con otro que de otra KB (cambié el valor  del OpenKnowledgeBase) y listo.

En fin, lo del principio, interesante feature que da para mucho más que este simple script (que a mi me sirvió para lo que quería y me llevó 2 minutos hacerlo :)). Quienes quieran saber más les recomiendo: http://wiki.gxtechnical.com/commwiki/servlet/hwiki?GeneXus+Rocha%2FMSBuild+Tasks,

Comentarios

  1. TXS, a veces uno piensa que si no es "rocket science" no vale la pena decir nada, no tengo temor a parecer un lego en ciertos temas porque lo soy nomás :)

    Una amiga hace mucho tiempo me dijo: "prefiero parecer ignorante una vez que serlo toda la vida"

    ¡¡¡FILOSOFIA DE BOLSILLO!!!

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

Sobre plomeros y sanitarios

Hace unos días estaba en casa de mi madre, quien sigue viviendo en la ciudad donde yo nací (Florida-Uruguay), cuando sonó el timbre. Fui a atender y me encontré con Martín, un ex compañero de liceo que hacía años no veía. Luego de preguntarle cómo andaba y el saludo de rigor, le pregunté que estaba haciendo por allí y me dijo "estoy trabajando aquí", ahí noté que venía con baldes y herramientas y recordé que es hijo del plomero que toda la vida trabajó en mi casa. El baño de mi madre estaba con problemas en la presión de agua así que llamó al plomero "tradicional" y este le comentó que estaba retirado pero que enviaría a su hijo. Allí pues estaba Martín. Es interesante encontrarse con compañeros de escuela/liceo que uno no ve hace muchos años, da para otro post seguramente. La cuestión es que seguimos conversando mientras él trabajaba. Le pregunté por el padre y me dijo que estaba bien pero ya medio cansado del trabajo y que nunca se había podido adaptar a los cambi...

¡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".