anonymous Log in
Search
Recents:
v3.0
genexusextensions
Re: Salvar el HTML del Impact Database Report
08/04/19 10:26

Enrique Almeida

Replies: 3

Pasaron mas de 2 años y sigo esperando una respuesta para esto.
Me pueden pasar la transformacion xslt que hacen para pasar el iar_obj.xml
al html que se muestra en el dialogo del Impact Analysis Report?
Necesito que una extension que ademas de la reorg, salve en un formato
legible para humanos de que es lo que se va a reorganizar.
El mar., 7 de mar. de 2017 a la(s) 11:01, Enrique Almeida (
ealmeida@concepto.com.uy) escribió:
> Me interesa poder salvar el HTML de una navegacion recien generada, para
> poder salvar la reorganizacion y permitir a las personas que hacen deploy
> ver que es lo que va a hacer la reog, sin tener que analizar el script.
>
> Por lo que vi, quedan bajo el directorio del usuario/modelo archivos xml
> que tienen la reorganizacion.
>
> Pregunto:
> 1) Hay forma de saber la lista de tablas que participan en esa reorg o
> cuales son los archivos TableConversion.xml que se necesitan?
> 2) Tienen el xslt que usan para transformar de xml a html ?
> 3) Hay una forma mas sencila que procesar estos archivos para quedarse con
> la navegacion de una reorg?.
>
> Enrique
>
Replies

gusbro

08/04/19 13:04
Hola Enrique, te paso algo de info: 1) La lista de tablas con un link a su impacto queda en el archivo iar_objs.xml en el directorio de la KB 2) los xsl están todos en el directorio gxxml de la instalación de GX 3) No se, en el ReorganizationScript.txt del directorio del modelo queda una lista de las cosas a ejecutar Saludos, Gustavo ----- -----

Enrique Almeida

08/04/19 13:25
Gracias Gustavo: Con esto puedo seguir avanzando. Explico un poco el 3). El ReorganizationScript.txt, en el caso que necesite crear una tabla temporal, es casi imposible saber cual fue la reorganizacion que se esta haciendo, pues crea la tabla temporal, corre un programa y luego renombra la tabla. Todo esto queda en el script, pero para un DBA es dificil ver cual es el atributo que se esta agregando, cambiando, borrando etc. A nosotros nos serviria que el ReorganizationScript.txt incluya la informacion (similar a la que se tiene en el IAR) para que un ser humano leyendo solo ese script, entienda que es lo que va a realizar la reorganizacion. Enrique El lun., 8 de abr. de 2019 a la(s) 13:04, Gustavo Brown (gusbro@genexus.com)

gmilano

25/04/19 23:26
Hola Enrique, Este error sucede porque esa funcion esta presente en el Host que aplica la transformacion. Es decir via codigo se le inyecta al que hace la Transform un conjunto de funciones. En este caso es una funcion que dado un texto SQL le devuelve un html con el SQL coloreado y escrito "lindo" . *Estas usando C# para aplicar la transformacion ?* *SI --> * Si la respuesta es afirmativa entonces seguramente tengas algo como: *Creas tu transformacion* XslCompiledTransform transform = new XslCompiledTransform(); transform.Load( urlDeTuXsl, new XsltSettings(true, true), new XmlUrlResolver()); // cada parametro *Agregar las funciones * XsltArgumentList functions = new XsltArgumentList(); functions.AddExtensionObject("urn:SQLFunc", new ClaseQueTengaUnMetodoGetSql()); *Aplicar la transformacion pasando las funciones* using (XmlReader xmlReader = XmlReader.Create(new StringReader(xmlString))) { using (StringWriter textWriter = new StringWriter(CultureInfo.InvariantCulture)) { m_Transform.Transform(xmlReader, m_TransformArgs, textWriter); return textWriter.ToString(); } } Aqui la clase que tenga un metodo GetSql internal class ClaseQueTengaUnMetodoGetSql { public string GetSql(string lcsqltext) { return lcsqltext; } } La biblioteca que usamos para hacer el pretty print es http://www.sqlparser.com/sql-parser-dotnet.php Si te interesa hacer lo mismo que GeneXus la implementacion de GetSql que tenemos usando esa library es la siguiente: public string GetSql(string lcsqltext) { if (UIServices.KB.CurrentKB == null) return String.Empty; GxModel gxModel = UIServices.KB.WorkingEnvironment.TargetModel.GetAs(); DbmsType dbms = (DbmsType)gxModel.DataStore.Dbms; try { foreach (TDbVendor dbv in EnumVendor(dbms)) { var parser = new TGSqlParser(dbv); parser.SqlText.Text = lcsqltext; lzbasetype.gFmtOpt.case_identifier = TCaseOption.coNoChange; int i = parser.Parse(); if (i == 0) { var lc = new TLzLangConverter(parser); return lc.ToHtml("var1"); } } } catch (Exception ex) { ExceptionManager.LogException(ex); } return $"
{lcsqltext}
"; } NO estas usando C# Entonces seguro hay forma de agregar extensiones al host que ejecuta la transformacion. Hay que ver el caso. Ahora bien, existe otro tema a tener en cuenta que es que el XML esperado para aplicar la transformacion no es exactamente el que se genera en el directorio gxxml. Porque? Bueno porque eventualmente se necesitan englobar varios de esos xml en un xml padre. Por tanto digamos esos XMLs son las hojas de un XML que se arma dinamicamente. Es sobre ese XML que se arma dinamicamente sobre el cual aplica el XSL. Ese XML es muy sencillo basicamente se trata de un Root y luego el End. El Root es el siguiente: m_XMLHeader = "\r\n" + $"\r\n" + $"\t{GX_TMP_BASE_PATH}\r\n" + $"\t{GX_TMP_BASE_PATH_ESCAPED}\r\n" + "\tutf-8\r\n"; Y obviamente el cierre es simplemente Que valores tiene GX_TMP_BASE_PATH , es el directorio de GeneXus y el Escaped es el mismo (creo que algun procesador viejo no soportaba algo) pasale a los dos el mismo valor con formato uri (ej. file:///c:/genexusinstalldir Ese dato sirve para que luego el xsl pueda poner urls correctas a imagenes que estan en la instalacion de GeneXus. Bueno, espero esto te acerque a la solucion. Saludos. Gaston Milano CTO | GeneXus www.genexus.com [image: GeneXus™] On Wed, Apr 10, 2019 at 6:01 PM Enrique Almeida


Back to genexusextensions