Blogs Blogs

OpenXava 4.2.2 liberado OpenXava 4.2.2 liberado

OpenXava 5.7 liberado

16 de mayo del 2017

En OpenXava 5.7 el usuario puede ver el modo lista en formato tarjetas, puede usar permalinks para acceder a registros individuales o ejecutar una acción directamente, en las colecciones hemos añadido subcontroladores para tener menús desplegables, es posible activar un modo adaptable donde la disposición de los campos se adapta al tamaño de la pantalla, hay una nueva anotación @Calculation para las propiedades, se permite crear y modificar elementos directamente desde cualquier colección @OneToMany y mucho más.

Te invitamos a que descargues esta nueva versión y actualices tus aplicaciones OpenXava. Mira las instrucciones de migración.
 

Tarjetas y formatos de lista personalizados

Un nuevo botón en la esquina superior derecha permite al usuario ver la lista en formato tarjetas:

Pero no es sólo el formato de tarjetas, tenemos un nuevo mecanismo para los formatos de la lista personalizable por el desarrollador. El usuario puede escoger el formato usando los botones a la derecha de la barra de botones superior:

Los formatos disponibles son todo los editores que están asignado a tab usando <for-tabs/> en default-editors.xml o <para-tabs/> en editores.xml. Sin embargo, puedes cambiar los editores disponibles para un tab específico con el atributo editors de @Tab. Por ejemplo, si escribes un @Tab como este:

@Tab ( name ="ConTarjetas", editors ="List, Charts, ListaTarjetasClientes",
    properties="numero, nombre, tipo, direccion.poblacion, direccion.provincia.nombre"
)


Este tab tendrá los formatos List y Charts, que son estándar, y un nuevo formato personalizado, ListaTarjetasClientes. ListaTarjetasClientes es un editor propio definido en editores.xml.
Fíjate que puedes usar esta nueva funcionalidad para quitar los gráficos del modo lista:

@Tab ( name ="SoloLista", editors ="List",
    properties="numero, nombre, tipo, direccion.poblacion, direccion.provincia.nombre"
)


Así podemos tener un módulo sin gráficos, sólo la lista de OpenXava de toda la vida. Dado que hay solo un editor, los botones para seleccionar formato no aparecen.
La diferencia entre editor y editors, es que con editor indicamos el editor para el formato por defecto, mientras que con editors especificamos todos los formatos disponibles.
Para quitar los gráficos de todas las listas de tu aplicación de un solo golpe podemos usar valores-defecto-tabs.xml:

<?xml version = "1.0" encoding = "ISO-8859-1"?>
 

<!DOCTYPE valores-defecto-tabs SYSTEM "dtds/valores-defecto-tabs.dtd">
 
<valores-defecto-tabs>
 
    <tab editores="List">
        <para-todos-los-modelos/>
    </tab>
 
</valores-defecto-tabs>


Esta técnica no es sólo para quitar los gráficos, es para restringir la lista de formatos para todos los módulos. Si no se usan todos los editores <para-tabs/>.
 

Permalink

Cuando el usuario escoge un registro la URL del navegador se modificar con el id del registro:

De esta manera el usuario puede copiar y pegar la URL, y enviarla por correo electrónico, por ejemplo, y así enviar una referencia a un registro específico.
También puedes añadir la acción a ejecutar en la URL así:
http://www.misitio.com/MiAplicacion/m/Cliente?action=CRUD.new para ejecutar la acción nuevo, o
http://www.misitio.com/MiAplicacion/m/Cliente?action=Mode.list para ir a modo lista.
 

Menús desplegables en colecciones

Mediante @ListSubcontroller podremos agrupar varias acciones para visualizarlas en un único botón desplegable. Si definimos una colección como la siguiente:

@OneToMany(mappedBy="equipo", cascade=CascadeType.ALL)
@ListSubcontroller("Cosas")
private Collection<MiembroEquipo> miembros;


Obtendremos:

En @ListSubcontroller definiremos el nombre del controlador al que hacemos referencia, además están disponibles los atributos forViews y notForViews.
Si queremos que nuestro nuevo subcontrolador muestre una imagen, deberemos definir el controlador con el atributo icono o imagen:

<controlador nombre="Cosas" icono="exclamation">
    <accion nombre="verNombres"
        clase="org.openxava.test.acciones.VerNombreORolDesdeMiembroEquipo"
        icono="message-outline"/>
    <accion nombre="verRoles"
        clase="org.openxava.test.acciones.VerNombreORolDesdeMiembroEquipo"
        icono="message">
        <poner valor="true" propiedad="roles"/>
    </accion>
</controlador>

 

Interfaz de usuario adaptable (responsive)

Si tus usuarios acceden a tu aplicación con dispositivos de diferentes tamaños, como tablets de 7", iPads de 10", portátiles de 15", pantallas de 22", etc. lo vas a tener complicado si quieres diseñar una vista que se adapte bien a todas las pantallas. Para aliviar este problema OpenXava introduce un nuevo modo de visualización llamado "flow layout". Para activarlo añade la siguiente entrada en tu xava.properties:

flowLayout=true

Así los elemento en @View se mostrarán, pero la disposición de los campos simples la decidirá OpenXava en tiempo real según cambie el tamaño de la página. Actívalo en tu proyecto y prueba redimensionar el navegador para ver el efecto.
 

@Calculation

Con @Calculation podemos definir una expresión aritmética para hacer el cálculo de la propiedad. La expresión puede contener +, -, *, /, (), valores numéricos y nombres de propiedades de la misma entidad. Por ejemplo:

@Calculation("((horas * trabajador.precioHora) + desplazamiento - descuento) * porcentajeIVA / 100")
private BigDecimal total;

Fíjate como trabajador.precioHora se usa para obtener el valor de una referencia.
El cálculo se ejecuta y visualiza cuando el usuario cambia cualquier valor de las propiedades usadas en la expresión en la interfaz de usuario, sin embargo el valor no se graba hasta que el usuario no pulsa en el botón de grabar.
@Calculation tiene dos cosas buenas: primera, nos ahorramos la engorrosa sintaxis de BigDecimal, y segundo, el cálculo tiene latencia cero, dado que se ejecuta en el navegador sin llamar al servidor.
 

Creación y modificación en colecciones

Hasta ahora el usuario sólo podía añadir y modificar elementos en las colecciones con "cascade remove", en el resto de las colecciones el usuario podía añadir elementos desde una lista y ver los elementos existentes pero no modificarlos. Ahora, el usuario puede añadir y modificar en cualquier colección @OneToMany. Así:


Dado que ahora tenemos dos acciones para añadir nuevos elementos, hemos añadido una nueva anotación, @AddAction, para sobrescribir la acción 'Añadir', mientras que la @NewAction de siempre ahora se usa sólo para definir la acción 'Nuevo'.
 

Otras mejoras

Hemos hecho muchas mejoras en otras áreas:

  • El usuario puede quitar una consulta del combo de consultas recientes en modo lista.
  • Esquinas redondeadas cambiadas por esquinas cuadradas en toda la interfaz de usuario.
  • Se recuerda el último formato de lista (gráficos, tarjetas o lista) entre sesiones por usuario.
  • Mejores valores por defecto para las propiedades de la lista y las colecciones cuando no se especifica @Tab o @ListProperties.
  • Añadidos tamaño de fuente y formato a TEXTO_HTML_SIMPLE y eliminamos algunas opciones poco usadas para mantenerlo simple.
  • Las etiquetas para las referencias en la lista usan la etiqueta de la referencia si la propiedad es nombre, descripción o título.
  • Borrar seleccionados no disponible en gráficos.
  • Formateador para TEXTO_HTML en modo lista, ahora usa un texto plano de hasta 200 caracteres.
  • Nuevo método executeAction() en BaseAction para ejecutar acciones desde una acción.
  • Nuevo atributo elementos-seleccionables en editor de editores.xml para editores de lista que permiten seleccionar elementos.
  • Nuevo atributo procesar-elementos-seleccionados en accion de controlladores.xml para ocultar acciones cuando seleccionar elementos no está disponible.
  • Tamaño de los trozos de datos que se obtiene de la base de datos en modo lista ahora es de 120 registros, antes era 50.
  • Traducción al japonés de las etiquetas y mensajes.
  • API Mail disponible para usar en tu proyecto.
  • Nuevo método multiline() en Strings para crear cadenas multilinea independientes de la plataforma.
  • Tamaño por defecto para los estereotipos IMAGES_GALLERY, GALERIA_IMAGENES, FILES y ARCHIVOS.
  • Nuevo método waitAJAX() en ModuleTestBase para esperar hasta que la actual petición AJAX termine.
  • Nuevo método assertValidValueNotExists() en ModuleTestBase.
  • Algunas nueva etiquetas de uso común para ser usadas en las aplicaciones.
  • Nuevos métodos get/assertValueInList() sin el parámetro de columna en ModuleTestBase para funcionar con listas de elementos con formatos sin columna.
  • Clase SessionData para acceder a los datos de sesión desde cualquier parte de la aplicación: acciones, calculadores, validadores, incluso desde entidades.
  • Registramos en el cuaderno de bitácora el tiempo de ejecución de cada petición AJAX a nivel de depuración.
  • Nuevos métodos getDiscussionCommentText(), getDiscussionCommentContentText() y assertDiscussionCommentContentText() en ModuleTestBase.
  • Mensajes en inglés más intuitivos.
  • Nuevo método toMap() en la utilidad Maps para crear un mapa a partir de argumentos variables.
  • Librería jsoup para manejar HTML incluida.

 

Arreglos

Aunque esta no es una versión de mantenimiento hemos arreglado algunas cosas:

  • Arreglado: Pulsar en Nuevo desde gráficos con colecciones calculadas rompe el módulo.
  • Arreglado: SchemaTool falla con entidades con @Table(schema=).
  • Arreglado: "Yes" se muestra al lado del símbolo de marcado en la lista para los booleanos cuando el redimensionado de columnas está desactivado. 
  • Arreglado: Error "Acción ... no disponible" la recargar página después de perder la sesión.
  • Arreglado: La personalizaciones de la lista no se guardan en algunos casos.
  • Arreglado: ModuleTestBase.assertDiscussionCommentText() solo funciona para la fila  0.

Descarga OpenXava 5.7

 

blog comments powered by Disqus