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,
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,
Me gusto el POST.
ResponderBorrargab
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 :)
ResponderBorrarUna amiga hace mucho tiempo me dijo: "prefiero parecer ignorante una vez que serlo toda la vida"
¡¡¡FILOSOFIA DE BOLSILLO!!!