SAP ABAP - Sự kiện đối tượng

An eventlà một tập hợp các kết quả được định nghĩa trong một lớp để kích hoạt các trình xử lý sự kiện trong các lớp khác. Khi một sự kiện được kích hoạt, chúng ta có thể gọi bất kỳ số lượng phương thức xử lý sự kiện nào. Mối liên kết giữa trình kích hoạt và phương thức xử lý của nó thực sự được quyết định động tại thời điểm chạy.

Trong một cuộc gọi phương thức thông thường, một chương trình gọi sẽ xác định phương thức nào của một đối tượng hoặc một lớp cần được gọi. Vì phương thức xử lý cố định không được đăng ký cho mọi sự kiện, trong trường hợp xử lý sự kiện, phương thức xử lý xác định sự kiện cần được kích hoạt.

Một sự kiện của một lớp có thể kích hoạt một phương thức xử lý sự kiện của cùng một lớp bằng cách sử dụng câu lệnh RAISE EVENT. Đối với một sự kiện, phương thức xử lý sự kiện có thể được định nghĩa trong cùng một lớp hoặc khác lớp bằng cách sử dụng mệnh đề FOR ​​EVENT, như thể hiện trong cú pháp sau:

FOR EVENT <event_name> OF <class_name>.

Tương tự như các phương thức của một lớp, một sự kiện có thể có giao diện tham số nhưng nó chỉ có các tham số đầu ra. Các tham số đầu ra được chuyển tới phương thức xử lý sự kiện bằng câu lệnh RAISE EVENT nhận chúng làm tham số đầu vào. Một sự kiện được liên kết động với phương thức xử lý của nó trong một chương trình bằng cách sử dụng câu lệnh SET HANDLER.

Khi một sự kiện được kích hoạt, các phương thức xử lý sự kiện thích hợp phải được thực thi trong tất cả các lớp xử lý.

Thí dụ

REPORT ZEVENT1. 
CLASS CL_main DEFINITION. 
PUBLIC SECTION. 
DATA: num1 TYPE I. 
METHODS: PRO IMPORTING num2 TYPE I. 
EVENTS: CUTOFF. 
ENDCLASS. 

CLASS CL_eventhandler DEFINITION. 
PUBLIC SECTION. 
METHODS: handling_CUTOFF FOR EVENT CUTOFF OF CL_main. 
ENDCLASS. 

START-OF-SELECTION. 
DATA: main1 TYPE REF TO CL_main. 
DATA: eventhandler1 TYPE REF TO CL_eventhandler. 

CREATE OBJECT main1. 
CREATE OBJECT eventhandler1. 

SET HANDLER eventhandler1→handling_CUTOFF FOR main1. 
main1→PRO( 4 ).
CLASS CL_main IMPLEMENTATION.
METHOD PRO.
num1 = num2.
IF num2 ≥ 2. 
RAISE EVENT CUTOFF.
ENDIF. 
ENDMETHOD.
ENDCLASS.

CLASS CL_eventhandler IMPLEMENTATION.
METHOD handling_CUTOFF.
WRITE: 'Handling the CutOff'. 
WRITE: / 'Event has been processed'. 
ENDMETHOD. ENDCLASS.

Đoạn mã trên tạo ra kết quả sau:

Handling the CutOff 
Event has been processed