ABAP/4 часть 3

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 OBJECTh1.
CALL METHOD h1->increment.

С ОПЕРАТОРОМ RETURN

REPORT zprogram1denisov.
CLASS sqr DEFINITION.
PUBLIC SECTION.
CLASS-METHODSsqr IMPORTING VALUE(numTYPE f
RETURNING VALUE(resTYPE 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).

Наследование 

Наследование реализуется с помощью дополнения 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-METHODSincrement_counter.
CLASS-EVENTS critical_value
EXPORTING VALUE(excessTYPE i.
PRIVATE SECTION.
CLASS-DATAcount     TYPE i,
threshold TYPE VALUE 10.
ENDCLASS.

CLASS counter IMPLEMENTATION.
METHOD increment_counter.
DATA diff TYPE i.
ADD 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.