Un caso: Usando el patrón ShowDuoGrid

Plex viene provisto de un amplio repositorio de patrones de diseño listos para su uso, yendo desde los más primitivos hasta grandes bloques de código enfocado a un uso específico. Si nos tomamos el trabajo de examinar cada uno de ellos, escalando su herencia hasta sus orígenes, encontraremos que parten de pocos elementos primitivos, que añaden complejidad por herencia y combinación, con código de especialización en las sucesivas capas. Es decir; es absolutamente posible construír un repositorio completo de patrones de diseño totalmente distinto que el ofrecido, ya sea porque el dominio del problema es nuevo, o porque estemos unteresados en otra forma de resolverlo. Aunque, dado el repositorio existente, es difícil que eso sea necesario. Un caso de conformación de un conjunto de patrones radicalmente distinto, es Websydian, orientado a servir como páginas Web exclusivamente.

Un caso simple y útil, es el del patrón ShowDuoGrid, destinado a manejar la presentación de dos entidades en una sola ventana, de manera que ambas interactúen. Es una ventana fácil de manejar para presentar relaciones Padre-Hijo. (Existen otras a propósito de esto heredando a nivel de entidad). En este caso, se usará para mostrar un pago en cheque, y todas las operaciones pagadas con él. Una grilla mostrará una lista de cheques pagados, y seleccionando un cheque, vermos en otra grilla el detalle de sus pagos.

ShowDuoGrid resulta de la combinación de dos patrones más simples: Grid y Grid2, que a la vez usan el acceso a DataAccess.

El patrón antes de usarlo, apariencia de la ventana: la ventana ShowDuoGrid, no heredada ni reemplazada

Esta es su definición a nivel de Triples (o tripletas). Así esta declarada en el modelo, asociada a dos Large Properties: El Diagrama de Acción, con la lógica, y el Panel. A esta descripción simple, le vamos a hacer cambios por reemplazo, luego de heredar el patrón.

Definición del patrón por medio de triples

Primero: Modificar la definición

Creamos nuestra función heredando del patrón, mediante un triple "is a...UISTYLE/ShowDuoGrid". Vemos dos triples replace. Los triples de reemplazo permiten cambiar el uso de un patrón por otro. En este caso, se trata de reeplazar el patrón abstracto de acceso a datos de Uistyle.Fetch y UIStyle2.Fetch, por las funciones de lectura de datos de las entidades que deseamos exponer, en este caso los Fetch de Movimientos de Fondos Remun, y Mov Fdos Remun Suc. Estos, a su vez, fueron construídos heredando independientemente de Storage.Relational Database. En este caso, existe una raíz común directa en la herencia. Sin embargo, es posible hacer este tipo de operaciones con patrones que tengan pocos puntos en contacto. Esto es todo. No es necesario hacer otras operaciones a nivel del editor de modelo para emplear el patrón en nuestra función. Sólo restan dos tareas: 1, Modificar la presentación de la ventana de acuerdo a nuestra necesidad, lo que incluye ubicar las grillas, agregar botones, eventos, y cualquier otro elemento de presentación. 2, Modificar el diagrama de acción, para que ejecute la lógica que querramos aplicar.

Triples de herencia del patrón

Segundo: Modificar el diagrama de acción

En lo fundamental, los cambios que debemos hacer en el diagrama de acción son pocos, ya que la herencia nos facilita el trabajo: la mayor parte del trabajo de recuperación de datos ya está hecha, y la reutilizamos. Los cambios se agregan en los puntos de edición, y básicamente se trata de enlazar las dos grillas, y las dos entidades. Las llamadas a las rutinas de carga de las grillas son suficientes para que el mecanismo funcione. El código modificado aparece en azul

Cambios en el diagrama de acción

Luego hay que modificar la selección de filas. Para eso, hay que agregar una llamada a la lectura de filas de la segunda entidad, pasandole los datos de la fila "padre" que se está leyendo en la primera grilla.

Cambios en el diagrama para la selección de filas

La clave de que el número de cambios en la lógica sean pocos, está en declarar las estructuras de datos adecuadas en el diagrama de acción. En este caso, las variables PositionGrid y PositionGrid2, contienen las claves de acceso a los datos de las dos entidades, y no requieren ser definidas, ya que están incluídas en el patrón usado. La variable Restrict está definida, pero debe incluírse "a mano", la restricción a la clave del padre, al momento de ir a buscar los datos hijos (Grid2)

Definiciones de datos en variables

El resultado final

Aquí vemos la función "en acción", con el la presentación que se decidió dar al panel.

La función terminada