anonymous Log in
Search
Recents:
v3.0
gxpatterns-l
Modificar source de un Procedure, uso alternativo de templates DKT
30/07/15 14:47

matiash

Replies: 6

Hola Miguel, Re - 1) Para modificar el Source de un procedure simplemente deber asignar la propiedad Source de la ProcedurePart, o sea: Artech.Genexus.Common.Objects.Procedure proc1; proc1.ProcedurePart.Source = "..."; O sea, el source es simplemente un string. Esto tiene algunas ventajas (no es necesario tratar con un modelo de objetos) pero también tiene la desventaja de que para manipular secciones específicas de código (ej: modiicar el evento "X") debe hacerse en forma manual. El pattern WorkWith contiene una clase BasicParser que puede ayudar en algunos casos de uso. Re - 2) Si tu enfoque es éste (por lo que dices, parecería una buena opción) tendrías dos alternativas: 1. Utilizar el mecanismo de generación de archivos que viene built-in con patterns. Es similar al de objetos -- en el Pattern.Definition van nodos "File" para cada archivo a ser generado indicando template, expresión xpath para seleccionar elementos dentro de la instancia, encoding del output, y otras cosas. Algunas features de la generación de objetos (como el rename o borrado automático, o los eventos Before y AfterGenerateObject) no están disponibles para Files. 2. Invocar en forma manual los templates desde el BuildProcess. Por ejemplo, el pattern WorkWith hace esto para generar los eventos y rules de la transacción. Saludos, - Matías 2015-07-30 9:43 GMT-03:00 Miguel Figueroa J. : > Amigos > > Sigo con mi pattern (ya tiene nombre: GxVW Services), que genera objetos > DS, DP, SDT y un PROC main HTTP. En el fondo, lo que genera es un servicio > que retorna un json a usar con angular-datatables > (ajustando los > templates se puede usar con otros tables). > > Ahora quiero pasar a una segunda etapa en la que pretendo usar un > mecanismo de templates para generar unos archivos Javascript y Html, y > tengo dos caminos posibles: > > 1.- La primera idea es simplemente usar el template del procedure que ya > tengo, donde el desarrollador ponga la generación de una sección especial > de información al final del source. Esa sección sería un bloque comentado y > contendría datos de tags a reemplazar, archivos a usar como plantillas y > directorios origen-destino. > Las plantillas serían, simplemente, archivos Javascript y Html con unos > tags especiales a reemplazar. > La copia de plantillas, reemplazo de tags y salvado del archivo resultante > en un directorio destino, se realizaría en el BuildProcess > (AfterSaveObjects). > Pregunta: Cómo hago para tomar el source de un Procedure y agregarle o > quitarle cosas? > > 2.- Otra idea que tengo (y que me gusta más) es que mis plantillas > Javascript y Html sean directamente templates DKT, que generen como salida > los Javascript y Html que necesito. O sea, usar el mismo mecanismo de > templates de GXPatterns. > Pregunta: Cómo hago para usar esta funcionalidad? > O tal vez sólo debiera remitirme a lo de "T4 Text Templates"?. Me parece > que es lo mismo. > > Agradezco cualquier comentario, > > Miguel.- > >
Replies

Miguel Figueroa

31/07/15 13:52
Matías 1.- Era así de simple! Yo me estaba enredando con lo de SourcePart... 2.1.- Buena alternativa, pero me obliga a fijar cosas en la definición del pattern. 2.2.- Con esta me voy a quedar. Gracias!!! Miguel.- El 30 de julio de 2015, 2:47 p. m., Matias Hernandez

sirjuno

31/07/15 13:55
Miguel, tengo entendido que para que haya orden, debías responder a este hilo de mensajes modificando el asunto colocando [SOLUCIONADO] y si es posible explicar tu solución. Saludos Sir El vie., 31 de jul. de 2015 a la(s) 11:52 a. m., Miguel Figueroa J. < miguel.figueroa.j@gmail.com>

Miguel Figueroa

16/08/15 21:21
Matías Recién le estoy dando una vuelta a este tema y pude generar un archivo a partir de un template usando GenerateToString, tal como se usa en el pattern WorkWith. Trabaja perfecto. Sea invocando la generación de esta forma, o agregando nodos File al pattern (algo que aún no intento) , *¿cómo habría que hacer para que en el template se pueda invocar una "Instance" determinada?* (tal como se hace en los templates de objetos). Esto porque los archivos html y js que quiero generar dependen de cada instancia y de ciertas condiciones que se pueden dar en ellas. Esto en el sentido de que una instancia podría generar uno o más archivos (o ninguno) y que el contenido de esos archivos se forma en parte a partir de la información de la instancia. Veo que para el nodo File del pattern definition se puede usar un atributo Element, en el cual -supongo- podría referirme a un nodo de la instancia. Seguramente con eso se establece una referencia a la instancia, de tal forma que en el template tiene sentido lo de '<%@ Property Name="Instance"...'. El tema es cómo puedo lograr eso si la invocación de generar con template la hago "manualmente". Tengo un plan B que consiste en crear subtemplates, a usar en el template de mi procedure main, con los cuales generaría el html/js en una sección comentada del source del procedure para, luego "moverlo" a los archivos respectivos. Creo que puede resultar, pero no se ve muy elegante. Agradezco comentarios, salu2!!! Miguel.- El 30 de julio de 2015, 2:47 p. m., Matias Hernandez

matiash

17/08/15 12:04
Hola Miguel, Puedes pasarle parámetros al template por medio del objeto GeneartorParameters que se le pasa. Por ejemplo: Generator.GeneratorParameters parameters = new Generator. GeneratorParameters(); DefaultProvider.PrepareTemplateParameters(parameters); parameters.Properties["Key1"] = "a string"; parameters.Properties["Key2"] = true; ... string output = Generator.GenerateToString(templatePath, parameters, out templateErrors); Luego, en el template, debes declarar estos parámetros con el tipo que corresponda: <%@ Template Language="C#" TargetLanguage="GX" Description="Template description" %> <%@ Property Name="Key1" Type="System.String" %> <%@ Property Name="Key1" Type="System.Boolean" %> (Obviamente estos parámetros pueden ser de cualquier tipo, siempre y cuando los assemblies y namespaces también sean incluidos via las directivas Assembly e Import). El mecanismo de Files lo que hace es incluir automáticamente como parámetros la instancia y el elemento, al igual que en los templates usados para generar objetos. Saludos, - Matías 2015-08-16 21:21 GMT-03:00 Miguel Figueroa J. : > Matías > > Recién le estoy dando una vuelta a este tema y pude generar un archivo a > partir de un template usando GenerateToString, tal como se usa en el > pattern WorkWith. Trabaja perfecto. > > Sea invocando la generación de esta forma, o agregando nodos File al > pattern (algo que aún no intento) , *¿cómo habría que hacer para que en > el template se pueda invocar una "Instance" determinada?* (tal como se > hace en los templates de objetos). > > Esto porque los archivos html y js que quiero generar dependen de cada > instancia y de ciertas condiciones que se pueden dar en ellas. Esto en el > sentido de que una instancia podría generar uno o más archivos (o ninguno) > y que el contenido de esos archivos se forma en parte a partir de la > información de la instancia. > > Veo que para el nodo File del pattern definition se puede usar un atributo > Element, en el cual -supongo- podría referirme a un nodo de la instancia. > Seguramente con eso se establece una referencia a la instancia, de tal > forma que en el template tiene sentido lo de '<%@ Property > Name="Instance"...'. > > El tema es cómo puedo lograr eso si la invocación de generar con template > la hago "manualmente". > > Tengo un plan B que consiste en crear subtemplates, a usar en el template > de mi procedure main, con los cuales generaría el html/js en una sección > comentada del source del procedure para, luego "moverlo" a los archivos > respectivos. Creo que puede resultar, pero no se ve muy elegante. > > Agradezco comentarios, > > salu2!!! > > Miguel.- > > > > > El 30 de julio de 2015, 2:47 p. m., Matias Hernandez >

great.soluciones

17/08/15 16:24
Hola buenas tardes. Disculpen por no poder aportar nada, sin embargo me interesa mucho el tema. ¿Como empiezo a desarrollar un pattern? ¿Hay documentación? Saludos y Gracias Att: Aram Diaz. El 17 de agosto de 2015, 10:04, Matias Hernandez

Miguel Figueroa

17/08/15 18:00
Hola Aram En la Wiki de GX: http://wiki.genexus.com/commwiki/servlet/wiki?Category%3APatterns, salu2!!! El 17 de agosto de 2015, 4:24 p. m., GRUPO EMPRESARIAL DE ALTA TECNOLOGÍA S.A. DE C.V.


Back to gxpatterns-l