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

Miguel Figueroa

Replies: 0


Matías

Trabaja perfecto!, gracias.

Miguel.-




El 17 de agosto de 2015, 12:04 p. m., Matias Hernandez<matiash@genexus.com>
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. <miguel.figueroa.j@gmail.com
> >:
>
>> 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@genexus.com>
>> 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
>>>> <https://l-lin.github.io/angular-datatables/#/welcome> (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