genexusextensions | | | |
Enrique Almeida | |
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 | |
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 |
|