Novedades de aries

460 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Novedades de aries

  1. 1. Novedades de Aries 15 Noviembre 2010 (Desde Sep 2009)
  2. 2. Anotación de Entidades • @Entidad(gestion=“xxx”, campoDescripcion=“yyy”) • campoDescripcion permite decidir qué propiedad hace de descripción a diversos efectos: – HibernateSearch – Recientes globales – Títulos de pantallas @Entidad(campoDescripcion=“resumen”) public class Pedido { … @Transient public String getResumen() { } } // Para acceder a ello. RegistroUtil.getDescripcion(ciertoRegistro); http://wiki.seresco.red/aries/index.php?title=Hibernate_Search
  3. 3. Mapear Id Componentes • Al desarrollar componentes compuestos podemos mapear los “ids” de los campos contenidos para facilitar la reutilización. <Row> <TextField id="#{entidad}.nombre" etiqueta="Nombre"/> <TextField id="#{entidad}.apellidos" etiqueta="Apellidos"/> </Row> • Al declarar el componente podemos mapear el trozo de id <apli:NombreApellidos entidad="cliente"/> http://wiki.seresco.red/aries/index.php?title=Desarrollar_un_componente#Mapeo _de_identificadores
  4. 4. Nueva Interfaz Validable • Permite validar nuestros componentes propios dentro del componente. • Se validan aunque el componente no tenga id. http://wiki.seresco.red/aries/index.php?title=Desarrollar_un_componente#Validable public class DuoDeComponentes extends Composite implements Validable{ public DuoDeComponentes() { … } public ErrorValidacion validar(InfoValidacion info) { log.debug("Validando el componente DuoDeComponentes"); return null; } public ErrorValidacion validar(Component componente, InfoValidacion info) { if (componente.equals(campo)) { log.debug("Validando el campo"); } else if (componente.equals(selecfField)) { log.debug("Validando el selectField"); } return null; }
  5. 5. Serializador • La clase Serializador se utiliza al guardar las preferencias, criterios de búsqueda, etc. • Se guardan los datos en base64, excepto los tipos básicos (String, Integer, …) que se guardan en cadenas sencillas para facilitar su lectura. • Por ejemplo: La cadena "Hola mundo" serializada en base64 era: "rO0ABXQACkhvbGEgbXVuZG8" Ahora es: "<S:Hola mundo“. • Se puede usar la clase Serializador para nuestros propósitos en la aplicación.
  6. 6. Objetos recientes Globales • Sistema que permite colocar un componente visor de la lista de objetos recientes en cualquier parte, por ejemplo en el menú general. • Los objetos recientes son los registros últimamente consultados en gestiones , aunque por programa se pueden añadir. • Se guardan por usuario. http://wiki.seresco.red/aries/index.php?title=Objetos_recientes
  7. 7. El nombre de las entidades • El método RegistroUtil.getNombreEntidad devuelve el nombre (digamos la descripción) de una entidad en el idioma del usuario. • El nombre de las entidades se pone como propiedad en algun .properties con el nombre lit.entidad.xxxx donde “xxxx” es el nombre completo de la entidad cambiado puntos por guiones bajos, por ejemplo: – lit.entidad.es_seresco_pruebas_datos_Cliente=Cliente • De momento solo se usa en HibernateSearch, pero está ahí para que se pueda usar en otros contextos.
  8. 8. La descripción de las propiedades • Nuevo método Introspector.getDescripcionPropiedad que retorna la descripción en el idioma del usuario de una propiedad. • La descripción se busca como literal con el nombre “entidad.propiedad”. Si no existe se busca con comodín en la entidad, es decir “*.propiedad”. • De momento esto se usa para la utilidad de poder personalizar una búsqueda, pero está ahí para cualquier otro uso de manejo genérico de las propiedades. • Asociado a esto existe el método Introspector.getPropiedadesAlcanzables
  9. 9. Jbasica en procesos planificados • La librería Jbasica que permite conectar con modelo B, antes no se podía ejecutar en procesos planificados porque no se conseguía una instancia de la conexión. • Para que funcione bien hay que implementar un escuchador de fin de procesos planificados que se encargue de cerrar las conexiones usadas. Más detalles en la Wiki http://bc.seresco.red/index.php?title=Jbasica#Liberaci.C3.B3n_de_la_conexi.C3.B3n_al_ terminar_un_proceso_planificado_de_Aries
  10. 10. Configuración de columnas • Todas las búsquedas permiten que el usuario pueda configurar las columnas resultantes. • Si queremos evitarlo en una hay que sobrescribir el método isConfigurable. http://wiki.seresco.red/aries/index.php?title=B%C3%BAsquedas_con_columnas_din%C3%A1micas#Pantalla_de_configuraci.C3.B3n_de_columnas
  11. 11. Subir,bajar y pasar filas • La clase ManejadorComponentes tiene dos nuevos métodos de utilidad. SubirFilasSeleccionadas y BajarFilasSeleccionadas. • Nuevos Componentes BotonesMoverFila , BotonesPasarFila. • Se usan en configuración de búsquedas:
  12. 12. Guadar y recuperar criteros • Nuevo sistema para guardar y recuperar criterios. • Hay que activarlo para que aparezca: Usa nuevas tablas. http://wiki.seresco.red/aries/index.php?title=Guardar/Recuperar_criterios_en_b%C3 %BAsquedas
  13. 13. Criterios automáticos • Los criterios automáticos ahora están ligados a la funcionalidad de guardar y recuperar criterios. • Al guardar un criterio se puede marcar como automático. • Entonces en sucesivas ejecuciones se pasará directamente a la pestaña de resultados. http://wiki.seresco.red/aries/index.php?title=Criterios_autom%C3%A1ticos_en_b %C3%BAsquedas
  14. 14. Anotación Componente • La anotación @Componente permite establecer el tipo de componente a utilizar para renderizar una propiedad de forma dinámica. • De momento solamente se utiliza para mostrar las columnas dinámicas en las búsquedas , cuando el usuario utiliza el configurador de columnas para añadir nuevas propiedades a mostrar. • Permite establecer el tipo de componente a utilizar. De momento solamente se puede declarar un SelectField y el nombre de un lista de literales en su caso: public class Producto { @Componente(value="SelectField", literales="lit.TipoIva") public Integer getTipoIva() { … }
  15. 15. GestorTablaEnVentana en Pantalla • La gestión de líneas en ventana permite decidir qué forma de presentación queremos (Pantalla ó Ventana) <GrupoTablaGestion entidad="Pedidolin" ventana=“GestionLineasPedidos" modo="pantalla">
  16. 16. Nuevo componente Div • Div es un Contenedor pensado para maquetar usando CSS. • Es como un ContentPane pero puede contener más de un hijo. • Se renderiza exactamente como un “Div” de Html. • Permite evitar posicionamiento absoluto de Css. • Mediante las propiedades RenderId ó RenderClass podemos establecer estilos CSS. <Div renderClass="clase1" > ... Cosas ... </Div> <Div renderClass="clase2" > ... Más Cosas ... </Div> .clase1 { background-color: red; } .clase2 { background-color: blue; }
  17. 17. Componente Div: Ejemplo de uso <Div id="separadorCabecera"> <Div renderId="Cabecera"> <Div renderId="BordeSuperior"/> <Div renderId="CabeceraCentral"> <Div renderId="DivLogo"/> <Div renderId="CabeceraDerecha"> <Div renderId="CabeceraAries" id="CabeceraAries"/> <Div renderId="TituloFuncion" > <Column> <Label id="TituloFuncion"/> </Column> </Div> </Div> </Div> <Div renderId="BordeInferior"/> <Div renderId="MigaDepan" > <Row id="MigaDePan" cellSpacing="4"/> </Div> </Div> <Div renderId="Cuerpo"> <Div id="SeparadorMenu"> <Div renderId="ZonaMenu"> <ContentPane id="menuContenedor"/> </Div> <Div renderId="ZonaPantalla"> <Div renderId="ZonaErrores"> <apli:AreaMensajes /> </Div> <ContentPane id="pantallaContenedor"/> </Div> </Div> </Div> <Div renderId="Pie"/> </Div>
  18. 18. Estilos en CSS • Relacionado con el asunto "Ancho fijo". • Los elementos "body" y "c_root" se pueden estilizar con css para obtener ancho fijo. • Con renderId se pueden establecer estilos a cualquier componente • Con renderClass se pueden establecer a los componentes de una clase. • Los estilos se escriben en WebContent/recursos/css/estilos.css y se declara en src/META-INF/nextapp/echo2/ForeignCssURLs.properties. http://wiki.seresco.red/aries/index.php?title=CSS#Estilos_b.C3.A1sicos
  19. 19. ¿ Por qué usar Css ? • En el caso de necesitar más potencia. – Tipos de bordes, – Bordes redondeados, – Control de alineación, overflow , etc,... – Control de la cascada (Herencia).
  20. 20. Estilo BLOG • Aplicación con un único scroll a nivel de toda página. • Necesario para dispositivos móviles. • Más moderna, atractiva y usable. • Implica Ancho fijo. http://wiki.seresco.red/aries/index.php?title=Estilo_Blog
  21. 21. Personalizar Documento Html • El Documento Html generado por Aries se puede personalizar, por ejemplo para añadir un Favicon (El icono que aparece asociado a nuestra aplicación). http://wiki.seresco.red/aries/index.php?title=Personalizar_el_documento_Html
  22. 22. Atributos minHeight, maxHeight • Permiten establecer el alto mínimo y máximo para una tabla. • El alto de la tabla variará en función del tamaño de la pantalla
  23. 23. MigaDePan practicable • Rehecho el componente MigaDePan • Ahora se puede pinchar en cualquier miga • Comienza por ">> Inicio" <SplitPane orientation="vertical" separatorPosition="48"> <ContentPane renderId="ZonaCabecera" id="cabeceraContenedor"/> <Div renderId="ZonaMiga"> <Row id="MigaDePan" cellSpacing="4"/> </Div> </SplitPane>
  24. 24. Servicio de imágenes adjuntas • Nos permite obtener una imagen guardada en un adjunto mediante una URL y hacerlo directamente sin que suponga una descarga. • Esto nos permite incrustrarla en noticias , textos Html, etc. • Existe dos formas de hacerlo, mediante servicio de Echo2 (Requiere sesión) o Servlet (No requiere sesión). • Ejemplo de URL de llamada mediante servicio Echo2: http://wiki.seresco.red/aries/index.php?title=Servicio_de_im%C3%A1genes_adjuntas http://servidor/miapli/?serviceId=Aries.ImagenAdjunto&entidad=noticia&claves=1%3b&nombre=ima gen.png
  25. 25. ManejadorComponentes • Nuevos métodos: – setObligatorio , isObligatorio – setErroneo, isErroneo • Estos métodos se encargan de fijar también los estilos asociados a sus estados.
  26. 26. Validación y mensajes • Cuando se valida una pantalla ahora se muestran todos los errores de campos erróneos (No solamente uno). • Se puede configurar la aplicación para que muestre mensajes en una zona de la pantalla en vez de hacerlo en una ventana. • Podemos configurar la aplicación para no tener que declarar el área de mensajes,pero si queremos declarar el área de mensajes en el escritorio o en cada pantalla podemos hacerlo. • Debemos usar MensajeUsuarioUtil para mostrar mensajes. # Area de mensajes automática es.seresco.aries.AreaMensajesAuto=true http://wiki.seresco.red/aries/index.php?title=Visualizar_mensajes
  27. 27. AutoLogin • Podemos configurar la aplicación para que si un usuario ha guardado usuario y contraseña, no la vuelva a pedir de nuevo. • Esto se desactiva si el usuario entra en sesión y pulsa cerrar sesión. • Conviene en este caso mostrar claramente el usuario actual en el escritorio. http://wiki.seresco.red/aries/index.php?title=Seguridad#AutoLogin es.seresco.aries.seguridad.AutoLogin=true
  28. 28. GrupoTablaConsulta: Paginación • Nuevo componente GrupoTablaConsulta que permite mostrar los registros de una entida débil con paginación (Igual que se puede hacer con gestiones de líneas o búsquedas).
  29. 29. Componente TabbedPane • El componente TabbedPane de EchoPointNG ahora puede ser utilizado en pantallas mediante el tag Tabbedpane. • El texto de cada solapa se declara igual que TabPane. • Internamente TabbedPane es muy diferente a TabPane, así que para poder funcionar se instancia un EnvoltorioTabbedPane. • Ventajas : Puede estar dentro de un column, grid o row, permite añadir iconos, ¿más chulo? • Inconvenientes: Aun no hay política de estilos, puede fallar en caso de renderización parcial ... http://wiki.seresco.red/aries/index.php?title=TabbedPane
  30. 30. Clases de utilidad variadas • Clase CriterioListModel (Aportación de Alejandro), igual que EjemploListModel pero con un criterio.
  31. 31. GestorEntityManagerHilo • Se eliminó error de memoria no liberada. Por culpa de la estrategia antigua de tener un EntityManager por aplicación no se liberaban las instancias de Aplicación a pesar de que las sesiones caducaran. • Nueva estrategia de EntityManager por Hilo que soluciona el problema además de que facilita la ejecución de procesos planificados o servicios web que no tienen aplicación. http://wiki.seresco.red/aries/index.php?title=Estrategias_EntityManager#Estrategia_d e_EntityManager_por_hilo_.3D
  32. 32. Spring • Si no declaramos la pantalla como Bean, se declarará automáticamente cuando se cargue. Esto permite aprovechar la inyección de dependencias automática. Ejemplo: public class BusquedaArticulos extends Busqueda { .. @Autowired private ServicioActualizarPrecios servicioActualizarPrecios; } http://wiki.seresco.red/aries/index.php?title=Spring_con_Anotaciones#Declarar_pantallas_ como_beans_para_cablearlas • Recordar también que se pueden usar Beans con anotaciones.
  33. 33. Portlets: Prueba conceptual • Aries como Portlet permitirá incluir una pantalla de Aries dentro de un portal como por ejemplo LifeRay. • Es un trabajo iniciado y ha llegado a la fase de descubrir que es viable, pero habría que continuar trabajando antes de poder contar con él.
  34. 34. Gráficos JFC,OFC,Amchart • AriesExt ofrece clases que facilitan la presentación de gráficos. • Ejemplo de Servicio de gráfico OFC: public class ServicioOfcVentas implements Service { public void service(Connection conn) throws IOException { List<String> categorias = new ArrayList<String>(); List<Double> valoresSerie1 = new ArrayList<Double>(); for (int i = 1; i <= 4; i++) { categorias.add("Trimestre " + String.valueOf(i)); valoresSerie1.add(1500d*i); } GeneradorDatosGrafico generadorDatosOfc = new GeneradorDatosGraficoBase(); generadorDatosOfc.setCategorias(categorias); generadorDatosOfc.setValores(valoresSerie1); generadorDatosOfc.generarGrafico(conn.getRequest(), conn.getResponse()); } } http://wiki.seresco.red/aries/index.php?title=OpenFlashChart
  35. 35. Cambios estéticos en Aries • Cambios disponibles en aplicación plantilla. • Diseño tomado de aplicación Fidel • Ventanas – Borde mínimo – Se oscurece el resto • Botones de Cabecera pasan a ser enlaces. • Botón para anclar/desanclar menú. • La Miga de Pan ocupa todo el ancho. • Estilo AnchoFijo. • Banda del menú incluye zona de información • Eliminados efectos relieve. • Insets en los bloques • Combinación de colores basada en tres tonos.
  36. 36. Cambios estéticos: Papel Pijama • Papel pijama. http://wikiaries.seresco.es/aries/index.php?title=Papel_Pijama <style name="FilaImpar" type="nextapp.echo2.app.Label"> <properties> <property name="background" value="#e0e0f0"/> </properties> </style> <style name="FilaPar" type="nextapp.echo2.app.Label"> <properties> <property name="background" value="#f0f0e0"/> </properties> </style>
  37. 37. Ancho de columnas en tablas • Si una tabla tiene width : • Y la suma del ancho de sus columnas es menor que él • Entonces se aumenta proporcionalmente cada columna para aprovechar todo el ancho.
  38. 38. Plantilla GrupoTablaGestion • Ahora GrupoTablaGestion usa una plantilla lo que permite personalizarla, por ejemplo, ponerla en horizontal.
  39. 39. Factorías de Renderers de Celdas • Para presentar información dentro de las tablas se utilizan los renderers. • Mediante las factorías de Renderers se facilita la creación de nuevos Renderers. • Un ejemplo de Renderer Personalizado, es una barra que muestre un porcentaje. http://wiki.seresco.red/aries/index.php?title=Desarrollar_Renderers_de_celdas
  40. 40. Celdas botón • Podemos declarar un Button dentro de una tabla. • Se renderiza con el aspecto de un enlace. <Tabla id="pedidolin" editionEnabled="false" width="690"> <Button id="pedidolin.id.linPedido" etiqueta="Línea"/> <CampoConBusqueda id="pedidolin.articulo.codArticulo" etiqueta="Artículo"/> <TextField id="articulo.descripcion" etiqueta="Descripción" enabled="false"/> </Tabla>
  41. 41. Lenguajes dinámicos • Se puede empotrar un lenguaje dinámico en nuestra aplicación, por ejemplo, Jython. • Permite ofrecer al usuario final la posibilidad de introducir desde fórmulas hasta algoritmos completos. • Muy sencillo de usar. http://foros.seresco.red/desarrollo/viewtopic.php?f=5&t=111&p=197&hilit=Jython #p197
  42. 42. Componente ArbolXML • Permite mostrar un árbol cargado a partir de un fichero XML y un fichero de configuración que describe qué hay que mostrar para cada tipo de nodo. • Se puede mostrar el detalle de cada nodo en la misma pantalla o en una ventana aparte. http://wiki.seresco.red/aries/index.php?title=Arbol_XML
  43. 43. SSO Sencillo • Permite hacer SSO entre varias aplicaciones de Aries o ir a otras aplicaciones desde Aries. • La clase TicketManager nos permite generar y validar "tickets" que tienen una duración determinada. http://wiki.seresco.red/aries/index.php?title=SSO_sencillo
  44. 44. Servicios Web con Apache CXF • Resulta muy sencillo desarrollar servicios web usando Apache CXF. • También se pueden ofrecer Servicios Web REST mediante CXF de forma muy sencilla. http://wiki.seresco.red/aries/index.php?title=SSO_sencillo @WebService public interface CheckTicket { boolean checkTicket( @WebParam(name="ticket") String ticket, @WebParam(name="nombre") String nombre); }
  45. 45. Multisesión • Se puede configurar Aries para permitir la multi sesión. • Esto permite a los usuarios tener abiertas varias pestañas ejecutando funciones diferentes de la misma aplicación. • En realidad existe una única sesión de servlets pero puede haber varias aplicaciones simultáneas. • No afecta a la programación. Cada instancia de Aplicacion sigue aislada del resto, pero ahora una instancia de Session de servlets puede compartir varias sesiones de aplicación. Ojo al método guardarEnSesion. http://wiki.seresco.red/aries/index.php?title=Varias_sesiones_con_el_mismo_navegador
  46. 46. Cursor y Esperas • Ha sido imposible superar los problemas de cambio de cursor al interactuar. Cada solución incluía un nuevo problema en diferentes navegadores. • La decisión salomónica es evitar el cursor en modo espera. • Nueva propuesta de espera prolongada. Cuando la respuesta supera los 750ms puede aparecer el icono • En la aplicación Plantilla ya están aplicados estos cambios • Se pueden aplicar copiando recursos/aries/ServerDelayMessage.xml y estableciendo el estilo .ServerDelayMessage tal como hace la aplicación plantilla.
  47. 47. Canales • Un canal es una forma de ejecutar la aplicación que determina todos los detalles relacionados con la capa de presentación. • Por ejemplo, para diferenciar dispositivos móviles. • Podemos determinar el canal usando URL's diferentes mediante ServletParam • Podemos tener hojas de estilos diferentes en función del canal. • Podemos tener pantallas diferentes en función del canal. http://wiki.seresco.red/aries/index.php?title=Canales
  48. 48. Exportar tablas con Plantilla http://wikiaries.seresco.es/aries/index.php?title=Exportar_tabla_con_plantilla
  49. 49. Exportar pantalla con Plantilla • Se puede exportar el contenido de una pantalla a Excel usando una plantilla con muy poco esfuerzo de programación. • Por ejemplo, dada una pantalla de gestión de pedidos, se puede incluir un botón que nos imprima el pedido en Excel. public void doExcel() { Tabla t=getComponent("pedidolin"); GrupoTablaGestion gt=(GrupoTablaGestion)t.getParent().getParent(); String nombreBoton="exportar" + gt.getSufijoBotones(); Button b=(Button)gt.getComponent(nombreBoton); b.fireActionPerformed(new ActionEvent(b, b.getActionCommand())); }
  50. 50. CampoFechaPop • El nuevo CampoFechaPop permite mostrar el selector de fecha justo debajo del campo. • Se puede configurar la aplicación para que todo CampoFecha se instancie realmente mediante un CampoFechaPop añadiendo lo siguiente a config.properties. http://wiki.seresco.red/aries/index.php?title=CampoFechaPop CampoFecha=es.seresco.aries.aplicacion.componente.CampoFechaPop
  51. 51. Refactorización de componentes • Nuevo componente SelectorFecha que permite seleccionar una fecha de un calendario que incluye navegación entre meses. (Se utiliza dentro de CampoFechaPop). • Nuevo interfaz CampoConEdicion que implementan todos los componentes que tengan una máscara de edición. • Nuevo interfaz CampoConAditamentos que implementan los componentes que se compongan de un campo y más cosas. Por ejemplo CampoFechaPop. • Nuevo interfaz WithText que marca los componentes de Echo2 o terceros que tienen el interfaz setText-getText. • Gracias a estos interfaces, en las clases de Aries (ManejadorComponentes, Introspector , etc) se puede hacer una programación más genérica.
  52. 52. Componente Combo • Nuevo componente Combo que se implementa mediante el ComboBox de EchoPointNG. • Es una combinación de TextField con SelectField, o digamos, un SelectField editable. • Permite especificar el ListModel. • No permite Clave-Valor. (De momento) • También permite un ListModel automático formado por los últimos valores introducidos. (Atributo historial="true"). http://wikiaries.seresco.es/aries/index.php?title=Combo <apli:Combo id="usuario" etiqueta="Usuario"/>
  53. 53. Ventanas con tamaño automático • Si ponemos alto="0" y ancho="0" a una pantalla entonces su tamaño es automático y se ajusta perfectamente a su contenido. http://wiki.seresco.red/aries/index.php?title=Ventanas
  54. 54. Título y miga de pan • Ahora las gestiones establecen como título la descripción del registro activo (Obtenido mediante el atributo campoDescripcion de la anotación @Entidad del mismo).
  55. 55. Atributo ColumnWidth • El componente Grid tiene un nuevo atributo columnWidth que permite establecer el ancho de las columnas en pixeles o en porcentaje. <Grid columnWidth="100px,25%, 300">
  56. 56. Plugin • Nuevo asistente de creación de componente • El asistente de pantalla y búsqueda permite seleccionar los campos a mostrar tomados de la entidad principal. • Al crear una pantalla se puede pedir que nos la incluya en el menú y que nos internacionalice las etiquetas generadas.
  57. 57. Componente HtmlEditor • Se ha integrado el CkEditor como componente de Aries, así que se puede usar en cualquier pantalla. • Permite la edición WYSIWYG de campos con contenido rico Html. • Es más potente que el que venía inicialmente con Echo2 http://wikiaries.seresco.es/aries/index.php?title=HtmlEditor
  58. 58. Menús • Nuevo menú horizontal. • Refactorización de menús. (Nuevo MenuVertical, MenuEscritorio deprecated). • El escritorio puede contener varios menús. http://wiki.seresco.red/aries/index.php?title=Men%C3%BAs
  59. 59. EntityManagerFactoryMultiple • Nuevo sistema para permitir dataSource diferente en función del usuario que ha iniciado sesión. • Objetivo: Dar soporte de Outsourcing a múltiples clientes con un único despliegue de aplicación. • Nueva clase EntityManagerFactoryMultiple que retorna un EntityManagerFactory diferente en función de lo que devuelva el método a sobrescribir getNombre. http://foros.seresco.red/desarrollo/viewtopic.php?f=5&t=182&p=302#p302
  60. 60. Soporte a Navegadores • Se soporta Internet Explorer 9 • Se soporta mejor Internet Explorer 6
  61. 61. Drag & Drop
  62. 62. Favoritos

×