PATTERNS
312
Patterns
• Es una herramienta que:
• es parte de GeneXus 9.0 (Tools / Patterns)
• puede ejecutarse también como aplicación independiente
• Básicamente permite aplicar a una Base de Conocimiento
cierto patrón (pattern), y que se generen todos los objetos
GeneXus necesarios para implementar el patrón, para aquellas
instancias que se hayan seleccionado.
• Existe un conjunto de patrones muy útiles ya definidos (al
instalar la herramienta se instalan) para que el desarrollador
pueda aplicarlos a sus Bases de Conocimiento rápidamente,
obteniendo por resultado funcionalidades útiles generadas
automáticamente.
• A su vez la herramienta permite crear patrones nuevos, siendo
esta una tarea un poco más compleja.
Puede obtener los requerimientos de software para instalar la herramienta Patterns de la
siguiente página del Wiki:
[Link]
313
Patterns
Algunos patrones (patterns) existentes:
• WorkWith
• Bill Of Materials
• OAV
Catálogo:
[Link]
Work With: Genera a partir de una transacción (o para todas aquellas transacciones que se
deseen), todos los objetos necesarios para tener una aplicación web.
Por ejemplo, si se aplica el pattern “Work With” a la transacción “Customer”, se generará un
objeto GeneXus Web Panel que permitirá al usuario final consultar interactivamente los clientes de
la base de datos (se presentará una página web vistosa conteniendo una lista con los clientes de la
tabla CUSTOMER). Este Web Panel se llamará “Work With Customers” y ofrecerá entre tantas
cosas, un link asociado a cada cliente mostrado en la lista, para que mediante su selección se
acceda a otro objeto Web Panel (de nombre “View Customer”) que mostrará todos los datos del
cliente (y su información relacionada como podrían ser facturas, recibos, etc.). El Web Panel “Work
With Customers” además ofrecerá para cada cliente mostrado, la posibilidad de modificar sus datos
(habiéndose agregado automáticamente para ello una invocación a la transacción “Customer”) así
como la posibilidad de eliminar un registro de cliente, o de insertar un cliente nuevo (invocando a
la transacción “Customer” para ello también).
Se podrán configurar variadas propiedades para agregar opciones de filtrado en el Web Panel
“Work With Customers” (por ejemplo para que el usuario final pueda consultar solamente los
clientes de cierto país, o aquellos cuyos nombres se encuentren incluidos en determinado rango);
y también configurando una simple propiedad se podrá incluir en el Web Panel “Work With
Customers” un combo box que ofrezca distintos órdenes posibles, para que el usuario final elija si
desea el resultado de la consulta ordenado por nombre de cliente, por código u otro atributo.
Si el patrón Work With se aplicara también a la transacción “Product” obtendríamos todas estas
funcionalidades para dicha instancia también, así como para cada una de las transacciones que se
deseen.
Bill of materials: Este patrón permite generar a partir de una transacción, otra que representa la
relación compuesto – componente.
OAV: Objeto-Atributo-Valor; Este patrón genera a partir de una transacción otras dos
transacciones que permiten extender la original, con el objetivo de permitir definir atributos en
runtime.
Además, seguimos trabajando en la definición de nuevos patterns. Sugerimos ver catálogo con
lista de patterns, algunos de los cuales ya están implementados y otros sugeridos para una futura
implementación.
314
Patterns
Objetivos y beneficios de la herramienta Patterns:
Gran incremento de productividad y calidad en las aplicaciones
Ejemplo de uso:
Aplicar el pattern Work With a una KB para generar la mayoría de
los web objects necesarios para obtener una aplicación web atractiva
y amigable.
315
Patterns
Utilización de la herramienta
(mostramos ejemplo aplicando pattern WorkWith)
Paso 1
- Contamos con una KB con algunas transacciones (se recomienda tener
prototipo web creado)
- Ejecutamos la herramienta Patterns
- Desde GeneXus (Tools / Patterns, en el modelo de Diseño) Æ la KB
se cerrará automáticamente, y se reabrirá cuando se cierre la
herramienta Patterns
- En forma independiente ([Link]) Æ será necesario
cerrar la KB desde GeneXus, ya que para utilizar una KB desde la
herramienta Patterns debe haberse cerrado previamente desde GeneXus
y viceversa
Si se ejecuta la herramienta Patterns en forma independiente de GeneXus, será necesario
seleccionar la KB con la cual se trabajará (para ello la herramienta Patterns ofrece el ítem:
File / Open Knowledge Base).
Cuando se trabaja con la herramienta Patterns con una KB por primera vez, se presenta un
diálogo cuyo título es “Workspace Configuration”. Este diálogo permite configurar algunas
opciones relacionadas a la KB, otras opciones relacionadas al pattern a ser aplicado, y otras
opciones relacionadas a operaciones de GeneXus (impactar, especificar, etc.) que pueden
ejecutarse utilizando la herramienta Patterns. En este punto inicial puede cerrarse este
diálogo si se desea, y posteriormente es posible ingresar al mismo, mediante el ítem Build
/ Configure GX Integration (ver paso 8).
316
Patterns
Paso 2
- Se despliega información de la KB
- Dado que muchos patterns usan TRNs, se muestra una lista de las
TRNs disponibles en el tab KB Explorer:
317
Patterns
Paso 3
- Seleccionar en el combo box mostrado en la toolbar, el
pattern que se desea aplicar:
Se ofrece por defecto la lista de patterns predefinidos.
318
Patterns
Paso 4
- Debemos obtener un ‘instance file’ por cada caso al cual queramos
aplicar el pattern.
- ‘Instance file’ = archivo XML con los datos propios de la instancia
- Si bien es posible crear cada ‘instance file’ de cero, los patterns
suelen proveer una funcionalidad para crear ‘instance files’ por
defecto, y luego poder modificarlos fácilmente.
- En el caso del pattern WorkWith, en el tab KB Explorer:
- Teniendo una TRN (o varias) seleccionada(s) Æ botón
derecho / Generate Instance File
- Doble clic en una TRN
Llamamos proceso de instanciación de un patrón al proceso de aplicar un patrón a una o
varias situaciones (instancias).
En el proceso de instanciación de un patrón las entradas son:
• Instance files: por cada situación o instancia a la cual se quiera aplicar el patrón, habrá
que crear un instance file con la información propia de esa instancia en particular (atributos
a mostrar, etc.). Cada instance file es en definitiva un archivo XML con los datos propios de
la instancia, y tal como se explica en la transparencia, los patterns suelen proveer una
funcionalidad para crear ‘instance files’ por defecto (que luego, de considerarse necesario, se
pueden modificar fácilmente).
• Template files: contienen la implementación del patrón y de su aplicación a las instancias.
El resultado que se obtiene del proceso de instanciación de un patrón (procesando los
instance files y template files) es: un conjunto de objetos GeneXus para ser consolidados
en la KB.
319
Patterns
[Paso 5]
- Los ‘instance files’ pueden editarse en el panel derecho
- Dos opciones para hacerlo: Tree View / XML View:
Cada ‘instance file’ es un archivo XML con estructura jerárquica, conteniendo cada uno de sus
nodos un conjunto de propiedades.
La herramienta patterns ofrece 2 editores para editar cada ‘instance file’ en el panel derecho:
el editor XML View y el editor Tree View.
El editor XML View permite editar los instance file directamente en su formato XML. Por su
parte el editor Tree View es mucho más amigable, sencillo de usar, y con interfaz en alto
nivel que provee mayor funcionalidad para ayudar en el proceso de edición. Por todo esto el
editor Tree View es el más usado y es el recomendado para usuarios no avanzados.
320
Patterns
Paso 6
- Los ‘instance files’ se deben grabar. Para ello, bajo el ítem
Instance se ofrecen las opciones Save y Save All.
- Los ‘instance files’ que no se han salvado aún se visualizan
con nombre: <TRN [Link]>*.
- Una vez salvados se visualizan con el nombre:
TRN [Link] (ej: [Link]).
Save – salva el ‘instance file’ con el que se esté trabajando.
Los ‘instance files’ que no se han salvado aún se visualizan con nombre: <TRN
[Link]>*. Y una vez salvados se visualizan con el nombre: TRN [Link](por
ejemplo: [Link]).
¿Dónde se almacenan físicamente los ‘instance files’? En el subdirectorio Templates bajo el
directorio de la KB.
Seleccionando el tab Folder Explorer se pueden visualizar estos archivos:
Save All – Salva todos los ‘instance files’ (si ya existen, pregunta si reemplazar).
Es importante tener en cuenta que si se generan los ‘instance files’ por defecto nuevamente a
partir de las transacciones, serán sobrescritos.
321
Patterns
Paso 7
- Una vez creados y editados los ‘instance files’, el siguiente paso
es que la herramienta genere los objetos GeneXus que
implementan el pattern para las instancias.
- Opciones: Se genera en
- Build / Apply Pattern KBPath\Templates\Import, un
- Build / Apply and Consolidate archivo <TRNName>.[Link]
por cada ‘instance file’
- Posibilidad de que se consoliden automáticamente a
continuación o que lo haga después (desde la KB) el
desarrollador GeneXus.
Mediante botón derecho también es posible ejecutar estas acciones: es decir, estando posicionado en
el tab Folder Explorer, luego de haber seleccionado los instance files (.workwith files), se pueden
ejecutar las opciones Apply Pattern o Apply and Consolidate.
Nota: También es posible seleccionar una TRN o grupo de TRNs estando posicionado en el tab KB
Explorer, y mediante botón derecho ejecutar la opción Generate, Apply and Consolidate. Pero es
importante entender que seleccionando esta opción, se generarán los instance files por defecto
nuevamente para las TRNs seleccionadas, y luego de ello, se generarán los archivos
<TRNName>.[Link] correspondientes y se consolidarán en la KB. Si se está seguro que los instance
files por defecto no necesitan ser editados, es posible seleccionar esta opción directamente.
A su vez es importante saber que si se selecciona la opción Apply and Consolidate se efectuarán
también las siguientes acciones:
• Se configurará como default theme de la aplicación al theme Fantastic.
• El directorio Images será copiado automáticamente bajo el directorio KBPath\Templates.
• La model property "Base image path" del modelo de diseño se configurará con el valor anterior.
322
Patterns
Paso 8
- Desde la herramienta Patterns, es posible ejecutar las acciones
que se realizan también desde GeneXus: Impactar el modelo,
Especificar, Generar, Compilar y Ejecutar.
- Diálogo donde se configura:
Para hacer más fácil todo el proceso, desde la herramienta Patterns, es posible ejecutar las acciones que
se realizan con GeneXus: Impactar el modelo, Especificar, Generar, Compilar y Ejecutar.
Estas acciones se configuran en el diálogo “Workspace Configuration” que se abre en el momento de
abrir la KB con la herramienta Patterns, o seleccionando luego la opción Build / Configure GX
Integration.
Opciones disponibles en el diálogo
Model – Muestra los modelos definidos en la KB, y permite seleccionar uno de ellos (se requiere tener
los modelos creados y la creación de sus tablas hechas).
Apply and Consolidate – Al seleccionar la opción Apply and Consolidate, es posible ejecutar más
acciones además de la generación de objetos y consolidación. Este combo ofrece las siguientes
posibilidades:
• Consolidate Only (Apply and Consolidate)
• Impact Model (Apply and Consolidate + Impact Model)
• Impact, Specify (Apply and Consolidate + Impact + Specify)
• Impact, Specify, Compile (Apply and Consolidate + Impact + Specify + Compile)
• Impact, Specify, Compile, Run (Apply and Consolidate + Impact + Specify + Compile + Run)
GeneXus Version - La versión de GeneXus correspondiente a la KB se detecta automáticamente (puede
ser 8.0 o 9.0). El modelo se especificará / generará con dicha versión.
323
Build Actions- Permite seleccionar qué objetos deben especificarse y generarse al seleccionar Specify
and Generate. Las opciones disponibles son:
- Build All
- Build Pending (updated since last specification)
− Specify Consolidated Objects
Specification – Permite seleccionar el tipo de especificación / generación a ser ejecutado al seleccionar
Specify and Generate. Las opciones disponibles son:
− Full Specification
− Check Specification
− Force Generation
Run Command – En esta opción se debe indicar la URL que se ejecutará si se seleccionó la opción
Impact, Specify, Compile, Run.
Se debe configurar:
para aplicaciones .NET Æ Run Command = [Link]
para aplicaciones Java Æ o [Link]
Nota: Vale aclarar que “home” es el nombre de un web panel generado por el patrón WorkWith; el
mismo ofrece links a todos los web panels WorkWith generados (y la letra h que antecede a su nombre
en la invocación, corresponde al prefijo que se agrega a todo objeto web panel main o ejecutable que se
invoca).
324
Patterns
Resultado en ejecución
325
Patterns
¿Cómo modificar los objetos generados?
• Mediante la herramienta Patterns
1. Modificando las propiedades de las instancias (en la
medida que ofrezcan lo que se desea)
2. Modificando el pattern, personalizándolo para que ofrezca
configurar propiedades que implementen las necesidades
• Mediante GeneXus
Modificando los objetos GeneXus generados (Desventaja:
en caso de querer volver a generarlos con Patterns, se
regeneran los objetos, perdiendo los cambios hechos a
los mismos)
326
Patterns
¿Cómo modificar las propiedades de las instancias?
Archivo de instancia
Editor Tree View
Propiedades configurables
Son muchas las propiedades que se ofrecen en los archivos de instancia correspondientes al pattern
WorkWith para personalizar el comportamiento de los objetos que se generarán. A continuación
describimos algunas de ellas.
El nodo Selection ofrece las propiedades relacionadas al web panel WorkWith que se generará para
la instancia. Sus sub-nodos son:
Modes
Este nodo permite definir en cuáles modos se ofrecerá invocar a la transacción. Las posibilidades y
sus valores por defecto son:
Insert: True
Update: True
Delete: True
Display: False
Export: True (exportación a planilla excel)
Para casa modo podrá especificarse una condición. Se proveen las siguientes propiedades para ese
propósito:
Insert Condition
Update Condition
Delete Condition
Display Condition
Si se define una condición asociada a un modo, la invocación para ese modo solo se habilitará si la
evaluación de la condición es verdadera (Ejemplo: CountryId=10).
327
Attributes
Este nodo permite definir cuáles atributos se desean mostrar en el grid (y para cada atributo, se
pueden personalizar varias propiedades).
Orders
Es posible ofrecer al usuario final varios órdenes posibles para ver el resultado de la consulta (es
decir, las líneas mostrando los datos en el grid). Utilizando el botón derecho del mouse se puede
definir un nuevo orden (su nombre y composición). Cada orden puede estar compuesto por varios
atributos (pudiendo indicar para cada un de ellos si se desea orden ascendente o descendente). Se
presentará un combobox en el web panel WorkWith ofreciendo todos los órdenes posibles de
seleccionar, para que el usuario final elija uno y los datos se presenten en el grid ordenados por el
mismo.
Filters
Permiten definir condiciones de filtro para que se muestren en el grid solo los registros que cumplan
con las mismas.
El nodo View por su parte, ofrece las propiedades relacionadas al web panel View que se generará
para la instancia. El web panel View muestra toda la información de un registro, que fue
seleccionado en el grid del web panel WorkWith (la información del registro es mostrada en una
solapa de un tab control, y además hay una solapa con un grid por cada tabla directamente
subordinada, para mostrar la información relacionada).
328
Observaciones
Al crear cada ‘instance file’ por default, podemos observar que las distintas propiedades del ‘instance file’
se inicializan con valores por default. Dichos valores por default para las propiedades, se especifican en
un archivo denominado [Link] (en nuestro caso [Link]).
El archivo [Link] se encuentra donde está instalada la herramienta Patterns, bajo el
subdirectorio del Pattern particular que se esté utilizando. Para el caso del pattern WorkWith estará bajo:
Patterns\WorkWith (recordar que bajo el directorio de la herramienta Patterns, existe un subdirectorio
por cada patrón predefinido (WorkWith, Bill of Materials, OAV) así como deberá haber un subdirectorio
por cada patrón definido por el usuario.
Si deseamos tener un archivo de configuración [Link] por cada KB, debemos copiar este
archivo al directorio Templates que se crea bajo la KB al usar la herramienta Patterns; así la herramienta
Patterns utilizará dicho archivo ubicado en la KB para inicializar las propiedades de los ‘instance files’ que
se creen. Si la herramienta Patterns no encuentra el directorio Templates con este archivo bajo la KB,
utilizará el archivo [Link] (en nuestro ejemplo [Link]) ubicado en el directorio
Patterns\WorkWith.
El [Link] permite configurar algunos aspectos generales que aplicarán a todos los objetos. Por
ejemplo, las master pages a ser utilizadas por los objetos web, los web components utilizados como
header y footer, etc..
Para editar este archivo de configuración, la herramienta Patterns ofrece el ítem: Tools/Change
Pattern Configuration.
Ejemplo:
El pattern WorkWith además de
generar objetos nuevos, hace algunas
modificaciones a las trn’s existentes
(regla parm para recibir parámetros
del WorkWith
correspondiente, etc.).
En el archivo [Link], el
valor configurado por default para
esta propiedad es “Only rules and
events”.
Propiedad UpdateTransaction, ofrece los siguientes valores:
• Do not update: La trn no será modificada (web form, reglas y eventos serán mantenidos)
• Only rules and events (default value): Solo las reglas y eventos son modificados, pero no el web
form.
• Apply WW Style: la primera vez que el pattern sea aplicado, el comportamiento será el mismo que si
se hubiese seleccionado el valor Create Default. A partir de la segunda vez, el header, footer y botones
del form web serán modificados, pero no la Data Area. Los eventos y reglas también serán modificados.
• Create default: el web form, reglas y eventos serán modificados.
329
Ejemplo: Work With desde GeneXus
En el capítulo donde estudiamos el objeto web panel, implementamos manualmente un web panel “Work
With Customer” donde agregamos variables al grid para dar un mensaje de cliente moroso si su saldo
superaba los $10.000 y para contar la cantidad de facturas que se le realizaron, respectivamente. Habíamos
asimismo programado el evento Load para lograr lo anterior.
Todo esto puede ser codificado automáticamente por el Pattern “Work With”, si ud. agrega en la lista de
atributos del archivo de instancia correspondiente, las dos variables anteriores, y asociadas a las mismas en
el “LoadCode” el código asociado, como puede ver en la siguiente página.
330
…desde Patterns
Se definen las variables &type y &quantity haciendo botón derecho sobre el nodo Attributes y luego,
posicionándose en &type, en la ventana de la derecha, en la opción LoadCode, se ingresa el código que se
quiere ejecutar para esa variable, cuando se cargue la línea.
331
Ejemplo: Work With desde Genexus
Acciones sobre
el cliente
seleccionado
Asimismo, en el web panel Work With Customer que habíamos implementado manualmente antes, agregamos
botones para poder realizar las acciones típicas de un Work With (alta, baja, modificación, y vista de registro).
Asimismo, tuvimos que modificar la transacción “Customer” para recibir como parámetro el modo y clave, como
se puede recordar en la siguiente página.
332
Ejemplo: “Work With Customer”
desde GeneXus
Event ‘Insert’ En las reglas de la
[Link](‘INS’, 0) transacción “Customer”:
Endevent
Event ‘Update’ Parm(&Mode, &CustomerId );
[Link](‘UPD’, CustomerId)
Endevent CustomerId = &CustomerId if not
Event ‘Delete’ &[Link]();
[Link](‘DLT’, CustomerId)
Endevent
Event ‘View’
[Link](‘DSP’, CustomerId)
Endevent
Pattern crea el enumerado:
El Pattern Work With no implementa estas acciones de la misma manera. Esta herramienta crea un dominio
enumerado para los valores que puede tomar la variable &Mode y la implementación de las acciones en el web
panel Work With Customer que realiza es como se muestra en las páginas siguientes.
Pattern modificará la transacción “Customer” para agregar exactamente las mismas reglas que nosotros
escribimos en forma manual.
333
…desde Patterns
Event Start
[Link] = Link(TCustomer, [Link], [Link]())
&Update = LoadBitmap(!"images/[Link]")
Endevent
Event Load
&[Link] = Link(TCustomer, [Link], CustomerId)
Endevent
‘UPD’
Aquí podemos ver otra forma de selección de una línea del grid. En el caso anterior utilizamos la propiedad
AllowSelection del grid para habilitar la selección de una línea en ejecución por parte del usuario.
Otra opción es la que implementa el Pattern “Work With” mediante la utilización de variables (en este caso de
tipo bitmap, &update y &delete, cargadas con la imagen correspondiente en el evento Start) a las que en el
evento Load del grid se les asigna la propiedad Link para determinar el identificador de cliente que se le
envía a la transacción Customer en cada línea cargada (en el cuadro de arriba solo se incluyó el código para
cargar la variable &update, pues para la variable &delete es análogo).
Nota: Obsérvese que delante del path relativo a la imagen aparece el símbolo “!”. No le dé importancia. Se
utiliza para la herramienta de Traducción (Application Localization), para evitar que el literal que le siga sea
traducido.
Como ya mencionamos la herramienta Patterns define el tipo enumerado TrnMode y es por ello que no
aparece ‘UPD’ directamente sino su descripción [Link].
334