¿Qué son los Eventos?
Los eventos son mensajes levantados por un objeto. Siempre que se cumpla alguna condición, el objeto puede levantar un evento. Por ejemplo, el temporizador ha caducado, el límite de corte ha alcanzado, la interacción con el usuario sucedió etc. Este evento puede ser manejado por el receptor.
El receptor es el que implementa la lógica para controlar el evento. Por ejemplo, cuando el temporizador ha expirado, hacer que la página se cargue de nuevo o cuando se alcanza el límite de corte, dígale al usuario que pare etc.
El objeto diseñador (el que levanta el evento) no necesita saber si se va a tratar el evento ni quién lo hará, sino que da una oportunidad para que cualquier objeto receptor pueda captar y procesar el evento.
Pensemos como símil, en una persona que está realizando un discurso, si alguien de la audiencia tiene cualquier pregunta la puede hacer en ese momento.
Para el receptor, sólo importa el hecho de que el evento se levantó y ahora está atrapado en su controlador de eventos.
Definir los Eventos
Para definir un evento, primero necesitamos indicar su nombre con la palabra clave EVENTS.
También podemos declarar parámetros para el evento que se pueden utilizar para exponer los datos en el receptor. El sistema solo permite poner parámetro de salida para el objeto que va a lanzar el evento y respectivamente estos parámetros de salida (EXPORT) actúan como parámetros de entrada (IMPORT) para los objetos que se encargan de capturar y manejar el evento.
Los eventos se pueden declarar en las interfaces también y van a ser levantados de las clases que implementan las interfaces.
Ejemplo de la declaración de un evento dentro de una clase:
El levantamiento de un evento se hace a través de la palabra clave RAISE EVENT
RAISE EVENT limite_alcanzado.
Manejo de los Eventos
Primero de todo lo que se necesita es crear un objeto receptor. Así, cuando se declara el método en la clase del receptor, se define qué método es el método de control del evento, y esto se consigue con la palabra clave FOR EVENT.
Definición de la clase que va a tratar el evento
Hemos definido el método on_limite_alcanzado, que se va a encargar de tratar la acción necesaria en cuanto salta el evento limite_alcanzado de la clase lcl_main. Es decir, es el método que se va a ejecutar en cuanto la clase lanza el evento con RAISE EVENT.
Lo más importante a tener en cuenta es que el evento se va a ejecutar si algún receptor quiere controlar el evento, y por eso tiene que informar al sistema sobre su intención.
En ABAP, podemos hacerlo a través de SET HANDLER
Configuración del manejador
CREATE OBJECT lcl_manejador_evento.
SET HANDLER lcl_manejador_evento->on_limite_alcanzado FOR lcl_main.
Con este último paso hemos avisado al sistema de que el objeto receptor lcl_manejador_evento va a controlar el evento limite_alcanzado de la clase lcl_main, que es el objeto que levanta el evento.
Ejemplo práctico.
En un programa ejecutable definimos e implementamos la clase CL_SCREEN que levanta el evento TOUCH_SCREEN. En el evento exportamos dos parámetros con la posición horizontal y vertical.