anonymous Log in
Search
Recents:
v3.0
gxpatterns-l
source de un Procedure, uso alternativo de templates DKT
24/08/15 09:29

Miguel Figueroa

Replies: 0

Matías Trabaja perfecto!, gracias. Miguel.- El 17 de agosto de 2015, 12:04 p. m., Matias Hernandez escribió: > 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 >> escribió: >> >>> 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. < >>> miguel.figueroa.j@gmail.com>: >>> >>>> 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.- >>>> >>>> >>> >> >


Back to gxpatterns-l