🚀PROMO #PLANCARRERA2024 - 🔥Bonificaciones, Precios Congelados y Cuotas

 X 

✒️ABAP POO Los Eventos

ABAP POO Los Eventos

ABAP POO Los Eventos

EVENTOS

Los eventos estan sujetos a los atributos de visibilidad, determinando quien esta autorizado para controlar o manejar el evento.

Ejemplo, los eventos publicos pueden ser usados por cualquiera.

La visibilidad de un metodo handler determina quien esta autorizado para registrar el metodo (donde podremos usar SET HANDLER). Los publicos pueden ser usados en cualquier lugar, mientras los privados solo pueden ser usados por el usuario dentro de la clase.

Hay metodos triggers, que disparan un evento, y metodos

Handles que se ejecutan cuando ocurre un event.

EVENTOS DISPARADORES (TRIGGERS)

Dependientes de instancia

La clase (o interfaz) debe declarar el evento en la parte declarativa y disparar el evento en uno de sus metodos.

Para declarar eventos dependientes de instancia, se usa

EVENTS <evento> EXPORTING… VALUE( <ei>) TYPE type [OPTIONAL]

Exporting especifica los parametros que se le pasan al manejador de eventos. Estos siempre se pasan por valor (VALUE).

Los metodos dependientes de instancia tienen el parametro implicito SENDER, que tiene el tipo de referencia a la clase o la interface en la cual el evento es declarado.

Los eventos dependientes de instancia solo pueden ser declarados por metodos dependientes de instancia (no estaticos).

Todos los metodos (dependientens de instancia o estaticos) pueden desencadenar eventos estaticos.

Estaticos

Es el unico tipo de evento que puede ser desencandenado por un evento metido estatico.

Para declarar eventos estaticos se usa

CLASS-EVENTS

Y para dispararlo:

RAISE EVENT <evento> EXPORTING … <ei> = < f i>…

(se le deben pasar todos los parametros formales!) La referencia a sí mismo ME es pasada autoamticamente al parametro implicito SENDER

EVENTOS MANEJADORES (HANDLES)

Se usan para ejecutar una serie de metodos, los cuales tienen que estar definitos como eventos manejadores ede ese evento y estar registrados en tiempo de ejecucion para el evento.

Una clase puede tener metodos manejadores tanto para su propia clase como de otras clases.

Manejador de eventos dependiente de instancia

METHODS <metodo> FOR EVENT <evento> of < cif > IMPORTING … <ei>…

Manejador de eventos estaticos

CLASS-METHODS <metodo> FOR EVENT <evento> of < cif > IMPORTING … <ei>…

La interface de un metodo manejador de eventos solo puede contener parametros FORMALES definidos en la declaracion del evento. Los atributos de los parametros tambien son adoptados por el evento.

El metodo manejador de eventos no necesita usar todos los parametros pasados en la sentencia RAISE EVENT

REGISTRAR A LOS METODOS MANEJADORES DE EVENTOS

Para que un metodo handler pueda reaccionar a un evento, en tiempo de ejecución se debe determinar al disparador al cual va a reaccionear con la sentencia

SET HANDLER <hi> … [FOR] …

Esta sentencia relaciona los metodos manejadores de eventos con sus correspondientes metodos. Hay 4 tipos de eventos:

Eventos dependientes de instancia (declarados en una clase o en una interfaz), en los cuales se usa la palabra clave FOR para especificar la instancia para la cual se quiere registrar el manejador. Se puede especificar una sola instancia como disparador usando una variable referenciada ó para todas las instancias que puedan disparar el evento

SET HANDLER …. <handler i> .. FOR < referencia a instancia > ó

SET HANDLER … <handler i> … FOR ALL INSTANCES.

En caso de aplicarse para todas las intancias, se aplica incluso a instancias que no han sido creadas al momento que se registro el manejador.

Eventos estaticos declarados en una clase o en una interfaz)

No se la palabra FOR

SET HANDLER … <handler i>…

Y se aplica automaticamente a la clase entera o a todas las clases que implementan la interfaz que contiene el evento estatico.

COORDINACION EN EL MANEJO DEL EVENTO

Despues de la sentencia RAISE EVENT, todos los metodos manejadores registrados son ejecutados antes de que la siguiente sentencia sea procesada (es sincronico)

Solo se permiter 64 niveles de anidado para evitar la posibilidad de bucles infinitos.

Como los eventos son registrados de manera dinamica, no se puede saber el orden en el que seran procesados, es por eso que se deben programar todos los manejadores de eventos como si se fueren a ejecutar todos simultaneamente.

Ejemplo

REPORT zejercicio_eventos.

CLASS contador DEFINITION.
PUBLIC SECTION.
METHODS incrementar_contador.
EVENTS valor_critico EXPORTING value(exceso) TYPE i.
PRIVATE SECTION.
DATA: cuenta TYPE i,
umbral TYPE i VALUE 10.
ENDCLASS. "contador DEFINITION

CLASS contador IMPLEMENTATION.

METHOD incrementar_contador.
DATA diferencia TYPE i.
ADD 1 TO cuenta.

IF cuenta > umbral.
diferencia = cuenta - umbral.
RAISE EVENT valor_critico EXPORTING exceso = diferencia.
ENDIF.
ENDMETHOD. "incrementar_contador

ENDCLASS. "contador IMPLEMENTATION

CLASS manejador DEFINITION.
PUBLIC SECTION.
METHODS manejar_exceso FOR EVENT valor_critico OF contador
IMPORTING exceso.
ENDCLASS. "manejador DEFINITION

CLASS manejador IMPLEMENTATION.
METHOD manejar_exceso.
WRITE: / 'El Exceso es: ', exceso.
ENDMETHOD. "manejar_exceso
ENDCLASS. "manejador IMPLEMENTATION

*programa principal

DATA: cuenta TYPE REF TO contador,
manejador TYPE REF TO manejador.

START-OF-SELECTION.

CREATE OBJECT: cuenta, manejador.

SET HANDLER manejador->manejar_exceso FOR ALL INSTANCES.

DO 20 TIMES.
CALL METHOD cuenta->incrementar_contador.
ENDDO.

En pantalla, se mostraria al ejecutar

Eventos en ABAP

El exceso es: 1

El exceso es: 2

..

El exceso es: 10.

Ejemplo ejercicio de practica

Crear un programa que lance un evento cuando el atributo SUM_DEUDAS perteneciente a la clase DEUDA sea mayor a 100.

Para ello definiremos la clase DEUDA y la clase MANEJADOR.

En la clase DEUDA se definirán los siguientes atributos, métodos y eventos:

• Métodos: INCREMENTAR_DEUDA

• Eventos: VALOR_CRITICO

• Atributos: SUM_DEUDAS (tipo I) y UMBRAL (tipo I ) con valor inicial 100

Dentro de la clase MANEJADOR se deberá definir e implementar el evento MANEJAR_EXCESO, el cual imprimirá en pantalla el exceso de deuda.

REPORT zejercicio_eventos_BK54Z.

CLASS deuda DEFINITION.
PUBLIC SECTION.
METHODS incrementar_deuda.
EVENTS valor_critico EXPORTING value(exceso) TYPE i.

PRIVATE SECTION.
DATA: sum_deudas TYPE i,
umbral TYPE i VALUE 100.
ENDCLASS. "deuda DEFINITION

CLASS deuda IMPLEMENTATION.

METHOD incrementar_deuda.
DATA diferencia TYPE i.
ADD 10 TO sum_deudas.

IF sum_deudas > umbral.
diferencia = sum_deudas - umbral.
RAISE EVENT valor_critico EXPORTING exceso = diferencia.
ENDIF.
ENDMETHOD. "incrementar_deuda
ENDCLASS. "deuda IMPLEMENTATION

CLASS manejador DEFINITION.
PUBLIC SECTION.
METHODS manejar_exceso FOR EVENT valor_critico OF deuda
IMPORTING exceso.
ENDCLASS. "manejador DEFINITION

CLASS manejador IMPLEMENTATION.
METHOD manejar_exceso.
WRITE: / 'La deuda es: ', exceso.
ENDMETHOD. "manejar_exceso
ENDCLASS. "manejador IMPLEMENTATION

*Programa principal

DATA: deuda TYPE REF TO deuda,
manejador TYPE REF TO manejador.

START-OF-SELECTION.

CREATE OBJECT: deuda, manejador.

SET HANDLER manejador->manejar_exceso FOR ALL INSTANCES.

DO 20 TIMES.
CALL METHOD deuda->incrementar_deuda.
ENDDO.


 

 

 


Sobre el autor

Publicación académica de Juan Pablo Carro, en su ámbito de estudios para el Máster ABAP POO.

SAP SemiSenior

Juan Pablo Carro

Profesión: Analista de Sistemas - Argentina - Legajo: DB81J

✒️Autor de: 8 Publicaciones Académicas

🎓Egresado de los módulos:

Disponibilidad Laboral: FullTime

Certificación Académica de Juan Carro

✒️+Comunidad Académica CVOSOFT

Continúe aprendiendo sobre el tema "Los Eventos" de la mano de nuestros alumnos.

SAP Expert


Eventos: algunos métodos son disparadores (triggers) y otros manejadores (handlers). Los triggers disparan un evento, mientras que los handlers se ejecutan al ocurrir este. Para disparar un evento, se debe declarar el mismo, y dispararlo en uno de sus métodos. Para declarar eventos dependientes de instancia se usa EVENTS. Los estáticos se definen con CLASS-EVENTS. Los eventos tienen siempre un parámetro SENDER que tiene una referencia a la interfaz en el que el evento es declarado. Los eventos dependientes de la instancia sólo pueden desencadenarse con métodos dependientes de instancia. Todos los métodos pueden desencadenar eventos estáticos (desde un método estático es RAISE...

Acceder a esta publicación

Creado y Compartido por: Daniel Alejandro Monteros Segura

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

1) DISPARAR Y MANEJAR EVENTOS Triggers (Disparadores) son los metodos que disparan un evento. Handlers (Manejadores) son los metodos que se ejecutan cuando ocurre un evento. Para disparar un evento una clase tiene que: Declarar el evento en la parte declarativa de una clase o interface. Disparar el evento en uno de sus metodos. Declarar eventos dependientes de instancia: EVENTS <evt> EXPORTING.... VALUE(<ei>) TYPE type [OPTIONAL]... Declarar eventos estaticos CLASS-EVENTS <evt>... La adicion EXPORTING se usa para especificar parametros que se pasan al manejador de eventos. Los parametros siempre se pasan por valor. Los eventos dependientes de instancia siempre contienen el parametro implicito SENDER, el cual tiene...

Acceder a esta publicación

Creado y Compartido por: Juan Jose Pujol Diaz

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

Triggers: Metodos que disparan eventos. Handlers: Metodos que se ejecutan cuando un evento ocurre. El evento se declara en la parte declarativa de una clase. El evento se dispara en uno de sus metodos (triggers). Declaracion de un evento: EVENTS <evento> EXPORTING VALUE(<EJ>) TYPE type [OPTIONAL]... Declaracion de un evento estatico CLASS-EVENTS <evento> EXPORTING VALUE(<EJ>) TYPE type [OPTIONAL]... Metodos dependientes de instancia disparan eventos estaticos y de instancia. Metodos estaticos disparan solo eventos estaticos. Triggering de un evento: RAISE EVENT <evt> EXPORTING ... <ei> = <fi>.. Manejadores...

Acceder a esta publicación

Creado y Compartido por: Regulo Argotte

 


 

👌Genial!, estos fueron los últimos artículos sobre más de 79.000 publicaciones académicas abiertas, libres y gratuitas compartidas con la comunidad, para acceder a ellas le dejamos el enlace a CVOPEN ACADEMY.

Buscador de Publicaciones:

 


 

No sea Juan... Solo podrá llegar alto si realiza su formación con los mejores!