Una de las funcionalidades más habituales en las aplicaciones de gestión es la grabación de datos, y en muchos casos el usuario necesita que la aplicación le permita máxima agilidad para realizar una grabación continua de datos, de tal forma que cuando aceptar un formulario la aplicación le proponga el mismo formulario vacío para seguir grabando. Un formulario se puede mostrar en ventana (cuadro de diálogo) o a pantalla completa (vista). Esta vitamina presenta una solución universal que permite poner el botón aceptar y seguir en formularios en vista y cuadro de diálogo con Velneo.
En formularios a vista completa y en cuadro de diálogo
Para conseguir esto en formularios de Velneo en cuadro de diálogo habíamos visto la vitamina 1 Aceptar y seguir en cuadros de diálogo con Velneo, que como su nombre indica se aplica para cuadros de diálogo, y ¿Cómo puedo conseguirlo en formularios en vista a pantalla completa?
A continuación veremos en esta vitamina lo fácil que será conseguirlo utilizando el API de Velneo con JavaScript una solución universal válida tanto para formularios en cuadro de diálogo como para formularios en vista a pantalla completa.
1º El manejador de evento
Lo más habitual es que el botón aceptar y seguir una vez pulsado se encargue de realizar la verificaciones pertinentes, si todo está correcto se guarde el registro y a continuación muestre el formulario vacío para seguir grabando. Para conseguirlo haremos que el botón Aceptar y seguir ejecute un manejador de evento, como el que podemos ver en la siguiente imagen.
Si analizamos el código vemos 3 partes claramente diferenciadas: 1º verificación, 2º guardar registro, 3º mostrar nuevo registro vacío para seguir grabando.
2º El manejador de evento JavaScript
El encargado de mostrar un nuevo registro vacío es el manejador de evento NUEVO_ALTA. Se trata de un manejador de evento JavaScript que contiene el siguiente código.
Este código es válido para cualquier formulario, por lo que puedes copiar el manejador de evento NUEVO_ALTA a cualquier formulario donde desees aplicar la funcionalidad de aceptar y seguir.
// Se crea un registro nuevo de la tabla origen del formulario var nuevoRegistro = new VRegister(theRoot); nuevoRegistro.setTable(theRegisterIn.tableInfo().idRef()); // Se asigna el registro vacío al formulario var formulario = theRoot.dataView(); formulario.setRegister( nuevoRegistro ); // Situamos el cursor en el primer campo editable formulario.setFocusToFirst();
Universal
Recuerda que esta vitamina es válida tanto para formulario en cuadro de diálogo como para formulario en vista a pantalla completa.
Fernando dice
Gracias por la píldora Jesús,
solo una cosa. En un formulario modal no refresca la rejilla que está detrás, dando la impresión al usuario que el alta no se ha realizado como si hace el acceptNoClose().
Alguna manera de solventar el refresco de la rejilla origen del formulario modal?
Marco Rangel dice
Post antiguo, pero intenté esta píldora, y no me funcionó y explico por qué no funcionó en mi caso:
Este script únicamente crea un registro nuevo y lo asigna al formulario, pero si el formulario en el transcurso de su edición de la ficha «original» sufrió cambios (como en mi caso, deshabilitar algunos cuadros de texto debido a condiciones), estos cambios permaneces. Mi primera idea fue correr manualmente el Pre-Ini y el Post-ini y tal vez resetear alguna variable que controlara el comportamiento de ciertos objetos, pero el problema viene cuando usas un separador de formularios (o cualquier contenedor similar), ahí ya no hay forma de tocar los Pre-Ini, Post-Ini y variables de los formularios «hijos» por lo que mi formulario queda con algunos controles deshabilitados y no los puedo editar con el nuevo registro.
¿Alguna opción?
jarboleya dice
Hola Marco.
Para acceder desde el formulario principal a los subformularios hay diferentes formas, por ejemplo, cambiar valores a variables locales del subformulario y que eso afecte a los controles, usando el API de Velneo para JavaScript se pueden hacer muchas cosas como cargar plurales de una vista de datos, activar un timer que ejecuta un manejador, también se puede usar la conexión de evento OnShow para hacer lo que corresponda en ese momento, se podrían quitar las pestañas y volver a crearlas tras generar el registro. Hay muchas formas de hacerlo con el API de Velneo para JavaScript.