novedades de aries
TRANSCRIPT
Novedades de Aries
15 Noviembre 2010(Desde Sep 2009)
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
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
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;}
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.
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
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.
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
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
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
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:
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
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
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() { … }
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">
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;}
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>
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
¿ 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).
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
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
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
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>
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=imagen.png
ManejadorComponentes• Nuevos métodos:– setObligatorio , isObligatorio– setErroneo, isErroneo
• Estos métodos se encargan de fijar también los estilos asociados a sus estados.
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áticaes.seresco.aries.AreaMensajesAuto=true
http://wiki.seresco.red/aries/index.php?title=Visualizar_mensajes
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
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).
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
Clases de utilidad variadas• Clase CriterioListModel (Aportación de Alejandro), igual que
EjemploListModel pero con un criterio.
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_de_EntityManager_por_hilo_.3D
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.
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.
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
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.
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>
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.
Plantilla GrupoTablaGestion• Ahora GrupoTablaGestion usa una plantilla lo que permite
personalizarla, por ejemplo, ponerla en horizontal.
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
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>
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
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
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
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
@WebServicepublic interface CheckTicket {
boolean checkTicket(@WebParam(name="ticket") String ticket, @WebParam(name="nombre") String nombre);
}
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
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.
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
Exportar tablas con Plantilla
http://wikiaries.seresco.es/aries/index.php?title=Exportar_tabla_con_plantilla
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()));}
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
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.
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"/>
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
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).
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">
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.
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
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
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
Soporte a Navegadores• Se soporta Internet Explorer 9• Se soporta mejor Internet Explorer 6
Drag & Drop
Favoritos