Introduccin
El mdulo Codgen-gvHidra de MOSKitt proporciona la generacin semi-automtica de aplicaciones gvHidra. Hablamos de generacin semi-automtica para indicar que el cdigo de la aplicacin gvHidra que se obtiene tras la generacin deber ser completado por los desarrolladores. Desde una visin global, la generacin consiste en un conjunto de transformaciones de modelos hasta llegar al cdigo final.
Arquitectura y modelos
Una aplicacin web sigue una arquitectura N-Capas, cuyos componentes, de forma genrica, son: Capa de Presentacin Capa de Lgica de Negocio (puede incluir servicios). Capa de Persistencia de Datos (puede incluir una capa de gestin de los datos). Especificar una aplicacin web consiste en especificar cada uno de estos componentes. En la siguiente figura se muestran qu modelos son necesarios para especificar cada uno de ellos:
Figura 1.1.
Las aplicaciones gvHidra por ser aplicaciones web seguirn el esquema anterior. En gvHidra se implementa una arquitectura N-Capas concreta como es la que define el patrn MVC (Modelo/Vista/ Controlador). El Modelo maneja el comportamiento y las estructuras de datos que maneja la aplicacin. La Vista es la capa de presentacin que proporciona al modelo una interfaz con el usuario. El Controlador responde a eventos, usualmente acciones que el usuario invoca desde la vista y las traslada al modelo convirtindolas en solicitudes compresibles por ste.
Figura 1.2.
Siguiendo este esquema, los modelos necesarios para especificar una aplicacin en gvHidra y que por tanto sern la entrada del generador de cdigo en MOSKitt son: Modelo UML2 Modelo de BD (Base de Datos). Modelo Sketcher + Modelo UIM (User Interface Model)
MOSKitt: Generacin de cdigo gvHidra El responsable de construir todos estos modelos es el analista/diseador, sin embargo, el principal consumidor del cdigo que se obtiene como resultado es el desarrollador, que es quien deber completarlo. Es por tanto muy importante que el desarrollador reciba todo el soporte necesario para explorar los modelos e identificar qu partes del cdigo generado son las que deber completar. A continuacin se detalla cada uno de ellos.
Modelos principales
En el modelo UML2 se especifica principalmente el Modelo: la lgica del negocio y las estructuras de datos que deben ser persistidas en el sistema en la Base de Datos representado por el modelo de BD. En el modelo Sketcher se especifica principalmente el aspecto que tiene la Vista y parte de su relacin con el Modelo a travs de sus referencias al modelo UML2. La informacin correspondiente al Controlador se define a caballo entre los modelos Sketcher y UIM. A travs del Sketcher se puede deducir un modelo inicial UIM y, para comportamientos por defecto del framework, el analista no necesita especificar nada ms en l. La especificacin en el Sketcher se hace partiendo de las plantillas de la Gua de Estilo de la CIT, las cuales ya estn modeladas y listas para ser utilizadas por los analistas. El comportamiento bsico del Controlador y la Vista asociado en gvHidra a las plantillas est incorporado directamente en el generador de cdigo que es quien sabe interpretarlas. De este modo, si el framework gvHidra evoluciona haciendo que las mismas plantillas tengan alguna variacin en su interpretacin, dar lugar a una nueva versin del generador. Sin embargo, la definicin de las plantillas slo cambiar cuando lo haga la gua de estilo. Si el analista necesitase especificar cambios en el comportamiento que por defecto tiene asociado el framework a cada plantilla, deber hacerlo en el Sketcher o en UIM segn el caso, siguiendo las normas establecidas por la metodologa que use la organizacin en cada caso. Estos cambios sern implementados ms tarde por los desarrolladores a partir del cdigo obtenido del generador.
Otros modelos
MOSKitt da soporte a una estrategia de generacin de cdigo siguiendo DSDM (Desarrollo de Software Dirigido por Modelos). En esta aproximacin, los modelos dejan de ser slo documentacin para convertirse en piezas fundamentales en la generacin de cdigo. Unos modelos son transformados en otros hasta alcanzar en cdigo final.
Figura 1.3.
Por tanto, la generacin de cdigo es una transformacin ms, la cual, como el resto de transformaciones MOSKitt puede configurarse para que el resultado se adece a las necesidades de
MOSKitt: Generacin de cdigo gvHidra cada aplicacin (por ejemplo, se deber indicar qu partes se quieren transformar, con qu cadena de conexin, con qu modelos, etc...). Cada vez que se lanza una transformacin en MOSKitt, quedan trazados los modelos de entrada y de salida. Esto significa que se crear un modelo de trazas (un fichero con la extensin .gvtrace) que permitir a MOSKitt navegar entre todos aquellos modelos que estn trazados (por ejemplo, entre el modelo de UML2 y el de DB permitindole saber una determinada clase en qu tabla se ha transformado, etc...). En concreto, esta transformacin necesita que estn disponibles las trazas entre los modelos: UML2 y DB Sketcher y UIM Conviene saber esto ltimo para entender todos los artefactos que intervienen en la generacin y tener la precaucin de que todos ellos estn presentes en el proyecto del cual se va a generar el cdigo.
MOSKitt: Generacin de cdigo gvHidra encontrarse la ayuda completa, en este manual vamos a hacer un pequeo repaso al exponer el caso de estudio.
MOSKitt: Generacin de cdigo gvHidra Siguiendo el argumento expuesto en el punto relativo a Arquitectura y Modelos, el diagrama anterior indica que el analista debe especificar los modelos UML2, de Base de Datos (BD) y Sketcher. A partir del modelo de BD, el analista generar los Scripts DDL que lanzar a travs de un cliente de SQL (tambin disponible en MOSKitt) para construir el esquema de la base de datos de la aplicacin. Para que la especificacin de la interfaz de usuario realizada con el Sketcher est completa, debe relacionarse con los elementos del modelo UML2. De este modo, el Analista puede expresar aspectos como son: qu propiedades de las clases se van a mostrar/editar desde la interfaz y qu mtodos del negocio van a ser invocados desde sta. Una vez especificados los tres modelos, se lanzar la generacin de cdigo inicial de la aplicacin gvHidra. El generador, a partir de la informacin que va leyendo del sketcher1completa la informacin que necesita. Esto es debido a que el generador, a partir del Sketcher puede alcanzar el modelo de UML2 y desde este a su vez, obtener el de Base de Datos. Esto es posible debido a que todos los modelos en MOSKitt estn relacionados entre s de dos modos distintos: De forma explcita: El usuario explcitamente establece la relacin entre los modelos (es el caso de Sketcher y UML2). De forma implcita: a travs de un modelo de trazas que se genera cada vez que se lanza una transformacin. Este modelo MOSKitt indica en qu elemento se ha convertido cada elemento del modelo origen tras la transformacin (es el caso de UML2 y BD).
Una vez creada la base de datos, el cdigo generado puede ser desplegado en el entorno de desarrollo que los desarrolladores puedan completarlo. Para hacerlo, necesitarn la documentacin que le proporciona MOSKitt: Informe obtenido a partir del Sketcher que detalla el contenido de cada una de las interfaces (pantallas/informes) previstas en la aplicacin, relacionandolas con el resto de los modelos. Los propios modelos realizados por el analista: Modelo de UML2.
1
El generador tambin usa la informacin del modelo UIM (User Interface Model), aunque esto es transparente al usuario.
MOSKitt: Generacin de cdigo gvHidra Modelo de Base de Datos. Modelo de Sketcher. Modelo de UIM (opcionalmente). En muchas ocasiones las cosas no se empiezan de cero y se dispone ya de un esquema de bases de datos inicial que puede servir de base en el anlisis. A partir de la Base de Datos fsica es posible obtenerlo por ingeniera inversa y, a partir de este modelo de Base de Datos, mediante la transformacin DB2UML2 obtener un modelo UML2 que servir como base para iniciar el anlisis. En los siguientes puntos pasamos a revisar cada una de las tareas descritas en el punto anterior. Lo vamos a hacer siguiendo el caso de estudio de la aplicacin de facturacin.
Notese que no se han definido mtodos en el diagrama de clases. Esto es debido a que en su primera versin, la aplicacin de facturacin contendr slo los mantenimientos de todas sus entidades sin ninguna necesidad adicional: slo inserciones, modificaciones y borrados (vamos a considerar stas como operaciones bsicas). Recursos de Entrada de la tarea: Recursos de Salida de la tarea: Catlogo de Requisitos Funcionales. Los recursos que se obtendrn a la finalizacin de esta tarea son: Modelo de UML2 con las clases del sistema de facturacin (facturacion.uml).
10
La tranformacin tendr como entrada los siguientes recursos: Modelo de UML2 (facturacion.uml). Configuracin de la transformacin (facturacion_uml2db.transformationconfiguration).
11
MOSKitt: Generacin de cdigo gvHidra Recursos de salida de la tarea: Como resultado de la transformacin se obtienen los siguientes recursos: Modelo de base de datos (facturacion.sqlschema) Diagrama de base de (facturacion.sqlschema_diagram) datos
El modelo de trazas entre los elementos del modelo UML2 y los del modelo de BD (facturacion!_! facturacion!-!uml2db.gvtrace).
Recomendacin: Siempre que sea posible especificar la informacin en el modelo de UML2 o en la configuracin de la transformacin debe hacerse as. Esto permite minimizar los cambios en el modelo destino (en este caso el de base de datos) lo cual hace que sea ms sencillo mantener sincronizados los modelos. Sobre todo ms adelante, cuando cambios en los requisitos provoquen modificaciones en los modelos. De todos modos, est soportado en MOSKitt que los modelos que se obtienen como resultado de una transformacin puedan ser sincronizados de forma automtica respetando los cambios que los analistas puedan haber realizado sobre ellos (ver el apartado sobre sincronizacin de modelos en el Manual de Usuario en la ayuda de MOSKitt). Recursos de entrada de la tarea: Modelo de base de datos (facturacion.sqlschema). Diagrama de base de (facturacion.sqlschema_diagram). datos
12
MOSKitt: Generacin de cdigo gvHidra Recursos de salida de la tarea: Como resultado de la tarea se obtienen los mismos recursos pero, en su caso, modificados por el usuario: Modelo de base de datos (facturacion.sqlschema). Diagrama de base de (facturacion.sqlschema_diagram). datos
13
MOSKitt: Generacin de cdigo gvHidra 3. Si hacemos doble click sobre alguno de los ficheros .sql que se han obtenido en el paso anterior (generacin de scripts DDL) se abre en MOSKitt el siguiente editor sql:
4. A continuacin seleccionamos la conexin sobre la que queremos crear la base de datos y sobre el editor, en el men contextual seleccionamos la opcin Execute All. 5. Por ltimo, se nos abrir la vista SQL Results en la cual podremos comprobar cmo ha ido la operacin. 6. Desde la propia vista Data Source Explorer podemos tambin explarar el nuevo esquema que acabamos de crear.
14
Al finalizar el asistente, se puede ver que el diagrama que acabamos de crear ya contiene un elemento que representa el men principal de la aplicacin.
15
Desde el editor podremos completar la configuracin del men. Para ello, vamos a especificar la siguiente informacin: El nombre de la aplicacin: para ello se debe sustituir la etiqueta DEMO por FACT FACTURAS2 Los submens correspondientes a los mdulos de la aplicacin: por defecto se crean tres enlaces (widgets de tipo Men item action) . Las propiedades que se deben tener en cuenta en estos elementos para generar cada entrada del men de la aplicacin son: Texto: El valor de esta propiedad ser el texto que aparecer en el submen de la aplicacin. Imagen: El texto ir acompaado por la imagen seleccionada en esta propiedad. Ventana Destino: Indica la navegacin de la entrada del men a una ventana concreta de la aplicacin. Desde la ventana de propiedades del widget se puede seleccionar una ventana ya existente cuando las haya (con el botn ...) o bien crearla directamente (con el botn +). En las figuras que aparecen a continuacin vamos a ver cmo especificar estas propiedades en el widget (si se necesita ms informacin sobre la creacin de mens consultar el manual de usuario del Sketcher en la ayuda de MOSKitt).
16
Tarea 6.3: Cmo crear una nueva ventana accesible desde el men de la aplicacin.
Siguiendo el con el paso anterior, si decidimos crear una nueva ventana, aparece el asistente que podemos ver en la siguiente figura.
En ella podemos ver que usando este mecanismo es posible crear la ventana siguiendo dos aproximaciones distintas: Crear una ventana que se ajuste a alguna de las plantillas cargadas al crear el modelo de Sketcher (disponibles en la vista MOSKitt Artifacts Library). Crear de cero una ventana vacia. Importante: De cara a la generacin de cdigo gvHidra utilizaremos la primera aproximacin ya que, como hemos indicado anteriormente, el generador slo sabe construir ventanas definidas a partir de estas plantillas. Utilizaremos la segunda estrategia (ventana vaca) cuando tengamos que especificar una ventana que no est an soportada por el framework o su plantilla an no est disponible en el Sketcher: Siempre podremos modelar aunque no podamos generar. Ms adelante se estudiar cada una de las plantillas disponibles y se explicar el por qu de la nomenclatura utilizada. De momento, para modelar la ventana de Mantenimiento de Clientes de la aplicacin de facturacin vamos a seleccionar la primera de la lista (CIT 1C Tabular 1EI Registro) para crear una ventana Tabular-Registro de gvHidra. Esto es, una ventana que permite definir un filtro
17
MOSKitt: Generacin de cdigo gvHidra antes de lanzar una consulta, muestra los datos que obtiene como resultado en un formato Tabular (una tabla), pero al editar insertar cada uno de los elementos lo hace en formato Registro (un formulario). Una vez seleccionado la plantilla se crea la ventana como una copia de la misma y queda asignada automticamente como Ventana Destino del elemento del men que estamos editando.
En el diagrama principal del Sketcher aparece la nueva ventana con una flecha que representa el enlace entre las dos ventanas. La punta de flecha indica el sentido de la navegacin. Para cada ventana es recomendable especificar las siguientes propiedades: Id: La primera generacin de cdigo utiliza esta propiedad para definr el nombre de los archivos generados (archivos correspondientes a las vistas, las clases manejadoras etc....).
Si abrimos la ventana que acabamos de crear (haciendo doble click sobre la imagen que la representa en el diagrama principal) podemos ver que en este caso3 consta de tres paneles: Panel de Bsqueda. Panel de Consulta. Panel de Edicin/Insercin.
3
18
En estas imgenes se puede observar que tanto el panel de bsqueda como el de edicin/insercin se representan en formato Registro (formulario), mientras que el de consulta es Tabular (contiene un elemento Tabla disponible en la paleta del Sketcher). El analista partir de esta plantilla y la completar incluyendo en ella los widgets necesarios, disponibles en la paleta del Sketcher (TextBox, CheckBox, LixtBox etc...).
19
Tarea 6.4: Cmo relacionar los elementos del Sketcher con los del Modelo UML2
Para completar la especificacin de la interfaz necesitamos enlazar muchos de los widgets con elementos del modelo de clases. De este modo el analista podr indicar: Propiedades de las clases para indicar que un determinado widget debe mostrar o permitir editar su valor. Mtodos de las clases para indicar que desde un widget (normalmente un botn) podemos invocar ese mtodo desde la interfaz. Enumerados que deben ser ofrecidos desde una lista de valores etc... Para tener acceso a los elementos del modelo de UML2 en primer lugar tenemos que cargar este modelo como un nuevo recurso para el Sketcher. Para ello, debemos hacer click con el botn derecho sobre el lienzo del Sketcher y seleccionar la opcin Load Resource del men contextual. En este momento aparecer el siguiente asistente para cargar el modelo y, haciendo uso del botn Browse Workspace... debemos buscar el modelo de clases facturacion.uml (en nuestro caso de estudio) y finalmente pulsaremos OK. A partir de este momento todos los elementos del modelo UML2 sern accesibles desde el modelo de Sketcher de la aplicacin de facturacin.
A partir de este momento todos los elementos del modelo UML2 sern accesibles desde el modelo de Sketcher de la aplicacin de facturacin y podremos completar las propiedades necesarias de los elementos de cada panel.
En la imagen anterior se muestran las propiedades de un campo de texto. Para cada elemento debemos dar valor a las siguientes propiedades: Id: Identificador del widget (normalmente por claridad se indica el nombre de la propiedad de UML2 con la que se relaciona).
20
MOSKitt: Generacin de cdigo gvHidra Elemento Modelo: muestra con qu elemento del modelo de UML2 se relaciona el widget. Ruta Elemento Modelo: indica cmo se debe navegar en el modelo UML2 para alcanzar la informacin a mostrar. Vamos a ver su utilidad con un ejemplo: Si selecciono la propiedad nif de la clase Cliente estaremos indicando que en la interfaz se van a mostrar todos los clientes y, para cada uno de ellos su nif. Sin embargo, si selecciono la misma propiedad, pero navegando desde la clase factura (a travs de la asociacin que tengo definida), estar indicando que lo que voy a mostrar es slo el nif del cliente de la factura. Para ms informacin sobre todos los elementos disponibles en la paleta del Sketcher y sus propiedades consultar el manual de usuario del Sketcher en la ayuda de MOSKitt.
Otros elementos personalizables son las etiquetas (Label), ttulos de las ventanas, botones, etc...Todo eso se ver con ms detalle en su apartado correspondiente (para ms informacin sobre todos los
21
MOSKitt: Generacin de cdigo gvHidra elementos disponibles en la paleta del Sketcher y sus propiedades consultar el manual de usuario del Sketcher en la ayuda de MOSKitt). En la siguiente figura podemos ver el panel de edicin/insercin el cual se visualiza en formato Registro (un formulario):
En l, la especificacin de los campos de texto se completa del mismo modo a como lo hemos hecho en el Panel de Bsqueda para indicar los campos del filtro:
Por ltimo, nos faltara especificar el Panel de Consulta el cual tiene un formato Tabular (contiene una tabla). En este caso, las columnas de la tabla adems de las propiedades que tienen los campos de texto, tienen la propiedad Texto, que determina la cadena que se debe mostrar como cabecera de la misma en la aplicacin (en el ejemplo NIF, Nombre, Apellidos y Telfono). Para ms informacin sobre todas y cada una de las propiedades de los widgets consultar el Manual de Usuario del Sketcher en la Ayuda de MOSKitt.
22
Podemos ver la propiedad Texto que aparece en estos elementos para indicar el ttulo de la cabecera de la columna:
Del mismo modo que hemos completado la ventana de Mantenimiento de Clientes iremos completando el resto de ventanas, seleccionando para cada caso, la plantilla de la gua de estilo correspondiente: Mantenimiento de Productos segn la plantilla CIT 1CEI_Tabular. Alta masiva de Productos segn la plantilla CIT 1I AltaMasiva. Mantenimiento de Facturas segn la plantilla CIT MD (Maestro Detalles).
23
MOSKitt: Generacin de cdigo gvHidra El modelo de Base de Datos trazado con el de UML2. En la mayora de los casos el analista slo definir el modelo del Sketcher y el de UIM lo generar de forma automtica lanzando una transformacin especfica para ello: Sketcher2UIM. Para hacerlo nos tenemos que situar sobre el modelo de Sketcher (facturacion.sketcher_diagram) y en el men contextual seleccionar el submen MOSKitt Transformations/Sketcher to UIM (para ms informacin sobre la transformacin ver Manual de Usuario en la ayuda de MOSKitt). Al completar el asistente aparecen tres archivos nuevos en el proyecto, el modelo y diagrama de UIM, y el modelo de trazas entre UIM y Sketcher. Recursos de entrada de la tarea: Recursos de salida de la tarea: Modelo de (facturacion.sketcher_diagram). Sketcher
Como resultado de la transformacin se obtienen los siguientes recursos: Modelo de UIM (facturacion.uim). Diagrama de UIM (facturacion.uim_diagram). Modelo de trazas entre el modelo de Sketcher y el modelo de UIM generado (facturacion!_!facturacion!-! sketcher2uim.gvtrace).
En el siguiente apartado se va a explicar el por qu de la existencia del modelo UIM y su relacin con el modelo Sketcher en la especificacin de la Interfaz de Usuario.
24
MOSKitt: Generacin de cdigo gvHidra UIM no es ambigo como sucede con cualquier descripcin textual, por tanto UIM puede ser procesado con el generador y, por este motivo, todo aquello especificado en UIM es susceptible de ser incorporado antes o despus en la generacin de cdigo.
Sin embargo, una vez hayamos terminado de "pintar" la interfaz nos daremos cuenta de que nos hace falta decir algunas cosas ms. Es decir, si como analistas, le pasamos una interfaz "pintada" con el Sketcher a uno de nuestros desarrolladores, estamos seguros de que les tendremos que dar ms informacin para que puedan desarrollar de esa pantalla o informe. Algunas de las cosas que tendremos que decirles son: Esta interfaz se ajusta a alguna plantilla de gvHidra? Cada text box, qu propiedad de qu clase o, lo que es lo mismo, qu campo de qu tabla tiene que mostrar y/o permitir editar?. Todos los campos son siempre editables?. Un botn de la interfaz a qu metodo de negocio debe invocar? cuales son sus parmetros de entrada? dnde debe mostrar el resultado si tiene parmetros de salida? Seleccionar un determinado valor en una lista tiene algn comportamiento asociado en la interfaz? etc...
25
MOSKitt: Generacin de cdigo gvHidra Bueno, pues estos son los tipos de cosas que puedo decir con UIM y que habitualmente no se puede decir en un simple "pintador". No obstante, Sketcher no es un simple pintador sino que ha sido diseado para que haga de puente entre el usuario y UIM. Cmo?, permitindo especificar desde Sketcher algunas de estas caractersticas, ms propias de UIM para facilitar de este modo al analista el uso de UIM (de hecho, en muchos casos puede incluso obviarlo). Cul es la informacin propia de UIM que ya puedo adelantar desde el Sketcher?. Principalmente la siguiente: A qu plantilla de gvHidra se debe ajustar mi interfaz. El valor de qu propiedades muestro en los widgets y debo permitir editarlos. Qu mtodos de negocio invoco desde la interfaz (normalmente al pulsar un botn). Qu widgets son editables/visibles/obligatorios siempre. Qu widgets son editables/visibles/obligatorios para cada operacin (en la insercin, borrado, edicin etc...). Navegacin entre ventanas. Entonces.... para qu quiero UIM?. UIM es necesario porque es quien realmente aporta todos los conceptos necesarios para especificar una interfaz de usuario: su estructura y su comportamiento. Aunque mucha de la informacin necesaria ya se ha dicho en Sketcher, no es suficiente, lo podis comprobar revisando el campo Descripcin de muchos de los elementos del Sketcher. Si en este campo hay informacin relativa al comportamiento de la interfaz pensad que esta informacin podra especificarse en UIM. An as, podemos generar aplicaciones sin que el usuario tenga que llegar a abrir un modelo UIM. Recursos de entrada de la tarea: Modelo de UIM (facturacion.uim). Diagrama de UIM (facturacion.uim_diagram). Recursos de salida de la tarea: Como resultado de la tarea se obtienen (si procede) los mismos recursos pero actualizados por el usuario: Modelo de UIM (facturacion.uim). Diagrama de UIM (facturacion.uim_diagram).
26
MOSKitt: Generacin de cdigo gvHidra Podemos lanzar la transformacin desde el modelo de Sketcher. Para ello, sobre el modelo (facturacion.sketcher_diagram) seleccionamos del men contextual el submen MOSKItt Transformations y de ste seleccionamos la opcin Generation of a gvHidra aplication (v.3.1.0). El asistente pide como parmetros de entrada los modelos Sketcher, UIM y una carpeta donde dejar el cdigo generado:
A continuacin se muestra la siguiente pgina en el asistente para seleccionar qu transformaciones quiero lanzar. En principio vamos a dejar ambas opciones marcadas y ms adelante explicaremos cmo funciona la transformacin para comprender mejor esta pgina.
De nuevo, por ser una transformacin MOSKitt es configurable. Es ms, en este caso siempre debemos configurarla para indicarle al menos la cadena de conexin a la base de datos donde residen los datos de la aplicacin (esto ltimo implica que para esta transformacin, no hay una configuracin por defecto satisfactoria y el usuario siempre deber crear una).
27
MOSKitt: Generacin de cdigo gvHidra El editor de configuracin nos muestra los patrones de configuracin para cada elemento configurable del modelo (ver manual de usuario de la transformacin en la Ayuda de MOSKitt para ms detalles). Vamos a explicar aqu brevemente cada uno de los patrones a configurar: Use Debug. Copy gvHidra Framework Files. Use Database. Apply Custom. Use Debug: permite configurar cadena de conexin a la base de datos y el nivel de debug interno de la aplicacin gvHidra (LOG_ALL, LOG_NONE, LOG_AUDIT, LOG_ERRORS). Para ms informacin sobre cuando es posible activar el nivel de debug consultar el manual de gvHidra.
Copy gvHidra Framework Files: Indica si el cdigo generado debe incluir el cdigo del ncleo del framework gvHidra o slo se debe generar el cdigo especfico de la aplicacin. Al menos la primera vez que se genera la aplicacin es necesario tenerlo activado. Si no se van a utilizar informes en la aplicacin, se puede desactivar el check que aade las libreras de jasper. Para ms informacin consultar los manuales de gvHidra y de Jasper Reports.
Use Database: permite indicar el modelo de Base de Datos que se debe tener en cuenta en la generacin.
28
MOSKitt: Generacin de cdigo gvHidra Vamos a explicar brevemente por qu hace falta incluir este dato si, como hemos dicho antes, el modelo UML2 y el de BD estn relacionados por medio de las trazas: A partir del modelo de Sketcher inicial podemos alcanzar el modelo de UML2 pues estos han sido relacionados explcitamente por el usuario. Ahora bien, a partir del modelo de UML2 es posible que el usuario haya decicido lanzar la transformacin UML2DB muchas veces (por probar o por el motivo que sea), dando lugar a varios modelos de BD y a sus correspondiente trazas. Para evitar ambigedades con respecto a cual de ellos es el definitivo, MOSKitt le pide al usuario que sea l quien lo determine. Para seleccionar el modelo de base de datos, lo primero que hay que hacer es cargar el recurso pulsando el botn
Una vez cargado el recurso hay que navegar al final del panel y completar la propiedad Source Database Model.
Apply Custom: Las aplicaciones gvHidra tienen asignado un tema o customizacin en el que se especifica la apariencia de la aplicacin entre otros aspectos (para ms informacin sobre los Custom consultar documentacin del framework gvHidra). Si se dispone de un custom personalizado se deber indicar como parmetro en este patrn.
29
MOSKitt: Generacin de cdigo gvHidra Por ltimo, cada una de las ventanas creadas se puede configurar para indicar si se desea que sean o no generadas (por defecto, estar configurado para que se generen). Sobre todo en generaciones posteriores, tal vez no interese que el generador vuelva a generar cdigo que ya est terminado e incluso ya en produccin.
Una vez completada la configuracin podemos completar la transformacin (desde el botn Execute Transformation que aparece en el editor de configuracin). Una vez terminada la generacin, el asistente indica si todo ha ido bien o los errores ocurridos en su caso. En caso de error, la generacin se detiene debe comprobarse que los modelos cumplen con los requisitos que exige el generador de cdigo (ver ms adelante en este manual la seccin que trata sobre que propiedades deben cumplir los modelos de entrada para que los sepa interpretar el generador).
Otros escenarios (Tarea 1b): Cuando al empezar ya tenemos una Base de Datos
Volvemos ahora un poco al principio de la seccin 3 en la que estamos describiendo cada uno de los pasos que se deben seguir para generar aplicaciones con MOSKitt. Hasta ahora hemos visto un camino en el proceso en el que al empezar no tenamos nada y empezbamos de cero a definir los modelos. Sin embargo, pueden haber otro escenarios. En muchos casos es habitual disponer de una base de datos inicial a partir de la cual podemos llegar a obtener un modelo UML inicial para nuestro anlisis. En este escenario los pasos a seguir para conseguir este modelo UML2 sern:
30
MOSKitt: Generacin de cdigo gvHidra 1. Obtener el modelo de BD a partir de Ingeniera Inversa de la Base de Datos fsica. 2. Lanzar la transformacin BD2UML2 para obtener el modelo de UML2 inicial.
Nota: El nombre de las tablas es el que tienen en la base de datos, que en este caso incluyen un prefijo comn.
31
Transformacin DB2UML : Obtener un modelo UML2 a partir del modelo de base de datos
A partir de un modelo de base de datos hay que construir un modelo de clases UML2. Esto se har automticamente a partir de la transformacin de Base de datos a UML2 (DB2UML) (Ver Manual de Usuario para ms detalles acerca de la transformacin). Como resultado se obtienen dos modelos, uno UML2 y otro que contiene las trazas entre los modelos de base de datos y UML2. Atencin!, el modelo de trazas puede estar oculto. El modelo UML2 ser el utilizado para el anlisis de la aplicacin, mientas que el de base de datos y el de trazas son dispensables.
32
MOSKitt: Generacin de cdigo gvHidra Al pulsar el botn Login accederemos al men principal de la aplicacin de facturacin que aparece en la figura siguiente. En ella se podemos ver a la izquierda el men relativo a los Mdulos principales de la aplicacin con las entradas que nos llevan a las pantallas que han sido definidas con el Sketcher (Mantenimietno de Clientes).
En el ejemplo anterior se ha creado una ventana Tabular-Registro de tres paneles, y es lo que debe aparecer al pulsar en el enlace Mantenimiento Clientes. La pantalla de entrada es el filtro de la ventana.
Al pulsar el botn Buscar se visualiza el listado de datos que cumplen los requisitos especificados. En este ejemplo se muestran datos porque la base de datos ya exista antes de empezar con el anlisis.
33
Al pulsar el botn guardar se vuelve a visualizar el listado de clientes, que ahora incorpora los datos del nuevo.
34
35
MOSKitt: Generacin de cdigo gvHidra La localizacin y el tamao del elemento vendr dada por las coordenadas X e Y y su tamao dentro del panel. No obstante, existen propiedades en el Sketcher para modificar y forzar estos valores a los que considere el usuario.
Proteccin del cdigo: Estrategias utilizadas por MOSKitt para respetar los cambios realizados por el desarrollador.
Uno de los principales temas a resolver cuando se genera cdigo de forma automtica es el tratamiento de las modificaciones manuales que ha realizado el desarrollador cuando, debido a cambios en los modelos, debemos regenerar el cdigo. Como hemos dicho al principio del manual, MOSKitt proporciona una generacin semi-automtica de cdigo, lo cual implica que en la mayora de los casos, los desarrolladores debern completar el cdigo para terminar la aplicacin. En la gran mayora de los casos, stos cambios deben mantenerse a la vez que se debe incorporar en el cdigo los cambios originados por los cambios en el modelo. Para hacer esto, MOSKitt utiliza dos tcnicas diferentes.
Tal y como puede verse en la figura anterior, la clase manejadora ahora se convierte en tres clases:
36
MOSKitt: Generacin de cdigo gvHidra La ClaseManejadora_SK: Extiende a la clase manejadora gvHidra_Form_DB que proporciona el framework (contiene el comportamiento general de un mantenimiento comn inserciones, modificaciones y borrados- contra un SGBD relacional). Contiene al contructor de la clase manejadora y gestiona principalmente la informacin de la base de datos que maneja la ventana y establece el matching entre los campos de la tpl y los de la base de datos. La ClaseManejadora_SKUI: Extiende a la ClaseManejadora_SK. A partir de los campos definidos en la interfaz y del tipo de datos de las propiedades UML con las que se relaciona, define los tipos de datos para cada panel de la ventana. Estas dos clases son siempre generadas por MOSKitt y por tanto, no deben ser modificadas por el desarrollador gvHidra, quien slo modificar: La ClaseManejadora propiamente dicha: extiende a la ClaseManejadora_SKUI. En ella se sobrescribir todo aquello que considere oportuno el desarrollador para incluir lo que no haya podido ser generado por MOSKitt (se asignan/modifican las propiedades de la clase y se definen los mtodos de la misma). Las clases manejadoras estn localizadas dentro de la carpeta actions, en una subcarpeta que toma el nombre de la propiedad Id de la Ventana. Destro de esta carpeta encontraremos siempre una carpeta denominada skeleton que contendr las clases manejadoras que no deben ser modificadas: ClaseManejadora_SK y ClaseManejadora_SKUI.
37
/************************************************************/ /* Fin de la zona protegida */ /************************************************************/ /*PROTECTED REGION END*/ Las lneas con la palabra PROTECTED marcan el inicio y el final del bloque. La cadena que se encuentra encerrada entre los parntesis de ID es el identificador de la zona. Nunca se debe modificadar manualmente.
38
MOSKitt: Generacin de cdigo gvHidra 2. Activacin y desactivacin de las zonas protegidas La palabra ENABLED indica que la zona debe protegerse. Si se quita esa palabra, la zona se reescribir con lo generado. Por norma general, en una primera generacin las zonas en las que el generador haya necesitado incluir cdigo aparecern desactivadas y aquellas en las que no haya incluido nada estarn activadas. El desarrollador podr activar/desactivar las zonas protegidas a su conveniencia. 3. Identificadores de las zonas protegidas. Cada zona protegida estar etiquetada por un cdigo nico que la identifica. Este cdigo se contruye basndose en el identificador de los objetos que determinan su contenido. Estos identificadores no pueden ser modificados por los usuarios y el generador los mantiene de una generacin a otra. En la zona protegida que aparece en el punto ID(preIniciarVentana__c7GjUIBSEeCc2cs1bFJTkw_PIU). 1, el identificador es:
Cmo tengo que definir mis modelos para que los entienda el generador?
Este punto del manual est dirigido a aquellos analistas que estn modelando sus aplicaciones con la intencin de generar la mayor cantidad de cdigo gvHidra posible con MOSKitt. Con este objetivo vamos a describir cmo deben ser los modelos de entrada de la transformacin para obtener el mximo partido a la generacin de cdigo ya que hemos de ser conscientes de que el generador espera que los modelos de entrada estn definidos de una forma muy concreta.
39
40
MOSKitt: Generacin de cdigo gvHidra El nmero de paneles que incluye el patrn: uno para todas las operaciones, uno para la consulta y otro para la insercin/edicin etc.... (1CEI, 1C1EI, etc...) El patrn de visualizacin que utilizan para mostrar los datos (Tabular o Registro).
As tendremos las siguientes plantillas de patrones simples: Plantilla Sketcher CIT Menu Principal Plantilla gvHidra Men Consulta Tabular Registro Tabular Edicin Tabular Registro Registro Tabular Registro Registro Registro Insercin
CIT 1CEI Tabular Tabular CIT 1CEI Registro Registro CIT 1C Tabular 1EI Registro CIT 1I Tabular - Registro Alta Masiva
En la siguiente figura vemos algunos ejemplos que aclaran la nomenclatura de las plantillas:
Las plantillas simples se pueden combinar para construir otras ms complejas, este es el caso de los patrones Maestro/Detalle: Plantilla Sketcher CIT MD Plantilla gvHidra Maestro Detalle Consulta Maestro Tabular Maestro Registro Detalle Registro Detalle Tabular Edicin Maestro Tabular Maestro Registro Detalle Registro Detalle Tabular Insercin Maestro Tabular Maestro Registro Detalle Registro Detalle Tabular
41
MOSKitt: Generacin de cdigo gvHidra Plantilla Sketcher Plantilla gvHidra Consulta Detalle Tabular CIT MnD Maestro N Detalles Maestro Tabular Maestro Registro Detalle Registro Detalle Tabular Detalle Tabular Edicin Detalle Registro Maestro Tabular Maestro Registro Detalle Registro Detalle Tabular Detalle Registro Insercin Detalle Registro Maestro Tabular Maestro Registro Detalle Registro Detalle Tabular Detalle Registro
A continuacin tenemos una breve descripcin de cada uno de los patrones: CIT Men Principal: incluye una ventana para el patrn Men. CIT 1C 1EI TabularRegistro: incluye una ventana para el patrn 1C1EI con representacin en formato Tabular para la Consulta y en formato Registro para Edicin e Insercin. CIT 1CEI Registro: incluye una ventana para el patrn 1CEI con representacin en formato Registro para Consulta, Edicin e Insercin. CIT 1CEI Tabular: incluye una ventana para el patrn 1CEI con representacin en formato Tabular para Consulta, Edicin e Insercin. CIT Alta Masiva: incluye una ventana para el patrn 1I. Solamente implementa la parte de Insercin. CIT MD: incluye una ventana para el patrn MD. Por defecto, el Maestro sigue un patrn 1CEI Registro, y el Detalle un patrn 1C 1EI Tabular Registro. CIT Men Principal: incluye una ventana para el patrn Men. CIT MnD: incluye una ventana para el patrn MD, con n Detalles (por defecto 2). Por defecto, el Maestro sigue un patrn 1CEI Registro, y el Detalle un patrn 1C 1EI Tabular Registro (los 2). Para ms informacin sobre el comportamiento de los patrones de la Gua de Estilo consultar en la Ayuda de MOSKitt el "Uso de los patrones de la Gua de Estilo de la CIT con UIM" o el Manual de gvHidra.
Cmo reconoce el generador los elementos que contienen las plantillas?: Etiquetas
La pregunta que nos tenemos que hacer ahora es: Cmo reconoce el generador las plantillas?: Por su nombre? Porque comprueba su contenido y lo deduce? Por.....? El generador reconoce tanto las plantillas como los elementos que las componen gracias a un conjunto de etiquetas (tags) que funcionan a modo de palabras reservadas. Gracias a estos tags el generador asume ya una estructura y un comportamiento concreto en cada elemento, lo cual le permite tambin validar los modelos de entrada que recibe. Las etiquetas se pueden consultar en la pestaa de propiedades de cada elemento, subpestaa Tags.
42
Cada tipo de elemento tiene un conjunto de tags aplicable a l. A continuacin podemos ver algunos ejemplos de tags aplicables a elementos de tipo Window: Ventana_1CEI_Registro: etiqueta a la plantilla 1CEI_Registro. Ventana_1CEI_Tabular: etiqueta a la plantilla 1CEI_Tabular. Ventanta_1C_1EI: etiqueta a la plantilla 1C_1EI. Ventana_1I_AltaMasiva: etiqueta a la plantilla 1I_AltaMasiva. Ventana_MD: etiqueta a la plantilla MD. Ventana_MenuPrincipal: etiqueta a la plantilla MenuPrincipal. Ventana_MnD: etiqueta a la plantilla MnD. Las etiquetas aplicables a un elemento TabPanel seran: Rol_Maestro: etiqueta al panel que se corresponden con el maestro en una plantilla MaestroDetalle. Rol_Detalle: etiqueta al panel que se corresponden con el detalle en una plantilla MaestroDetalle. Rol_nDetalle: etiqueta a un panel que se corresponde con uno de los detalles de una plantilla Maestro-nDetalles. Las etiquetas aplicables a un elemento TabItem (una pestaa) seran: Modo_Busqueda: etiqueta a la pestaa donde se muestra la el filtro a aplicar en la bsqueda. Modo_Consulta: etiqueta a la pestaa donde se muestra el resultado de la bsqueda. Modo_ConsutlaEdicionInsercion: etiqueta a la pestaa donde adems de mostrar el resultado de una bsqueda se pueden ejecutar tambin las operaciones de edicin e insercin. Modo_EdicionInsercion: etiqueta a la pestaa donde se pueden ejecutar las operaciones de edicin e insercin. Modo_Insercion: etiqueta a la pestaa donde se ejecuta la operacin de insercin. Las etiquetas aplicables a un elemento Tree View Menu son: Menu_AModulosPrincipales: para modelar el submen de mdulos de la aplicacin.
43
MOSKitt: Generacin de cdigo gvHidra Menu_AAdministracionSistema: para modelar el submen de Administracin del Sistema. Menu_AHerramientasAuxiliares: para modelar el submen de Herramientas Auxiliares.
No vamos a entrar ahora a ver todas las etiquetas que hay definidas, para ello se puede consultar este manual en la seccin de anexos. Como podemos ver, todos los elementos que deben tener en cuenta el generador est etiquetados para relacionarlos con los elementos definidos por la Gua de Estilo, lo cual les dota de significado y hace que dejen de ser simples figuras en mi diagrama.
Importante: Para tener acceso a las Tags para gvHidra, es necesario iniciar el modelo del Sketcher con la template para gvHidra, o cargar el recurso que contiene las tags (platform:/plugin/es.cv.gvcase.mdt.sketcher.gvHidra/ models/sketcher_reusable_gvHidra.sketcher_diagram).
44
MOSKitt: Generacin de cdigo gvHidra Por ejemplo, supongamos el siguiente modelo clases para la aplicacin de facturacin:
Sin embargo, en el Mantenimiento de Clientes slo vamos a mostrar informacin de las clases que aparecen en la siguiente figura:
Este sera el submodelo de clases que interviene en la interfaz de Mantenimiento de Clientes. De todas las clases que pertenecen a cada uno de estos submodelos, siempre habr una que ser la que denominaremos Clase Principal, el resto de clases del modelo sern alcanzables desde sta y participan en la interfaz por estar relacionada con la clase principal. En ejemplo anterior, la Clase Principal es Cliente ya que en la ventana vamos a mostrar: De la clase Cliente las propiedades nif, nombre y apellidos. De la clase Cliente::Poblacion la propiedad nombre ( ojo! aqu estamos indicando: "el nombre de la poblacin del cliente" gracias a la navegacin). De la clase Clietne::Poblacion::Provincia la propiedad nombre ( ojo! aqu estamos indicando: "el nombre de la provincia de la poblacin del cliente" gracias a la navegacin). Es importante observar que NO hemos dicho lo siguiente:
45
MOSKitt: Generacin de cdigo gvHidra De la clase Cliente las propiedades nif, nombre y apellidos. De la clase Poblacion la propiedad nombre ( ojo! aqu estaramos indicando: "De todas las poblaciones, su nombre" por no indicar navegacin desde ninguna clase principal). De la clase Provincia la propiedad nombre ( ojo! aqu estaramos indicando: "De todas las provincias, su nombre" por no indicar navegacin desde ninguna clase principal). Donde indicamos la navegacin? Como ya hemos visto anteriormente al explicar cmo modelizar la interfaz de usuario con el Sketcher, esa es una propiedad asociada a cada uno de los widgets del modelo del sketcher ( propiedad Ruta Elemento Modelo).
46
Las propiedades que se deben tener en cuenta en estos elementos son: Texto: Si el botn lleva asociado un Tag el generador aplicar un texto fijo en funcin de ese tag. Si el botn no tienen ningn Tag asignado, el generador usar el texto que hayamos puesto en propiedad Texto del botn (Button). Los tags permitidos son: Accion_Buscar -> texto a mostrar Buscar. Accion_Guardar -> texto a mostrar Guardar. Accion_Cancelar -> texto a mostrar Cancelar.
47
MOSKitt: Generacin de cdigo gvHidra Imagen: Icono que se muetra en el btn (el icono deber existir en la ruta igep/images/ menu). Ventana Destino: Indica la navegacin de la entrada del men a una ventana concreta de la aplciacin. Desde la ventana de propiedades del widget se puede seleccionar una ventana ya existente cuando las haya (con el botn ...) o bien crearla directamente (con el botn +).
48
MOSKitt: Generacin de cdigo gvHidra Panel Modo_ConsultaEdicionInsercion. Panel Modo_EdicionInsercion. Panel Modo_Insercion. Para cada elemento, el generador tiene en cuenta las siguientes propiedades: Id: Identificador del widget (normalmente por claridad se indica el nombre de la propiedad de UML2 con la que se relaciona). Elemento Modelo: muestra con qu elemento del modelo de UML2 se relaciona el widget. Ruta Elemento Modelo: indica cmo se debe navegar en el modelo UML2 para alcanzar la informacin a mostrarl. Vamos a ver su utilidad con un ejemplo: Si selecciono la propiedad nif de la clase Cliente estaremos indicando que en la interfaz se van a mostrar todos los clientes y, para cada uno de ellos su nif. Sin embargo, si selecciono la misma propiedad, pero navegando desde la clase factura (a travs de la asociacin que tengo definida), estar indicando que lo que voy a mostrar es slo el nif del cliente de la factura. El generador tiene en cuenta esta informacin para establcer los Matchings, las tablas con las que se trabaja en una ventana, para generar las select y para obtener los campos que forman parte de las claves primarias y ajenas. Valor por defecto: cuando se entra en modo nuevo al panel aparece ese valor por defecto. Editable Obligatorio Visible Seleccionado (en CheckBox y RadioButton) Para las tablas, el tipo de visualizacion ser el del elemento que pongamos dentro de la celda de la tabla (Textbox,CheckBox,ListBox,ComboBox,RadioButton,DateField,TimeField,Calendar), si no existe se mostrara como un Textbox. Ejemplo: Vamos a ver un ejemplo de un Maestro-Detalle, donde tenemos: Un Filtro de Bsqueda (panel FIL en gvhidra). Un panel para el Maestro: formado por un nico panel Registro para mantener la Consulta, la Edicin y la Insercin ( panel EDI en gvhidra). Un panel para el Detalle: formado por un panel Tabular para la mantener la Consulta y otro panel Registro para mantener la Edicin e Insercin (paneles LIS y EDI respectivamente en gvhidra). Modelamos el Filtro (Panel de Bsqueda): En la siguiente figura podemos ver vemos el Panel Bsqueda (FIL), formado por dos TextBox, un Button para lanzar la bsqueda (Buscar) y un IconButton para Recargar la pgina:
49
Modelamos ahora el Maestro /Detalle: Aqu podemos ver: 1. Panel Registro para Maestro (EDI), formado por 4 TextBox, 1 GroupBox, 2 Buttons y 3 IconButton. 2. Panel Tabular (LIS) para el Detalle, formado por una tabla con 3 columnas y 3 IconButton. En la tabla, en la primera y la segunda columna no se detalla su forma de visualizacin, pero en la tercera se indica que se va a visualizar como CheckBox.
50
MOSKitt: Generacin de cdigo gvHidra Ya en ejecucin obtendramos lo siguiente como resultado de la generacin:
51
Por ejemplo, si en el panel consulta de una ventana de Mantenimiento de Clientes quisisemos ver, para cada cliente, su propiedades nif, nombre y apellidos y adems el nombre de la poblacin en la que vive deberamos definir en el Sketcher los siguientes widgets: Un Texbox para el nif enlazado con la propiedad nif de la clase Cliente del siguiente modo: Elemento Modelo=Cliente::nif (<Class>Cliente::<Property>nif) Ruta Elemento Modelo=Cliente::nif (<Class>Cliente::<Property>nif) Un Texbox para el nombre enlazado con la propiedad nombre de la clase Cliente del siguiente modo: Elemento Modelo=Cliente::nombre (<Class>Cliente::<Property>nombre) Ruta Elemento (<Class>Cliente::<Property>nombre) Modelo=Cliente::nombre
Un Texbox para los apellidos con la apellidos nombre de la clase Cliente del siguiente modo: Elemento (<Class>Cliente::<Property>apellidos) Ruta Elemento (<Class>Cliente::<Property>apellidos) Modelo=Cliente::apellidos
Modelo=Cliente::apellidos
Un Texbox para el nombre de la clase Poblacion enlazado del siguiente modo: Elemento (<Class>Poblacion::<Property>nombre) Modelo=Poblacion::nombre
Ruta Elemento Modelo=Cliente::Poblacion::nombre (<Class> Cliente :: <Association> Cliente_Poblacion :: <Class> Poblacion :: <Property> nombre). Pero, si hubiesemos definido el nombre de la Poblacion del siguiente modo: Un Texbox para el nombre de la clase Poblacion enlazado del siguiente modo: Elemento (<Class>Poblacion::<Property>nombre) Modelo=Poblacion::nombre
Ruta Elemento Modelo=Poblacion::nombre (<Class> <Property> nombre). Si se quiere mostrar la provincia del cliente es un error de anlisis.
Poblacion
::
Pero si lo que se quiere es mostrar el nombre de todas las provincia (lo cual no parece muy lgico por otro lado) deber ser el desarrollador el que ajuste la ventana. 52
MOSKitt: Generacin de cdigo gvHidra CASO3: Si entre dos clases hay una relacin 1:M (0:1----0:*, 0:1----1:* ect....), y queremos que en la ventana sea posible aplicar las operaciones de borrado/edicin/insercin a las instancias de ambas clases, se debe seleccionar un patrn Maestro-Detalle. Si no es as, el cdigo generado slo permitir establecer las referencias entre una instancia de la clase principal y una de las instancias de la clase secundaria y el desarrollador deber modificar el cdigo para que se comporte de la forma deseada. Por ejemplo: vamos a tener en cuenta las siguientes clases:
Si definimos una ventana maestro detalle (segn la plantilla CIT MD) con, por ejemplo, Factura en el Maestro y Linea de Factura en el Detalle, se generar una ventana en la que podremos dar de alta facturas y lineas en la factura, pero no podremos asociar lneas de factura ya existentes a una factura (esto no tendra mucho sentido en esta ventana pero en otros casos podra interesar hacerlo). En el panel del Maestro en el Sketcher definiremos las propiedades: Factura::numero Factura::fecha Y en el panel del Detalle en el Sketcher definieremos las propiedades: Linea de factura::numero Linea de factura::unidades El generador asume que la nica asociacin existente es la que las relaciona (ver restriccin relativa al CASO6 tambin aplicable en este caso). CASO4: En la versin 0.5.0 del generador, si entre dos clases hay una asociacin con cardinalidad M:M (1:*----1:*, *:*----1:* etc...) la ventana que se genera debe ser revisada por el desarrollador tanto para la consulta como para la edicin/insercin y borrado. Estaramos hablando de un caso como este:
Si definimos una ventana maestro detalle (segn la plantilla CIT MD) con, por ejemplo, Categoria en el Maestro y Producto en el Detalle, se generar una ventana con los widgets correspondientes pero el desarrollador deber reprogramar las operaciones de consulta, edicin, insercin y borrado. CASO5: En una jerarqua de herencia, si desde el sketcher se hace referencia a propiedades heredadas, segn cmo se haya hecho la transformacin a Base de Datos es posible que el desarrollador tenga que ajustar la query. Vamos a tomar como ejemplo la jerarqua de herencia que aparece en la siguiente figura:
53
de
El generador construir correctamente la query asociada al panel. Pero, si adems incluimos la siguiente propiedad: Cliente::sexo Por ser sexo una propiedad heredada para el Cliente, es posible que el desarrollador tenga que revisar la query construida por el generador (la pista ser que no funciona la ventana). Vamos a intentar explicar ahora en qu casos funcionar y en qu casos no. Las tres posibilidades que tenemos al transformar la herencia a tablas son:
54
MOSKitt: Generacin de cdigo gvHidra $select = 'SELECT Cliente.nif AS "lisnif_Cliente", Cliente.nombre AS "lisnombre_Cliente", Cliente.apellidos AS "lisapellidos_Cliente", Cliente.sexo AS "lissexo_Cliente" FROM Cliente'; Por tanto, slo en el caso de haber adoptado la estrategia Only Child Table estara correcta la query en el caso de incluir la propiedad Sexo en la query. Esto es debido a que el generador en su versin 0.5.0 an no recorre todas las opciones en las que puede ser transformada una jerarqua de herencia, en prximas versiones se incluir esta mejora. Mientras, el desarrollador tendr que ajustar la query a la Base de Datos incluyendo un join cuando sea necesario. Sin embargo: 1. No crea el tipo de datos para la propiedad Sexo en l a clase manejadora SKU. 2. En la plantilla, el nombre de la variable sexo siempre se forma usando el nombre de la clase padre (lissexo_persona), por lo que no coincidir con el nombre que se ha incluido en la select para la misma variable (lissexo_cliente). {CWCheckBox nombre="lisSexo_Persona" oculto="false" textoAsociado="sexo" mostrarTextoAsociado="true" $dataType_CIT1CEIRegistro.lisSexo_Persona $defaultData_CIT1CEIRegistro.lisSexo_Persona } editable="true" dataType= value=
Por lo que el desarrollador deber revisar estos tres puntos para ajustar los nombres de las variables (clase manejadora, clase manejadora SKIU y tpl). CASO6: Las clases deben slo deben estar relacionadadas por una nica asociacin. Por ejemplo, en el caso que aparece a continuacin en la figura, los desarrolladores tendran que ajustar la query: En el diagrama de clases de la figura:
Supongamos una ventana en la que definimos que queremos visualizar las siguiente propiedades del cliente: Cliente::nif Cliente::nombre Cliente::apellidos Cliente::Poblacion::nombre (navegando a la clase Poblacion a traves de la asociacin Cliente_Poblacion) Cliente::Poblacion::nombre (navegando a la clase Poblacion a travs de la asociacin Cliente_LugarNac)
55
MOSKitt: Generacin de cdigo gvHidra La query que se obtiene como resultado no es la correcta, ya que: slo tiene en cuenta una de las propiedades Cliente::Poblacion::Nombre y hay que incluir la que falte. En la clausula Select slo tiene en cuenta uno de los dos campos En la clusula Where incluye dos JOIN con la misma tabla. Vamos a ver un ejemplo de la query que se generara: SELECT Cliente.nif AS "lisnif_Cliente", Cliente.nombre AS "lisnombre_Cliente", Cliente.direccion AS "lisdireccion_Cliente", poblacion.codigo AS "lisncodigo_poblacion", poblacion.nombre AS "lisNombre_poblacion" FROM fact.Cliente LEFT JOIN fact.poblacion ON fact.Cliente.poblacion_codigo1=fact.poblacion.codigo AND fact.Cliente.poblacion_provincia_codigo2=fact.poblacion.provincia_codigo LEFT JOIN fact.poblacion ON fact.Cliente.poblacion_codigo=fact.poblacion.codigo AND fact.Cliente.poblacion_provincia_codigo=fact.poblacion.provincia_codigo CASO7: Si se define una ventana que no se ajuste a ninguna plantilla, no se generar ningn cdigo asociado (en especial se puede echar de menos la plantilla correspondiente a la Ventana de Seleccin, la cual estar disponible a partir de la versin 0.7.0 del generador). CASO8: En las ventana Maestro-Detalle la relacin entre ambos el maestro y el detalle se obtiene directamente de la asociacin que exista entre las clases principales de ambos. En el caso de que no exista una asociacin directa en el modelo de clases, el desarrollador tendr que ajustar la query: Vamos a verlo de nuevo con un ejemplo basado en el diagrama de clases de la siguiente figura:
En este diagrama podemos ver que entre Cliente y Producto no hay ninguna asociacin directa. Pues bien, si el analista quisiese modelar una ventana Maestro-Detalle para mostrar los productos que le han sido facturados a un cliente, el generador, en su versin 0.5.0 no calcula la query completa y la tendr que ajustar el desarrollador.
56
MOSKitt: Generacin de cdigo gvHidra CASO9: Igual que ocurre en el interior de un panel, en una ventana Maestro-Detalle las clases principales del maestro y del detalle estn sujetas a al escenario descrito en el CASO5 (slo una asociacin entre clases). CASO10: Cuando en un maestro detalle las clases principales del Maestro y del Detalle estn relacionadas por una asociacin M:M, el desarrollador deber ajustar la query ya que no tiene en cuenta la tabla intermedia a la que esta asociacin da lugar en la Base de Datos. CASO11: Las listas desplegables que van asociadas a una propiedad UML2 de tipo enumeracin se generan correctamente, sin embargo, la transformacin no da soporte todava a las listas desplegables dinmicas. Si el tipo de datos es una instancia de otra clase, en lugar de una lista se crear un campo de texto. No hay soporte para dependencias entre listas.
En prximas versiones
En prximas versiones del generador se van a ir abordando todos y cada uno de los casos arriba descritos para que el desarrollador tenga que revisar los menos casos posibles. Para la versin 0.7.0 est previsto abordar los casos: CASO3: Asociaciones M:M entre las clases. CASO5: Propiedades heredadas. CASO7: Ventana de Seleccin. CASO10: Maestro detalle con asociaciones M:M entre las clases principales del maestro y del detalle.
57
MOSKitt: Generacin de cdigo gvHidra Para resolverlo seguir los siguientes pasos: 1. Limpiar las plantillas: Vaciar el contenido de la carpeta templates_c. 2. Comprobar los archivos. Si se ha modificado el modelo de forma que el nombre de los archivos ha cambiado, el antiguo sigue existiendo, y contiene los cambios. En este caso hay que hacer un merge manual en el cdigo y eliminar el antiguo. Los elementos que pueden provocar esta situacin son: Id de los enlaces a las ventanas en el men principal. Id de cada una de las ventanas Vamos a intentar explicar por qu se puede llegar a esta situacin: El ID de algunos elementos del Sketcher (enlaces de las ventanas del men principal y de las ventanas) se utiliza para dar nombre a los ficheros que crea el generador (clases manejadoras, includes etc....). El valor de esta propiedad es editable por el Analista. El ID de los elementos de los modelos se utiliza para identificar las zonas protegidas del cdigo al que dan lugar. Esta propiedad la maneja MOSKitt internamente y no es modificable por el Analista. Si se da el caso en el que un analista modifica la propiedad ID de una de las ventanas y vuelve a generar, tendremos otro fichero con un nombre diferente (el del nuevo ID) pero cuyo contenido es muy probable que sea casi el mismo y seguro que contiene zonas protegidas con el mismo ID. Ah tenemos un conficto de zonas protegidas.
58
MOSKitt: Generacin de cdigo gvHidra Entre las etiquetas <custom></custom> debe estar el custom deseado. 3. El custom existe. Dentro de la carpeta igep/custom existe una carpeta con el custom de la organizacin. ERROR 2: Tras hacer login en la aplicacin sale una pantalla en blanco 1. Revisar el archivo app/gvHidraConfig.inc.xml. El ttulo contiene los caracteres correctos Comprobar que el texto encerrado en las etiquetas <applicationName></ applicationName> no excede los 10 caracteres y no contiene acentos o caracteres especiales. Valores permitidos: [A-Z][a-z] Las conexiones definidas son vlidas En las zona <DSNZone> se especifican las conexiones a la base de datos. Si se ha definido una que no existe, modificarla/comentarla/eliminarla. 2. Existe la carpeta app/templates_c. Si no existe hay que crearla con permisos de escritura. ERROR 3: Al pulsar el enlace a una ventana no se abre. La aplicacin dispone de debug de gvHidra Abrir el debug de gvHidra y consultar los ltimos eventos registrados. 1. Error en la consulta SQL Implementar la consulta en la clase manejadora app/actions/Ruta_ventana/ ClaseManejadora.php. Es posible utilizar como base la que se encuentra en el constructor de app/actions/Ruta_ventana/skeleton/ ClaseManejadora_SK.php. 2. Error en los matchings. Revisar las funciones del archivo app/actions/Ruta_ventana/ ClaseManejadora.php. Las tablas que se utilizan para especificar los matchings de dameMatchingsPanel() deben aparecer entre las que se aaden en dameTablasPanel(). 3. No hay ningn error. Abrir el archivo app/include/menuModulos.xml y localizar la entrada de men. Comprobar que la opcin tiene un valor parecido al siguiente url="phrame.php? action=ClaseManejadora__iniciarVentana". 4. No hay ningn error y el panel est bien conectado al men. Repasar el cdigo de la clase manejadora por si hay algn error de sintaxis. El debug del framework no est configurado. Nota: Si se desea configurar el debug, los pasos necesarios se enumeran en el manual de usuario de gvHidra y quedan fuera del alcance de este documento. Repasar todos los apartados del punto anterior. 59
MOSKitt: Generacin de cdigo gvHidra ERROR 4: Al entrar en una ventana en modo consulta aparece un mensaje de error en la consulta sql y no aparecen datos. Implementar la consulta en la clase manejadora app/actions/Ruta_ventana/ ClaseManejadora.php. Es posible utilizar como base la que se encuentra en el constructor de app/actions/Ruta_ventana/skeleton/ClaseManejadora_SK.php. ERROR 5: Al pulsar el botn "Buscar" de una ventana en modo bsqueda aparece un mensaje de error en la consulta sql y no aparecen datos. Implementar la consulta en la clase manejadora app/actions/Ruta_ventana/ ClaseManejadora.php. Es posible utilizar como base la que se encuentra en el constructor de app/actions/Ruta_ventana/skeleton/ClaseManejadora_SK.php. ERROR 6: En una ventana Maestro-Detalle no se muestra el detalle correctamente. 1. Revisar el padre de la clase manejadora del panel maestro app/actions/Ruta_ventana/ skeleton/ClaseManejadora_SK.php y ver si tiene definida su relacin con el hijo. Si no la tiene, revisar la clase manejadora y aadirlo manualmente. 2. En caso de ser necesario, aadir los campos que hacen de enlace entre los paneles maestro y detalle a la select y a los matchings de la clase manejadora. ERROR 7: Que el panel encontrado no sea el esperado segn la estructura del patrn elegido. En este caso vemos como dentro de una ventana que en un principio iba a seguir el patrn CIT 1CEI_Registro, que contiene un TabItem con tag Modo_ConsultaEdicionInsercion, en lugar de contener el Panel_Registro esperado contiene un Panel_Busqueda. Para que este caso funcionara, se tendra que cambiar el tag del Panel_Busqueda por el Panel_Registro.
60
ERROR 8: La ventana no sigue ninguna plantilla conocida. En este caso vemos como la ventana no sigue ninguna plantilla conocida, no contiene nign Panel ni TabPanel ni TabItems, slo elementos widgets. Para que este caso funcionara, se tendra que elegir uno de los patrones detallados anteriormente.
61
MOSKitt: Generacin de cdigo gvHidra En este caso vemos como para una plantilla CIT MD, dentro del TabPanel etiquetado como Rol_Detalle, cuando encuentro un Panel_Registro, dentro me encuentro una Tabla en lugar de elementos simples. Para que este caso funcionara, se tendra que cambiar por Panel_Tabular o borrar la tabla y pegar elementos simples.
ERROR 10: Que el panel contenga paneles no esperados. En este caso vemos como un panel Registro contiene otro panel Registro. Para que este caso funcionara, se tendra que eliminar el segundo panel registro y copiar su contenido en el primero.
Anexos
Visin detallada de la estructura de las Plantillas en el Sketcher
En este apartado vamos a examinar con detalle los elementos que componen cada una de las plantillas. Es bastante especfico por lo que no se aconseja en una primera lectura del documento. Ms adelante, cuando ya se estn diseando interfaces con MOSKitt el usuario puede acudir a l y al Manual de Usuario del Sketcher que se encuenta en la Ayuda de MOSKitt para consultar detalles concretos de las plantillas.
62
MOSKitt: Generacin de cdigo gvHidra Men Principal Window con tag "Ventana_MenuPrincipal" TreeViewMenu con tag "Menu_AModulosPrincipales": dentro crearemos las diferentes entradas de men de nuestra aplicacin (MenuItemAction y SubMenu)
1I Alta Masiva Window con tag "Ventana_AltaMasiva" TabPanel TabPanelContenido sin tag. TabItem con tag "Modo_Insercion": usado para representar el panel de insercin. Panel con tag "Panel_Titulo" Panel con tag "Panel_Registro": donde crearemos los diferentes elementos (widgets) que componen nuestra pantalla.
1CEI Tabular
63
MOSKitt: Generacin de cdigo gvHidra Window con tag "Ventana_1CEI_Tabular" TabPanel TabPanelContenido sin tag. TabItem con tag "Modo_Busqueda": usado para representar el panel de bsqueda. Panel con tag "Panel_Titulo" Panel con tag "Panel_Busqueda": donde crearemos los diferentes elementos (widgets) que componen nuestro filtro. TabItem con tag "Modo_ConsultaEdicionInsercion": usado para representar el panel de ConsultaEdicionInsercion. Panel con tag "Panel_Titulo" Panel con tag "Panel_Tabular": donde tendremos nuestra tabla. Dentro de cada celda, podemos definir (opcional) elementos (widgets) que serviran para definir el tipo de visualizacion de la tabla. Estos pueden ser Textbox,CheckBox,ListBox,ComboBox,RadioButton,DateField,TimeField,Calendar. Si no existe ninguna se mostrara como un Textbox.
1CEI Registro Window con tag "Ventana_1CEI_Registro" TabPanel TabPanelContenido sin tag. TabItem con tag "Modo_Busqueda": usado para representar el panel de bsqueda. Panel con tag "Panel_Titulo" Panel con tag "Panel_Busqueda": donde crearemos los diferentes elementos (widgets) que componen nuestro filtro. TabItem con tag "Modo_ConsultaEdicionInsercion"": usado para representar el panel de ConsultaEdicionInsercion. Panel con tag "Panel_Titulo"
64
MOSKitt: Generacin de cdigo gvHidra Panel con tag "Panel_Registro": donde crearemos los diferentes elementos (widgets) que componen nuestra pantalla.
1C Tabular 1EI Registro Window con tag "Ventana_1C_1EI" TabPanel TabPanelContenido sin tag. TabItem con tag "Modo_Busqueda": usado para representar el panel de bsqueda. Panel con tag "Panel_Titulo" Panel con tag "Panel_Busqueda": donde crearemos los diferentes elementos (widgets) que componen nuestro filtro. TabItem con tag "Modo_Consulta"": usado para representar el panel de Consulta Panel con tag "Panel_Titulo" Panel con tag "Panel_Tabular": donde tendremos nuestra tabla y posibles elementos dentro de las celdas (tipo de visualizacion de la tabla). TabItem con tag "Modo_EdicionInsercion"": usado para representar el panel de EdicionInsercion. Panel con tag "Panel_Titulo" Panel con tag "Panel_Registro": donde crearemos los diferentes elementos (widgets) que componen nuestra pantalla.
65
Maestro Detalle Window con tag "Ventana_MD" TabPanel TabPanelContenido con tag "Rol_Maestro". TabItem con tag "Modo_Busqueda": usado para representar el panel de bsqueda. Panel con tag "Panel_Titulo" Panel con tag "Panel_Busqueda": donde crearemos los diferentes elementos (widgets) que componen nuestro filtro. TabItem con tag "Modo_ConsultaEdicionInsercion": usado para representar el panel de Consulta Panel con tag "Panel_Titulo" Panel con tag "Panel_Tabular" donde tendremos nuestra tabla y posibles elementos dentro de las celdas (tipo de visualizacion de la tabla) o Panel con tag "Panel_Registro" donde crearemos los diferentes elementos (widgets) que componen nuestra pantalla. TabPanel TabPanelContenido con tag "Rol_Detalle". CASO 1 TabItem con tag "Modo_ConsultaEdicionInsercion": usado para representar el panel de Consulta, Edicion, Insercin Panel con tag "Panel_Titulo" Panel con tag "Panel_Tabular" donde tendremos nuestra tabla y posibles elementos dentro de las celdas (tipo de visualizacion de la tabla) o Panel con tag "Panel_Registro" donde crearemos los diferentes elementos (widgets) que componen nuestra pantalla. CASO 2 66
MOSKitt: Generacin de cdigo gvHidra TabItem con tag "Modo_Consulta"": usado para representar el panel de Consulta Panel con tag "Panel_Titulo" Panel con tag "Panel_Tabular": donde tendremos nuestra tabla y posibles elementos dentro de las celdas (tipo de visualizacion de la tabla). TabItem con tag "Modo_EdicionInsercion"": usado para representar el panel de EdicionInsercion. Panel con tag "Panel_Titulo" Panel con tag "Panel_Registro": donde crearemos los diferentes elementos (widgets) que componen nuestra pantalla.
Maestro NDetalles Window con tag "Ventana_MnD" TabPanel TabPanelContenido con tag "Rol_Maestro". TabItem con tag "Modo_Busqueda": usado para representar el panel de bsqueda. Panel con tag "Panel_Titulo" Panel con tag "Panel_Busqueda": donde crearemos los diferentes elementos (widgets) que componen nuestro filtro. TabItem con tag "Modo_ConsultaEdicionInsercion": usado para representar el panel de Consulta Panel con tag "Panel_Titulo" Panel con tag "Panel_Tabular" donde tendremos nuestra tabla y posibles elementos dentro de las celdas (tipo de visualizacion de la tabla) o Panel con tag "Panel_Registro" donde crearemos los diferentes elementos (widgets) que componen nuestra pantalla.
67
MOSKitt: Generacin de cdigo gvHidra TabPanel TabPanelContenido con tag "Rol_NDetalle" Para cada detalle encontrado existe: TabItem TabPanel con tag "Rol_Detalle", donde: CASO 1 TabItem con tag "Modo_ConsultaEdicionInsercion": usado para representar el panel de Consulta, Edicion, Insercin Panel con tag "Panel_Titulo" Panel con tag "Panel_Tabular" donde tendremos nuestra tabla y posibles elementos dentro de las celdas (tipo de visualizacion de la tabla) o Panel con tag "Panel_Registro" donde crearemos los diferentes elementos (widgets) que componen nuestra pantalla. CASO 2 TabItem con tag "Modo_Consulta"": usado para representar el panel de Consulta Panel con tag "Panel_Titulo" Panel con tag "Panel_Tabular": donde tendremos nuestra tabla y posibles elementos dentro de las celdas (tipo de visualizacion de la tabla). TabItem con tag "Modo_EdicionInsercion"": usado para representar el panel de EdicionInsercion. Panel con tag "Panel_Titulo" Panel con tag "Panel_Registro": donde crearemos los diferentes elementos (widgets) que componen nuestra pantalla.
68
Accin para editar el elemento actual. Accin para guardar o finalizar una transaccin. Accin para imprimir un listado. Accin para insertar un elemento nuevo. Accin para aadir operacin de Interfaz. una
Accin para navegar (saltar) de una ventana a otra. Indica que la informacin que se muestra es la fecha del sistema. Indica que la informacin que se muestra es el usuario que est conectado. Permite indicar el nombre de la aplicacin. Normalmente, se debe utilizar dentro del Patrn Men. Permite indicar el nombre de una ventana.
Nombre_Aplicacion
FeaturedLabel, Label
Nombre_Ventana
FeaturedLabel, Label BarMenu, PopupMenu, TreeViewMenu, ToolBarMenu BarMenu, PopupMenu, TreeViewMenu, ToolBarMenu
Menu_AAdministracionSistema Entrada del men principal Administracin del Sistema. Menu_AHerramientasAuxiliares Entrada del men principal Herramientas AuxiliaresAdministracin del Sistema.
69
MOSKitt: Generacin de cdigo gvHidra Etiqueta Menu_AModulosPrincipales Descripcin Entrada del men principal relativo a los Mdulos principales de la aplicacin. Representa el men de cualquier ventana de gvHidra. Identifica aquellos paneles que contienen el filtro de una ventana (el Modo Bsqueda de gvHidra). Identifica aquellos paneles que muestran el resultado de una consulta (el Modo Consulta de gvHidra). Elementos en el Sketcher BarMenu, PopupMenu, TreeViewMenu, ToolBarMenu BarMenu, PopupMenu, TreeViewMenu, ToolBarMenu Plantillas, TabItem
Menu_CIT
Modo_Busqueda
Modo_Consulta
Plantillas, TabItem
Modo_ConsultaEdicionInsercion Identifica aquellos paneles muestran el resultado de una consulta y adems permiten realizar las operaciones de insercin y edicin. Modo_EdicionInsercion Identifica aquellos paneles que permiten realizar las operaciones de insercin y edicin. Identifica aquellos paneles que permiten realizar la operacin de insercin. Indica que debe contener el Modo_Busqueda. Indica que debe contener el Nombre_Aplicacion. Indica que debe contener el elemento paginacin. Indica que el contenido muestra la informacin en formato registro. ndica que es el contenido del men superior de una aplicacin. Indica que el contenido muestra la informacin en formato registro. Indica que el contenido muestra la informacin en formato registro. Indica que contiene el ttulo de la ventana. Indica que el contenido describe 1 Detalle en un Maestro Detalle. Indica que el contenido describe 1 Maestroen un Maestro Detalle.
Plantillas, TabItem
Plantillas, TabItem
Modo_Insercion
Plantillas, TabItem
Panel_Superior Panel_Registro
Panel Panel
Panel_Tabular
Panel
Panel_Titulo Rol_Detalle
Panel Panel,TabPanel
Rol_Maestro
Panel,TabPanel
70
MOSKitt: Generacin de cdigo gvHidra Etiqueta Rol_NDetalle Descripcin Indica que el contenido describe 1 Detalle en un Maestro Detalle. Indica que el contenido que el contenido de la ventana es la plantilla se corresponde con el patrn 1C1EI de UIM. Indica que el contenido que el contenido de la ventana es la plantilla se corresponde con el patrn 1C1EI con Patrn de Visualizacin Registro en UIM. Indica que el contenido que el contenido de la ventana es la plantilla se corresponde con el patrn 1C1EI con Patrn de Visualizacin Tabular en UIM. Indica que el contenido que el contenido de la ventana es la plantilla se corresponde con el patrn 1I de UIM. Indica que el contenido que el contenido de la ventana es la plantilla se corresponde con el patrn MD con 1 Detalle de UIM. Indica que el contenido que el contenido de la ventana es la plantilla se corresponde con el patrn MD con N Detalle de UIM. Indica que el contenido que el contenido de la ventana es la plantilla se corresponde con el patrn Menu de UIM. Elementos en el Sketcher Panel,TabPanel
Ventana_1C_1EI
Window
Ventana_1CEI_Registro
Window
Ventana_1CEI_Tabular
Window
Ventana_AltaMasiva
Window
Ventana_MD
Window
Ventana_MnD
Window
Ventana_MenuPrincipal
Window
Importante: Para tener acceso a las Tags para gvHidra, es necesario iniciar el modelo del Sketcher con la template para gvHidra, o cargar el recurso que contiene las tags (platform:/plugin/es.cv.gvcase.mdt.sketcher.gvHidra/ models/sketcher_reusable_gvHidra.sketcher_diagram).
Archivo de configuracin
Archivo app/gvHidraConfig.inc.xml. La transformacin permite crear dos conexiones de base de datos: la conexin principal y la conexin de debug. Si la aplicacin hace uso de ms conexiones hay que definirlas a mano. Por ello
71
MOSKitt: Generacin de cdigo gvHidra se ha creado una zona protegida en la que el programador pordr modificar los parmetros de las conexiones generadas automticamente y crear otras nuevas.
<DSNZone> <!--PROTECTED REGION ID(Conexiones__RVLTkVtnEeCgcofZYrtByg_UIM) START--> <!-- Define aqui las conexiones a la/s base/s de datos --> <dbDSN id='gvh_dsn_log' sgbd='postgres'> <dbHost>localhost</dbHost> <dbPort>5432</dbPort> <dbDatabase>gvhidra</dbDatabase> <dbUser>gvhidra</dbUser> <dbPassword>gvhidra</dbPassword> </dbDSN> <dbDSN id='g_dsn' sgbd='postgres'> <dbHost>localhost</dbHost> <dbPort>5432</dbPort> <dbDatabase>facturacion</dbDatabase> <dbUser>gvhidra</dbUser> <dbPassword>gvhidra</dbPassword> </dbDSN> <!-- Fin de la zona de conexiones --> <!--PROTECTED REGION END--> </DSNZone> Adems se define otra para el nombre y versin de la aplicacin. Si se quiere aadir algna etiqueta ms, hay que hacerlo ah.
Men de mdulos
Archivo app/include/menuModulos.xml. Dado que por el momento no est contemplada la generacin de cdigo en cuanto a usuarios y permisos, ni acciones personalizadas desde esas entradas, se proporcionan zonas protegidas en los tres archivos que contienen los mens. Cada entrada de men incluye su propia zona para poder modificarlas individualmente y que los archivos sean sensibles a nuevas incorporaciones.
<!--PROTECTED REGION ID(Gestin de productos__bK2_UVtnEeCgcofZYrtByg) START--> <!-- Modulo del menu gvHidra --> <modulo titulo="Gestin de productos" imagen="menu/43.gif" descripcion=""> <opcion titulo="Gestin de productos" descripcion="" url="phrame.php? action=MantenimientoProductos__iniciarVentana" imagen="menu/24.gif"/> 72
Includes
Archivo app/include/include.php. Existe una zona para que el desarrollador pueda cargar clases de forma manual.
Clases manejadoras
Contenidas en app/actions/*.De los tres archivos sobre los que se construye la clase manejadora, slo el que est fuera de la carpeta skeleton se debe modificar. En su interior hay definidas varias zonas protegidas, segn su cometido y ubicacin. Dentro del constructor. En esta zona se completa la definicin de la clase manejadora y se sobreescriben las propiedades completadas ya por el generador, en caso de ser necesario. Modificaciones en la SQL del panel. Modificacin de campos clave. Condiciones de bsqueda. Orden en que se muestran los resultados. Comportamiento del filtro. Comportamiento del panel tras la insercin. Definicin de nuevos tipos de datos. Relacin entre Maestro y Detalle (Si el panel es de dicho tipo) En la clase estn definidas todas las funciones pre/post que acepta el framework, con 0 como valor de retorno. En el interior de cada una hay una zona protegida en la que implementar su funcionalidad. La funcin accionesParticulares se define automticamente con las operaciones que se hayan detectado. Cada elemento case del switch se encapsula en una zona protegida. Se define una ltima zona con el default para que se implemente su funcionalidad. Si el programador tiene que aadir ms acciones al switch, lo debe hacer en este ltimo bloque. Hay un bloque con dos mtodos: dameTablasPanel y dameMatchingsPanel. En el primero se modifican las tablas involucradas en dicho panel, las que se deben pasar al constructor de la clase manejadora. En el segundo, se completan los matchings del panel si hay alguno que falta o no se ha creado correctamente. Al final del archivo se habilita una zona para que el programador escriba las funciones de negocio o de interfaz que queden fuera de la expresividad de los modelos.
73
Vistas
Archivos en app/views/*. Una por cada pantalla. Se crea una zona protegida para el paso de valores entre la clase manejadora y la plantilla o directamente para calcular un valor y pasarlo a smarty.
Plantillas
Archivos en app/plantillas/*. Normalmente hay una por cada pantalla. Las plantillas son archivos con muchas probabilidades de ser modificados. Adems dichos cambios pueden ocurrir prcticamente en cualquier lugar de su contenido. Una zona protegida por cada panel de la plantilla. De esta forma el desarrollador puede cambiar un slo panel y proteger slo esa zona.
Mappings
Los archivos de mappings se encuentran en app/include/mappings/*. Cada bloque de los mapping (dividiendo en bloques segn la accin y la clase manejadora) est limitado por una zona. As, es posible modificar cada uno de los mappings sin afectar al resto. Para cada panel se habilita una zona protegida con el fin de que el programador pueda insertar los mappings de acciones aadidas a mano.
74