Reutilización de manejadores de eventos


([N1] alejandro-baenacustodes-vitae-com) #1

Hola a todos:

Estoy saneando el código de un proyecto y me encuentro que uso dos manejadores de eventos con el mismo código interno de v7 (excepto por una instrucción), encapsulado en dos formularios distintos.
La parte distinta del código de los dos manejadores podría discriminarla con una variable tipo que usaría en un if interno.
Os adjunto un pantallazo del inspector de objetos donde podéis ver como los formularios:
SERVICIO_TRAMOS3_III_AVF
SERVICIO_TRAMOS_II_III
encapsulan los manejadores:
CALCULAR_GRAFICO_III_AVF
CALCULAR_GRAFICO_II_III

los cuales difieren de una línea de código que podría discriminarse como(pseudocodigo):

      if ($DERIV@cvSignal_dat.dat="II_II")
         Interfaz:Ejecutar II_III ...........
      else
         Interfaz:Ejecutar III_AVF...........

¿Habría alguna manera de “re-utilizar” un manejador de eventos en varios formularios(o controles) de tal manera que para alguna modificación del código solo haya que tocar en un solo lugar?.

Gracias de antemano.


([N3] pacosatu) #2

Hola Alejandro.

La reutilización de Manejadores de evento no es posible porque solo se pueden ejecutar en el contexto del formulario al que pertenecen, es decir, son privados y no se puede ejecutar un Manejador de un formulario desde otro formulario distinto. Además los Manejadores están diseñados para responder a eventos del Interfaz y solo están disponibles cuando el Formulario que los contiene está Visible en pantalla.

Tendrás que crear un Proceso en el que pongas el código a reutilizar. El Proceso debe recibir la parametrización a través de las Variables locales, las Variables Globales y la Ficha Origen de Entrada. Los Manejadores llamarán al Proceso mediante Disparar Objeto fijando previamente los valores de la parametrización. También puedes usar Ejecutar proceso si solamente necesitas pasar la Ficha actual como Origen de la Entrada.

Los Procesos no pueden acceder al Interface de un Formulario, por lo menos de forma nativa.
Con el API y usando alguna que otra chapuza podríamos acceder a cualquier formulario de la Aplicación y desencadenar un evento que ejecute el Manejador, pero eso ni está documentado ni creo que sea buena práctica de programación.

Saludos
Paco Satué


([N3] ereitmann) #3

O tambien estan las funciones que si son muy reutilizables


([N1] alejandro-baenacustodes-vitae-com) #4

Hola, gracias por vuestros posts.

Voy a tirar a partir de vuestros consejos y subo el progreso.

Saludos.