Sincronizar vistas de datos en un formulario sin origen

Interesante la cuestión que planteaba Joaquín Daneri en este post del foro de Velneo V7. Básicamente quería sincronizar vistas de datos dentro de un formulario sin origen.

Aunque mi «padawan» Paco Satué ya ha dado un posible solución al problema planteado (usando vJavaScript) vamos a ver otra alternativa más sencilla sin utilizar vJavaScript.

El resultado final será algo parecido a esto:

Sincronizar vistas de datos

Como podéis ver, dentro de un formulario sin origen, tenemos 3 vistas de datos:

  • En la primera visualizamos los proyectos.
  • Cuando seleccionamos un proyecto, nos aparece a la derecha el formulario con la ficha del proyecto
  • En la vista de datos inferior aparecen las tareas del proyecto seleccionado.

Creando las vistas de datos

Para mostrar los registros de la primera vista de datos… nada nuevo. Un proceso con origen ninguno y destino la lista de proyectos… sin ninguna instrucción. Recordad que la carga se realiza en el manejador de evento «Refrescar» (puedes ver un ejemplo de un proceso similar en este post).

A esta primera vista de datos le vamos a llamar «PROYECTOS»

Creando los objetos necesarios

Vamos a ver los objetos que vamos a necesitar para componer nuestras vistas de datos.

Para la vista de datos que muestra el formulario de la ficha seleccionada necesitaremos

  • Un Objeto Cesta de la tabla «Proyectos» que será donde dejaremos el registro del proyecto seleccionado para pasárselo a la vista de datos del formulario. La llamaremos «PROYECTOS»
  • Un formulario de la tabla «Proyectos» para mostrar los datos de la ficha seleccionada en la primera vista de datos. Le llamaremos «PROYECTO«
  • Un proceso con origen ninguno y destino una ficha de la tabla de proyectos (le llamaremos «FICHA_PROYECTO«) para devolver la ficha del proyecto a la vista de datos. En este proceso, procesaremos la cesta «PROYECTO«, seleccionaremos la primera ficha y la devolveremos a la salida para ser mostrada en el formulario:
  • Proceso Ficha proyecto

  • Un objeto vista de datos (le llamaremos «FICHA_PROYECTO«) que tendrá como primer objeto el proceso «FICHA_PROYECTO» y como segundo objeto el formulario «PROYECTO»

Para la vista de datos que muestra la lista de tareas del proyecto seleccionado necesitaremos

  • Un proceso (vacio) con origen ninguno y destino una lista de la tabla tareas (le llamaremos «TAREAS_EMPTY«) para devolver la lista de las tareas del proyecto seleccionado
  • Un proceso con origen ninguno y destino una lista de la tabla tareas (le llamaremos «TAREAS_PROYECTO_3P«) que se ejecutará en el manejador de objeto «CAMBIAR_REGISTRO» y que devolverá la tareas del proyecto seleccionado. En este proceso tendremos que crear una variable local para pasarle el proyecto seleccionado (en este caso numérica):
  • Tareas por proyecto

  • Un objeto vista de datos (le llamaremos «TAREAS_PROYECTO«) que tendrá como primer objeto el proceso «TAREAS_EMPTY» y como segundo objeto un alternador o cualquier objeto de tipo lista de la tabla de tareas

Además necesitaremos crear un manejador y una conexión de evento en el formulario sin origen para controlar el cambio del registro seleccionado. Como soy un tío original, ambos objetos se van a llamar «CAMBIAR_REGISTRO«. La conexión de evento estará asociada a la señal «Item: cambio del seleccionado» del control «PROYECTO» (la primera vista de datos)

Cambiar registro

En este manejador realizamos lo siguiente

  • Creamos una cesta local de la tabla tareas
  • Leemos la ficha seleccionada por el usuario y guardamos su ID en la variable ‘REG_SELECT
  • Creamos un manejador de objeto del proceso «TAREAS_PROYECTO»
  • Con la instrucción «Set variable local de objeto» le pasamos al proceso que busca las tareas del proyecto el proyecto seleccionado por el usuario
  • Disparemos el objeto en tercer plano y guardamos los registros devueltos en una cesta local de tareas (creada al principio del manejador
  • Procesamos la lista de tareas del proyecto y le añadimos los registros guardados en la cesta de tareas.
  • Limpiamos el objeto cesta «PROYECTOS» por si teníamos algún registro guardado.
  • Le agregamos a la cesta la ficha del proyecto seleccionado por el usuario
  • Con la instrucción «Interfaz:Recalcular (FICHA_PROYECTO)» forzamos a que se vuelva a ejecutar el proceso «FICHA_PROYECTO con lo que se procesará el contenido del objeto cesta y se devolverá la ficha al formulario.

Quisiera dar las gracias a José Luis López (Pepeto) por iluminarme para la realización de este post

Esto es todo lo que hay que hacer para poder sincronizar vistas de datos en un formulario sin origen. ¿Tienes otra alternativa? ¡Cuéntamelo mas abajo!

Francisco José Vila Martín
ayudavelneo@ayudavelneo.com

Francisco José Vila es autor del blog Ayudavelneo desde donde ayuda a desarrolladores que se están iniciando en Velneo a acortar su curva de aprendizaje para que obtengan beneficios y sean rentables desde el minuto 1. Además es programador certificado y formador en la plataforma de desarrollo de aplicaciones empresariales Velneo V7. Ampliar información

3 Comments
  • Juanjo Gutierrez
    Posted at 14:21h, 15 febrero Responder

    Hola Francisco:
    Ante todo muchas gracias por tu información, que me ha venido de perlas.
    Llevo un montón de tiempo pegándome con lo que creo que debe ser una tontería, pero soy incapaz de resolverlo:

    Si en el formulario del proyecto, junto a los botones ACEPTAR y CANCELAR, añado el botón ELIMINAR, tras el borrado de la ficha, ¿ Como puedo refrescar la vista de nuevo ?

    No he querido recurrir a variables globales y timers, por supuesto, pero con acciones, señales, etc no lo veo, a no ser que deba recurrir a Javascript.

    Muchas gracias y enhorabueno por tu blog y trabajos.
    Un saludo, Juanjo Gutiérrez.

  • Gonzalo Torre
    Posted at 16:17h, 15 enero Responder

    Buenas tardes Francisco,

    Se me ha dado el caso de tener que hacer algo parecido a esto. La única diferencia es que el forumulario donde están las vistas de datos es con origen. He intentado adaptar tu ejemplo modificando el proceso FICHA_PROYECTO poniéndole origen ficha pero no me funciona.

    Es como si cuando hago «Cesta: Procesar» no hiciera nada. Supongo que, en principio, debería funcionar igual. ¿Puedo estar haciendo algo mal?

    He modificado el sistema utilizando una variable global en memoria en lugar de la cesta para almacenar la ficha en curso, y así funciona.

    Un saludo

    Gonzalo Torre

  • Gonzalo Torre
    Posted at 16:52h, 15 enero Responder

    Buenas tardes de nevo,

    Ya he visto el error. resulta que no había asignado ninguna rejilla al definir la cesta y por eso no funcionaba. Curioso, ¿no?

Post A Comment

Información básica sobre Protección de Datos: Responsable: Francisco José Vila Martín. Finalidad: Gestionar y moderar los comentarios. Legitimación: Tu consentimiento. Destinatarios: Tus datos se alojarán en los servidores de Web Empresa S.L. (UE). Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir los datos, así como otros derechos, como se explica en la información adicional. Información adicional: Puedes consultar la información adicional y detallada sobre protección de datos personales en mi Política de Privacidad.

Pin It on Pinterest