Instance-Events
EVENT evt [ Exporting parameters].
* Declare Event
EVENTS employee_added_to_list EXPORTING VALUE(ex_employee_name) TYPE string.
CLASS-Events
CLASS-EVENT evt [ Exporting parameters].
Declaration of Eventhandler-Methods:
METHODS evt-handler
FOR EVENT evt of CLASS lcl_some_class
[ IMPORTING p1 p2 ... [sender]]
* Event method
METHODS on_employee_added_to_list FOR EVENT employee_added_to_list OF zcl_employee
IMPORTING ex_employee_name sender.
* Event method implimentation
METHOD on_employee_added_to_list.
WRITE: / 'Employee added to list ', ex_employee_name.
ENDMETHOD.
* Raise event
METHOD display_employee.
write: / g_empl_id, / g_empl_name, / g_position, / g_salary.
ULINE.
RAISE event employee_added_to_list EXPORTING ex_employee_name = g_empl_name.
ENDMETHOD.
" Register event
if g_employee1 IS NOT INITIAL.
" Register event
set HANDLER g_employee1->on_employee_added_to_list FOR g_employee1.
IF g_employee1->is_further_educated( ) = abap_true.
g_employee1->raise_salary( 5 ).
ENDIF.
* 2 ways to call component method
call METHOD g_employee1->display_employee( ).
ENDIF.
-----------------------------
sample program
REPORT zqc_first_local_class.
CLASS zcl_employee DEFINITION.
PUBLIC SECTION.
* Declare Event
EVENTS employee_added_to_list EXPORTING VALUE(ex_employee_name) TYPE string.
TYPES: BEGIN OF ty_create_empl,
id TYPE i,
name TYPE string,
position TYPE string,
further_educated TYPE boolean,
END OF ty_create_empl.
METHODS display_employee.
METHODS set_name IMPORTING im_name TYPE string.
METHODS get_name RETURNING VALUE(re_name) TYPE string.
* METHODS constructor IMPORTING im_empl_id TYPE i
* im_empl_name TYPE string
* im_position TYPE string.
METHODS constructor IMPORTING im_employee TYPE ty_create_empl.
METHODS is_further_educated RETURNING VALUE(re_further_educated) TYPE boolean.
METHODS raise_salary IMPORTING im_percent TYPE i.
* Event method
METHODS on_employee_added_to_list FOR EVENT employee_added_to_list OF zcl_employee
IMPORTING ex_employee_name sender.
CLASS-METHODS get_no_of_employees RETURNING VALUE(re_no_of_employees) TYPE i.
CLASS-METHODS display_no_of_employees.
CLASS-METHODS class_constructor.
PRIVATE SECTION.
DATA: g_empl_id TYPE i,
g_empl_name TYPE string,
g_position TYPE string,
g_salary TYPE p LENGTH 4 DECIMALS 2,
g_is_further_educated TYPE boolean.
CLASS-DATA g_no_of_employees TYPE i.
CLASS-DATA g_max_no_of_empl TYPE i.
CONSTANTS co_start_salary TYPE p LENGTH 4 DECIMALS 2 VALUE '2000.00'.
CLASS-METHODS count_employee.
ENDCLASS.
CLASS zcl_employee IMPLEMENTATION.
METHOD display_employee.
write: / g_empl_id, / g_empl_name, / g_position, / g_salary.
ULINE.
RAISE event employee_added_to_list EXPORTING ex_employee_name = g_empl_name.
ENDMETHOD.
METHOD class_constructor.
g_max_no_of_empl = 10.
ENDMETHOD.
METHOD constructor.
IF g_no_of_employees < g_max_no_of_empl.
g_empl_id = im_employee-id.
g_empl_name = im_employee-name.
g_position = im_employee-position.
g_is_further_educated = im_employee-further_educated.
g_salary = co_start_salary.
me->count_employee( ).
* g_empl_id = im_empl_id.
* g_empl_name = im_empl_name.
* g_position = im_position.
* g_salary = co_start_salary.
* me->count_employee( ).
ENDIF.
ENDMETHOD.
METHOD set_name.
g_empl_name = im_name.
ENDMETHOD.
METHOD get_name.
re_name = g_empl_name.
ENDMETHOD.
METHOD count_employee.
add 1 to g_no_of_employees.
ENDMETHOD.
METHOD get_no_of_employees.
re_no_of_employees = g_no_of_employees.
ENDMETHOD.
METHOD display_no_of_employees.
WRITE: / 'Number of Employees ', g_no_of_employees.
ENDMETHOD.
METHOD is_further_educated.
re_further_educated = g_is_further_educated.
ENDMETHOD.
METHOD raise_salary.
me->g_salary = g_salary + ( g_salary / 100 * im_percent ).
ENDMETHOD.
* Event method implimentation
METHOD on_employee_added_to_list.
WRITE: / 'Employee added to list ', ex_employee_name.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA g_employee1 TYPE REF TO zcl_employee.
DATA g_employee2 TYPE REF TO zcl_employee.
DATA g_empl_data TYPE zcl_employee=>ty_create_empl.
TRY .
g_empl_data-id = 1.
g_empl_data-name = 'John Doe'.
g_empl_data-position = 'Sales'.
g_empl_data-further_educated = abap_true.
CREATE OBJECT g_employee1
EXPORTING
im_employee = g_empl_data.
* im_empl_data-id = 1
* im_empl_data-name = 'John Doe'
* im_employee-position = 'Sales'.
CATCH cx_sy_create_object_error.
ENDTRY.
if g_employee1 IS NOT INITIAL.
" Register event
set HANDLER g_employee1->on_employee_added_to_list FOR g_employee1.
IF g_employee1->is_further_educated( ) = abap_true.
g_employee1->raise_salary( 5 ).
ENDIF.
* 2 ways to call component method
call METHOD g_employee1->display_employee( ).
ENDIF.
TRY .
clear g_empl_data.
g_empl_data-id = 2.
g_empl_data-name = 'Quang Cao'.
g_empl_data-position = 'IT'.
g_empl_data-further_educated = abap_false.
CREATE OBJECT g_employee2
EXPORTING
im_employee = g_empl_data.
* im_empl_id = 2
* im_empl_name = 'Quang Cao'
* im_position = 'IT'.
CATCH cx_sy_create_object_error.
ENDTRY.
if g_employee2 IS NOT INITIAL.
" Register event
set HANDLER g_employee2->on_employee_added_to_list FOR g_employee2.
IF g_employee2->is_further_educated( ) = abap_true.
g_employee2->raise_salary( 5 ).
ENDIF.
g_employee2->display_employee( ).
ENDIF.
* Class method
zcl_employee=>display_no_of_employees( ).
No comments:
Post a Comment