# Gestionar eventos entre formularios

**URL:** <https://foros.velneo.com/t/gestionar-eventos-entre-formularios/10588>\
**Category:** Compartir código fuente y ejemplos\
**Created:** [28 Diciembre, 2020 23:08 UTC](https://foros.velneo.com/t/gestionar-eventos-entre-formularios/10588 "2020-12-28T23:08:28Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [28 Diciembre, 2020 23:08 UTC](https://foros.velneo.com/t/gestionar-eventos-entre-formularios/10588/1 "2020-12-28T23:08:28Z")

</div>

Hola.

Ya sabemos que desde un formulario de Velneo no podemos ejecutar el Manejador de evento de otro formulario. Para conseguirlo tenemos que recurrir al **API** y usar un código parecido a este:

`theMainWindow.currentView().centralWidget().control("SEP").form("ALIAS_PROYECO/IMP_DAT").control("BTN_RFE").click()`

Esta forma de programar no es muy eficiente, ya que no es refactorizable y dejará de funcionar en cuanto cambiemos el identificador de algún control de los formularios.

Os propongo un nuevo diseño que facilite la ejecución de un Manejador de evento de un formulario cualquiera del proyecto de aplicación.

En la imagen siguiente muestro el esquema de funcionamiento.

 ![imagen](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/b/b1ab3754cfb2b9b4497b3f4aced366eb78602795.png)

- El elemento principal es un **DOCK** del objeto AUTOEXEC, que contiene una Vista de datos con un Formulario **FRM\_TIMER\_GLOBAL**. Este formulario y su Variable local **NACCION** es accesible desde cualquier formulario de la aplicación y en cualquier momento.
- Los formularios que queremos controlar ( **FRM\_DESTINO\_x** ) disponen de una Conexión de evento **EVT\_TIMER\_GLOBAL** a la señal Timer del formulario global **FRM\_TIMER\_GLOBAL**. Leyendo la variable **NACCION** del formulario global podemos decidir si ejecutamos el Manejador de evento del formulario de destino.
- Un determinado formulario de origen **FRM\_ORIGEN** fija el valor de la variable **NACCION** y dispara el **Timer** del formulario global. La señal Timer dispara los eventos **EVT\_TIMER\_GLOBAL** de todos los formularios abiertos en ese momento y se ejecutan solo los Manejadores de los formularios cuya variable local **NACCION\_MIA** coincida con **NACCION**. Al mismo tiempo el **Timer** del formulario global se detiene para esperar la siguiente petición de otro formulario origen.

El **DOCK** puede estar oculto o usar uno que ya tengamos en uso en nuestra aplicación.

Probadlo y comentarme que os parece esta forma de incorporar una sencilla gestión de eventos entre los formularios de la aplicación.

Una pequeña aportación antes de que termine este dichoso 2020.

Saludos y **feliz 2021**.  
Paco Satué

---

<div class="post-metadata">

**Author:** ![overall](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/overall/32/5437_2.png) [@overall](https://foros.velneo.com/u/overall)\
**Post date:** [29 Diciembre, 2020 16:47 UTC](https://foros.velneo.com/t/gestionar-eventos-entre-formularios/10588/2 "2020-12-29T16:47:55Z")

</div>

Gracias Paco! Feliz 2021 y adios a este maldito 2020

---

<div class="post-metadata">

**Author:** ![enriquealcala](https://avatars.discourse-cdn.com/v4/letter/e/c5a1d2/32.png) [@enriquealcala](https://foros.velneo.com/u/enriquealcala)\
**Post date:** [12 Enero, 2021 12:30 UTC](https://foros.velneo.com/t/gestionar-eventos-entre-formularios/10588/3 "2021-01-12T12:30:20Z")

</div>

Gracias Paco. Muy life is soft. Lo he probado y va perfecto.

Feliz 2021

Un abrazo  
Enrique Alcalá

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [12 Enero, 2021 17:04 UTC](https://foros.velneo.com/t/gestionar-eventos-entre-formularios/10588/4 "2021-01-12T17:04:18Z")

</div>

Hola.

Muchas gracias a los que leéis el foro y sobre todo a los que perdéis un minuto en agradecer las aportaciones de conocimiento y experieciencias con Velneo.

Nos alegra el día y nos da motivos para seguir aportando.

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![tempsmollet](https://avatars.discourse-cdn.com/v4/letter/t/977dab/32.png) [@tempsmollet](https://foros.velneo.com/u/tempsmollet)\
**Post date:** [12 Enero, 2021 19:03 UTC](https://foros.velneo.com/t/gestionar-eventos-entre-formularios/10588/5 "2021-01-12T19:03:07Z")

</div>

Hola Paco,

Me ha ido muy bien este aporte, pues necesitaba ejecutar un manejador para el control de usuarios, y con tus comentarios y la idea que tenia se ha complementado perfectamente.

Saludos, y gracias.

Ramon Denuc  
👍

---

<div class="post-metadata">

**Author:** ![estisoft](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/estisoft/32/5714_2.png) [@estisoft](https://foros.velneo.com/u/estisoft)\
**Post date:** [3 Abril, 2021 11:50 UTC](https://foros.velneo.com/t/gestionar-eventos-entre-formularios/10588/6 "2021-04-03T11:50:42Z")

</div>

Excelente aporte Paco,

Lo probé y funciona perfectamente.

Solo un inconveniente que veo es que funciona solo con el dock de un marco especifico, en mi caso en el ON\_INIT\_CLIENT dependiendo de ciertos parámetros se selecciona el marco, ya que tengo varios , por lo tanto no funciona el timer si no selecciono el marco que tiene el Dock . ¿Alguna idea de como solucionar esto?

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [3 Abril, 2021 17:29 UTC](https://foros.velneo.com/t/gestionar-eventos-entre-formularios/10588/7 "2021-04-03T17:29:02Z")

</div>

Hola estisoft.

Dices:

> Solo un inconveniente que veo es que funciona solo con el dock de un marco especifico …

En realidad no es un incoveniente, esa es la esencia de Velneo, en diseño debemos seleccionar el objeto sobre el que queremos trabajar, sin posibilidad de ejecución dinámica. Es una característica intrínseca del paradigma de programación con Velneo y debemos _sufrirla_ para tener luego aplicaciones que nunca fallan.

Cuando Velneo añadió la posibilidad de seleccionar en tiempo de ejecución (proceso ON\_INIT\_CLIENT) el marco que se usará, se les olvidó implementar una forma “LifeIsSoft” de seleccionar ese Marco en vDevelop.

Por lo tanto, y como ya estamos acostumbrados en Velneo, tendrás que duplicar códigos y funcionalidades. Sin embargo, gracias al API podemos minimizar algo esta tarea.

Si tenemos 3 AUTOEXEC distintos en nuestra aplicación:

- En los 3 Marcos creas el Dock **DOCK\_TIMER** que apuntarán al mismo formulario DOCK\_TIMER\_GLOBAL.
- El manejador de evento de **FRM\_ORIGEN** no varía ya que **theMainWindow** siempre apunta al Marco activo.
- Lo que sí habrá que hacer es crear 3 Conexiones de evento **EVT\_TIMER\_GLOBAL** , una por cada Marco.
- El Manejador de evento **TIMER\_GLOBAL** lo cambias a javascript para trabajar de forma dinámica con la instrucción **theMainWindow.dockDataView(“DOCK\_TIMER”)** y leer la variable **NACCION**.

Y esto no ocurre solo en este caso, sino con cualquier funcionalidad que quieras repetir en los diferentes marcos de tu aplicación.

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![auhunter22](https://avatars.discourse-cdn.com/v4/letter/a/ecc23a/32.png) [@auhunter22](https://foros.velneo.com/u/auhunter22)\
**Post date:** [5 Octubre, 2021 17:47 UTC](https://foros.velneo.com/t/gestionar-eventos-entre-formularios/10588/8 "2021-10-05T17:47:03Z")

</div>

Buen día, excelente aporte, me ha servido bastante, sigan compartiendo informacion util!
