MESSAGE Class (SE91)
Сообщения бывают следующих типов:
I – Information messages
Информационное сообщение, появляющееся в виде выскакивающего окна.
E – Error message
Сообщение об ошибке, отображается с строке статуса.
W – Warning message
Предупреждающее сообщение, отображается также в строке статуса.
S – Success/Status message
Успешное завершение
A – Termination/Abend
Ненормальное завершение
После создания класса сообщения его можно вызвать программно
Пример вызова
REPORT zkre_hw5 MESSAGE-ID ZMSGNIK.
START-OF-SELECTION.
MESSAGE e001.
Пример 2
MESSAGE |Result: { result ALIGN = LEFT }| TYPE ‘I’.
ООП
Локальные классы
Локальные классы состоят из ABAP кода, заключенного между операторами CLASS … ENDCLASS. Полное описание класса состоит из секции объявлений и, если необходимо, из секции реализации.
Пример:
CLASS <class> DEFINITION.
…
ENDCLASS.
1.5.4Области видимости
Секция объявлений может включать от одной до трех областей видимости.
CLASS <class> DEFINITION.
PUBLIC SECTION.
…
PROTECTED SECTION.
…
PRIVATE SECTION.
…
ENDCLASS.
ПРИМЕРЫ КЛАССОВ С ОБЛАСТЬЮ ВИДИМОСТЕЙ МЕТОДОВ И ИХ РЕАЛИЗАЦИЕЙ
CLASS c_counter DEFINITION.
PUBLIC SECTION.
METHODS: set IMPORTING value(set_value) TYPE i,
increment,
get EXPORTING value(get_value) TYPE i.
PROTECTED SECTION.
DATA count TYPE i.
ENDCLASS.
CLASS c_counter IMPLEMENTATION.
METHOD set.
count = set_value.
ENDMETHOD.
METHOD increment.
ADD 1 TO count.
ENDMETHOD.
METHOD get.
get_value = count.
ENDMETHOD.
ENDCLASS.
ВЫЗОВ МЕТОДОВ
DATA: h1 TYPE REF TO c_counter.
START-OF-SELECTION.
CREATE OBJECT: h1.
CALL METHOD h1->increment.
С ОПЕРАТОРОМ RETURN
REPORT zprogram1denisov.
CLASS sqr DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: sqr IMPORTING VALUE(num) TYPE f
RETURNING VALUE(res) TYPE f.
PROTECTED SECTION.
CLASS-DATA NUM TYPE f.
CLASS-DATA RES TYPE f.
ENDCLASS.
CLASS sqr IMPLEMENTATION.
METHOD sqr.
RES = NUM * NUM.
WRITE : / res.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
sqr=>sqr( 2 ).
Наследование
Наследование реализуется с помощью дополнения INHERITING FROM в операторе описания класса:
CLASS <subclass> DEFINITION
INHERITING FROM <superclass>.
ПРИМЕР:
CLASS lcl_base DEFINITION.
PUBLIC SECTION.
METHODS:
method1,
method2.
ENDCLASS.
CLASS lcl_sub_class DEFINITION INHERITING FROM lcl_base.
PUBLIC SECTION.
НАСЛЕДОВАНИЕ С ВЫЗОВОМ МЕТОДА СУПЕРКЛАССА В НАСЛЕДНИКЕ
CLASS counter DEFINITION.
PUBLIC SECTION.
METHODS: set IMPORTING value(set_value) TYPE i,
increment,
get EXPORTING value(get_value) TYPE i.
PROTECTED SECTION .
DATA count TYPE i.
ENDCLASS.
CLASS counter IMPLEMENTATION.
METHOD set.
count = set_value.
ENDMETHOD.
METHOD increment.
ADD 1 TO count.
ENDMETHOD.
METHOD get.
get_value = count.
ENDMETHOD.
ENDCLASS.
CLASS counter_ten DEFINITION INHERITING FROM counter.
PUBLIC SECTION.
METHODS increment REDEFINITION .
DATA count_ten.
ENDCLASS.
CLASS counter_ten IMPLEMENTATION.
METHOD increment.
DATA modulo TYPE I.
CALL METHOD super->increment .
write / count.
modulo = count mod 10.
IF modulo = 0.
count_ten = count_ten + 1.
write count_ten.
ENDIF.
ENDMETHOD.
ENDCLASS.
DATA: count TYPE REF TO counter,
number TYPE i VALUE 5.
START-OF-SELECTION.
CREATE OBJECT count TYPE counter_ten .
CALL METHOD count->set EXPORTING set_value = number.
DO 20 TIMES.
CALL METHOD count->increment.
ENDDO.
ИНТЕРФЕЙСЫ
Так же как и классы, интерфейсы могут определяться либо глобально, либо локально в ABAP программе.
Пример:
INTERFACE <intf>.
…
ENDINTERFACE.
Генерация событий
Событие инстанции в классе может быть сгенерировано любым методом класса. Статические события могут быть сгенерированы только любым статическим методом. Для генерации события в методе используется следующий оператор
RAISE EVENT <evt> EXPORTING… <ei> = <fi>…
Определение методов – обработчиков событий
Любой класс может иметь методы, являющиеся обработчиками событий для событий из других классов. Существует также возможность определить методы -обработчики событий в том же классе, где определено событие. Для определения метода-обработчика события используется следующий оператор для метода инстанции.
METHODS <meth> FOR EVENT <evt> OF <cif>
IMPORTING.. <ei>..
ПРИМЕР РЕАЛИЗАЦИИ МЕТОДА И СОБЫТИЯ ( ПЕРЕДАЧА ПАРАМЕТРА В СОБЫТИЕ)
REPORT demo_class_counter_event.
CLASS counter DEFINITION.
PUBLIC SECTION.
METHODS increment_counter.
EVENTS critical_value
EXPORTING value(excess) TYPE i.
PRIVATE SECTION.
DATA: count TYPE i,
threshold TYPE i VALUE 10.
ENDCLASS.
CLASS counter IMPLEMENTATION.
METHOD increment_counter.
DATA diff TYPE i.
ADD 1 TO count.
IF count > threshold.
diff = count – threshold.
RAISE EVENT critical_value
EXPORTING excess = diff.
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS handler DEFINITION.
PUBLIC SECTION.
METHODS handle_excess
FOR EVENT critical_value OF counter
IMPORTING excess.
ENDCLASS.
CLASS handler IMPLEMENTATION.
METHOD handle_excess.
WRITE: / ‘Excess is’, excess.
ENDMETHOD.
ENDCLASS.
DATA: r1 TYPE REF TO counter,
h1 TYPE REF TO handler.
START-OF-SELECTION.
CREATE OBJECT: r1, h1.
SET HANDLER h1->handle_excess FOR ALL INSTANCES. ” для реализации метода для события
DO 20 TIMES.
CALL METHOD r1->increment_counter.
ENDDO.
ТОЖЕ САМОЕ СО СТАТИЧЕСКИМИ ПОЛЯМИ, МЕТОДАМИ И СОБЫТИЯМИ
CLASS counter DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: increment_counter.
CLASS-EVENTS critical_value
EXPORTING VALUE(excess) TYPE i.
PRIVATE SECTION.
CLASS-DATA: count TYPE i,
threshold TYPE i VALUE 10.
ENDCLASS.
CLASS counter IMPLEMENTATION.
METHOD increment_counter.
DATA diff TYPE i.
ADD 1 TO count.
IF count > threshold.
diff = count – threshold.
RAISE EVENT critical_value
EXPORTING excess = diff.
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS handler DEFINITION.
PUBLIC SECTION.
CLASS-METHODS handle_excess
FOR EVENT critical_value OF counter
IMPORTING excess.
ENDCLASS.
CLASS handler IMPLEMENTATION.
METHOD handle_excess.
WRITE: / ‘Excess is’, excess.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
SET HANDLER handler=>handle_excess.
DO 20 TIMES.
CALL METHOD counter=>increment_counter.
ENDDO.