13
ELTE SAP EXCELLENCE CENTER Oktatóanyag Sas László: ABAP Objects Objektumorientált ABAP 1. ABAP Objects Az oktatás célja az alapvető nyelvi elemek megismertetése. Az objektum-orientált programozás elméletének ismerete előfeltétel, éppen ezért ez nem kerül bemutatásra. Az oktatás folyamán használt példák a fent látható egyszerű modell implementációi. Osztály CLASS <osztálynév> DEFINITION. ENDCLASS. CLASS <osztálynév> IMPLEMENTATION. ENDCLASS. A definíciós részben definiálja a fejlesztő az egyes attribútumokat, metódusokat, eseményeket, konstansokat, típusokat és az implementált interfészeket. Az implementációs részben csak a metódusok implementációja A CLASS utasítás nem ágyazható be, azaz nem lehet osztályon belül osztályt definiálni. Definíciós rész Itt definiálja a fejlesztő az attribútumokat, metódusokat Implementációs rész Itt implementálja a fejlesztő a metódusok (módszerek) törzsét.

ABAP OBJECTS - sap.elte.husap.elte.hu/sap_abap/ABAP_Objects.pdf · ELTE SAP EXELLENE ENTER Oktatóanyag Sas László: ABAP Objects – Objektumorientált ABAP 1. ABAP Objects Az oktatás

  • Upload
    doananh

  • View
    293

  • Download
    0

Embed Size (px)

Citation preview

ELTE SAP EXCELLENCE CENTER Oktatóanyag Sas László: ABAP Objects – Objektumorientált ABAP

1.

ABAP Objects Az oktatás célja az alapvető nyelvi elemek megismertetése. Az objektum-orientált programozás elméletének ismerete előfeltétel, éppen ezért ez nem

kerül bemutatásra. Az oktatás folyamán használt példák a fent látható egyszerű modell implementációi.

Osztály CLASS <osztálynév> DEFINITION.

ENDCLASS.

CLASS <osztálynév> IMPLEMENTATION.

ENDCLASS.

A definíciós részben definiálja a fejlesztő az egyes attribútumokat, metódusokat, eseményeket, konstansokat, típusokat és az implementált interfészeket. Az implementációs részben csak a metódusok implementációja szerepelhet. A CLASS utasítás nem ágyazható be, azaz nem lehet osztályon belül osztályt definiálni.

Definíciós rész

Itt definiálja a fejlesztő az

attribútumokat, metódusokat

(módszereket), stb.

Implementációs rész

Itt implementálja a fejlesztő a

metódusok (módszerek) törzsét.

ELTE SAP EXCELLENCE CENTER Oktatóanyag Sas László: ABAP Objects – Objektumorientált ABAP

2.

Általános osztály-definíció CLASS <osztálynév> DEFINITION.

PUBLIC SECTION.

TYPES:

CONSTANTS:

CLASS-DATA:

DATA:

CLASS-METHODS:

METHODS:

PROTECTED SECTION.

PRIVATE SECTION.

ENDCLASS.

Konstansokat (CONSTANTS) és típusokat (TYPES) a már megszokott módon definiáljuk. A DATA utasítással definiálhatók a példány attribútumok, míg a CLASS-DATA-val a statikus (vagy osztály) attribútumok. A METHODS utasítással adhatók meg az egyes metódusok (módszerek), míg CLASS-METHODS-zal a statikus metódusok. Az egyes elemek láthatóságát azzal adhatja meg a fejlesztő, hogy a megfelelő részbe (PUBLIC, PROTECTED vagy PRIVATE SECTION-be) helyezi el az adott elemet. PUBLIC: Mindenki számára látható. Az egyes elemhez közvetlen hozzáférése van a fejlesztőnek. PROTECTED: Csak az adott osztályban, illetve az alosztályaiban látható, érhető el. PRIVATE: Csak az osztályon belül látható. Kívülről illetve az alosztályokból nem érhető el. Általános osztály-implementáció CLASS <osztálynév> IMPLEMENTATION.

METHOD class_constructor.

ENDMETHOD.

METHOD constructor.

ENDMETHOD.

METHOD <metódus_1>.

ENDMETHOD.

METHOD <metódus_2>.

ENDMETHOD.

ENDCLASS.

Két speciális metódus létezhet egy osztálynál. Az egyik a class_constructor, ami egy statikus konstruktor. Egy program életében csak egyszer fut le, mégpedig még azelőtt, hogy az osztályhoz először hozzáférnének, azaz mielőtt még létrehozna a fejlesztő egy objektumot, vagy hozzáférne egy statikus attribútumhoz, vagy meghívna egy statikus

ELTE SAP EXCELLENCE CENTER Oktatóanyag Sas László: ABAP Objects – Objektumorientált ABAP

3.

metódust, vagy mielőtt beregisztrálná egy statikus metódusát eseményfigyelésre, vagy egy statikus eseményére beregisztrálna egy eseményfigyelőt. A másik a constructor, ami egy konstruktor. Minden osztálynak csak egy konstruktora lehet, de nem kötelező definiálni. Automatikusan meghívódik, amikor a fejlesztő kiad egy CREATE OBJECT utasítást (lásd később!). Attribútumok definiálása DATA <változó> TYPE <típus>.

DATA <változó> TYPE <típus> VALUE <érték>.

DATA <változó> TYPE <típus> READ-ONLY.

DATA <változó> LIKE <változó>.

DATA <változó> TYPE REF TO <osztály>.

DATA <változó> TYPE REF TO <interfész>.

Az osztályokban csak a TYPE-pal lehet megadni az attribútum (változó) típusát. LIKE-ot csak abban az esetben használhat a fejlesztő, ha egy – az osztályon belüli – változóra hivatkozik. A VALUE-val a fejlesztő megadhatja egy változó kezdőértékét. A READ-ONLY opció megadásával egy publikus attribútum elérhető az osztályon kívül, de módosítani csak az osztály metódusain belül lehet. Csak PUBLIC SECTION-ben használható. A TYPE REF TO-val egy referenciaváltozót lehet definiálni, ami egy osztály egy példányára, vagy annak egy alosztályának egy példányára, vagy egy a megadott interfészt implementáló osztály egy példányára mutat. Az attribútumok lehetséges típusai

Elemi típusok ▪ C, I, P, STRING ▪ TYPE REF TO (hivatkozás)

Data Dictionary-ben definiált típusok Fejlesztő által definiált típusok

Metódusok definiálása METHODS:

<metódus>

[ IMPORTING <be. vátozó1> TYPE <típus>

<be. vátozóN> TYPE <típus>

EXPORTING <ki. változó1> TYPE <típus>

<ki. változóN> TYPE <típus>

CHANGING <mód. változó1> TYPE <típus>

<mód. változóN> TYPE <típus>

RETURNING VALUE(vissz. változó>) TYPE <típus>

{RAISING|EXCEPTIONS} <kivétel1>

<kivételN> ].

Egy metódusnak 0 vagy több bemeneti paramétere (IMPORTING), 0 vagy több kimeneti paramétere (EXPORTING) és 0 vagy több módosítható paramétere (CHANGING) lehet. EXPORTING vagy CHANGING helyett egy úgynevezett függvény metódusnak van egy RETURNING része, amely egy formális paramétert definiál (<vissz. változó>) visszatérési értékként. A visszatérési értéket mindenképpen érték szerint (VALUE) kell átadni.

ELTE SAP EXCELLENCE CENTER Oktatóanyag Sas László: ABAP Objects – Objektumorientált ABAP

4.

Egy metódus 0 vagy több kivételt (RAISING vagy EXCEPTIONS) válthat ki. A RAISING-et osztály-alapú (CX_STATIC_CHECK vagy CX_DYNAMIC_CHECK alosztályai), míg az EXCEPTIONS-t a nem osztály-alapú kivételek deklarálásához használhatja a fejlesztő. Példa egy osztály-definicióra CLASS lcl_arucikk DEFINITION.

PUBLIC SECTION.

CONSTANTS: c_afa_kulcs_20 TYPE p DECIMALS 2 VALUE '0.2'.

METHODS:

constructor,

leker_azonosito EXPORTING azonosito TYPE i,

beallit_azonosito IMPORTING azonosito TYPE i,

leker_nev EXPORTING nev TYPE string,

beallit_nev IMPORTING nev TYPE string,

leker_afa_kulcs EXPORTING afa_kulcs TYPE p,

beallit_afa_kulcs IMPORTING afa_kulcs TYPE p,

leker_netto_beszerzesi_ar EXPORTING netto_beszerzesi_ar

TYPE p,

beallit_netto_beszerzesi_ar IMPORTING netto_beszerzesi_ar

TYPE p,

leker_arres EXPORTING arres TYPE p,

beallit_arres IMPORTING arres TYPE p.

PRIVATE SECTION.

DATA:

azonosito TYPE i,

nev TYPE string,

afa_kulcs TYPE p DECIMALS 2,

netto_beszerzesi_ar TYPE p DECIMALS 2,

arres TYPE p DECIMALS 2.

ENDCLASS.

Az lcl_arucikk osztálynak van egy publikus konstansa, egy publikus konstruktora, további beállító és lekérdező metódusai a privát attribútumaira. Példa egy osztály-implementációra CLASS lcl_arucikk IMPLEMENTATION.

METHOD constructor.

me->azonosito = 0.

me->nev = ''.

me->afa_kulcs = c_afa_kulcs_20.

me->netto_beszerzesi_ar = 0.

me->arres = 10 / 100.

ENDMETHOD.

METHOD leker_azonosito.

azonosito = me->azonosito.

ENDMETHOD.

METHOD beallit_azonosito.

me->azonosito = azonosito.

ENDMETHOD.

ENDCLASS.

ELTE SAP EXCELLENCE CENTER Oktatóanyag Sas László: ABAP Objects – Objektumorientált ABAP

5.

A fenti ábrán az lcl_arucikk osztály implementációja látható (a legtöbb attribútum lekérdező és beállító metódusa helyhiány miatt nem kerül megjelenítésre). Az első metódus maga a konstruktor. A második az azonosito attribútum lekérdező metódusa, míg a harmadik ugyanennek az attribútumnak a beállító/módosító metódusa. Amennyiben egy metóduson belül a fejlesztő el szeretné érni magát objektumot, aminek a metódusát éppen meghívták, akkor az impliciten elérhető me referenciaváltozót kell használnia. Például a metódus egy paraméterét pont úgy hívják, mint az attribútumot (vagy tagváltozót). A fenti példa több ilyen esetet is bemutat. Objektumok létrehozása

Objektumokat a CREATE OBJECT utasítással lehet létrehozni. A fejlesztő csak referencia-változók segítségével tud objektumokat létrehozni és megcímezni. DATA:

g_ref_arucikk TYPE REF TO lcl_arucikk. … CREATE OBJECT g_ref_arucikk. A g_ref_arucikk egy referencia-változó. Egy mutató egy lcl_arucikk osztályú objektumra. Garbage Collector – Szemétgyűjtő DATA:

g_ref_arucikk1 TYPE REF TO lcl_arucikk,

g_ref_arucikk2 TYPE REF TO lcl_arucikk.

CREATE OBJECT g_ref_arucikk1.

CREATE OBJECT g_ref_arucikk2.

g_ref_arucikk1 = g_ref_arucikk2.

Ha egy objektumra már nem mutat referencia, akkor azt a Garbage Collector eltávolítja a memóriából. A Garbage Collector (Szemétgyűjtő) egy rendszer rutin, amely automatikusan kitörli azokat az objektumokat a főmemóriából, amelyeket már nem lehet megcímezni, és felszabadítja azokat a memóriaterületeket, amelyeket elfoglaltak. Először a g_ref_arucikk1 egy könyvre, a g_ref_arucikk2 pedig egy CD-re mutat. A következő lépésben (az értékadás miatt) már mindkettő a CD-re mutat. Mivel a könyv objektumra már nem mutat semmilyen referencia, azért a rendszer eltávolítja azt a memóriából. A rendszer ellenőrzi a főmemóriában az összes független referenciát (ezeket nem egy osztályon belül definiálták). A rendszer megjelöli azokat az objektumokat, amelyekre ezek a referenciák mutatnak. A rendszer megjelöli azokat az objektumokat is, amelyekre egy osztály vagy interfész referencia attribútuma mutat.

ELTE SAP EXCELLENCE CENTER Oktatóanyag Sas László: ABAP Objects – Objektumorientált ABAP

6.

A nem-megjelölt objektumokat eltávolítja a főmemóriából. Objektumok használata

A fejlesztő a CREATE OBJECT-tel hozza létre az új objektumokat. Tagváltozók elérése:

▪ <osztálynév>=><statikus_attribútum> ▪ <példány>-><példány_attribútum>

Metódusok meghívása: ▪ CALL METHOD <osztálynév>=><statikus_metódus> … ▪ CALL METHOD <példány>-><példány_metódus> …

Konstruktor A CREATE OBJECT utasítás ezt a metódust hívja meg. Egy osztálynál csak egy darab létezhet (ha nem definiálta a fejlesztő, akkor is létezik egy

implicit konstruktor.) Csak PUBLIC lehet. Csak IMPORTING paraméterei lehetnek. Dobhat kivételeket, ilyenkor a példány nem jön létre.

Funkcionális (függvény) metódusok Példa definíció:

METHODS: eladasi_ar RETURNING VALUE(ar) TYPE WAERS.

Példa implementáció: METHOD eladasi_ar. ar = ( netto_beszerzesi_ar + netto_beszerzesi_ar * arres ) * ( 1 + afa_kulcs ). ENDMETHOD. Funkcionális metódusoknak nevezzük azokat a metódusokat, amelyek rendelkeznek RETURNING paraméterrel. Értékszerinti átadás (VALUE) használata kötelező! Ezen kívül csak IMPORTING paraméterei lehetnek. Kivételeket dobhatnak. Típusnak nem adható meg generikus típus (pl. c, p, stb.). Funkcionális (függvény) metódusok hívása

A visszatérési érték egy RECEIVING paraméterbe kerül: Pl.: CALL METHOD g_ref_arucikk->eladasi_ar RECEIVING ar = g_eladasi_ar.

Közvetlenül többféle formátumban is meghívható: ▪ Aritmetikai és bit (COMPUTE) kifejezések ▪ Logikai kifejezések ▪ MOVE, CASE, LOOP

Pl.: IF g_ref_arucikk->eladasi_ar( ) > 0. … ENDIF.

ELTE SAP EXCELLENCE CENTER Oktatóanyag Sas László: ABAP Objects – Objektumorientált ABAP

7.

Öröklés, származtatás CLASS <alosztálynév> DEFINITION INHERITING FROM <ősosztálynév>.

ENDCLASS.

Ha a fejlesztő egy alosztályt szeretne létrehozni, akkor a DEFINITION részben meg kell adni az ősosztályt az INHERITING FROM nyelvi elem segítségével. Egy osztálynak csak egy ősosztálya lehet. Példa a származtatásra CLASS lcl_konyv DEFINITION INHERITING FROM lcl_arucikk.

PUBLIC SECTION.

METHODS:

constructor,

leker_szerzo EXPORTING szerzo TYPE string,

beallit_szerzo IMPORTING szerzo TYPE string,

leker_oldalak EXPORTING oldalak TYPE i,

beallit_oldalak IMPORTING oldalak TYPE i,

leker_nyelv EXPORTING nyelv TYPE string,

beallit_nyelv IMPORTING nyelv TYPE string.

PRIVATE SECTION.

DATA:

szerzo TYPE string,

oldalak TYPE i,

nyelv TYPE string.

ENDCLASS.

Az lcl_konyv osztály az lcl_arucikk osztályból származik. Újabb attribútumokkal (szerzo, oldalak, nyelv) és metódusokkal (konstruktor és lekérdező/beállító) bővül. Metódus újradefiniálása CLASS <osztálynév> DEFINITION INHERITING FROM <ősosztálynév>.

PUBLIC SECTION.

METHODS:

<metódusnév> [FINAL] REDIFINITION.

ENDCLASS.

Ha a fejlesztő meg szeretné változtatni egy alosztályban egy metódus viselkedését, akkor a metódust újra kell definiálni az alosztályban. Példa a metódus újradefiniálására CLASS lcl_antikkonyv DEFINITION INHERITING FROM lcl_konyv.

PUBLIC SECTION.

METHODS:

eladasi_ar REDEFINITION.

ENDCLASS.

CLASS lcl_antikkonyv IMPLEMENTATION.

METHOD eladasi_ar.

ar = super->eladasi_ar( ) * ( 1 - kedvezmeny ).

ENDMETHOD.

ENDCLASS.

ELTE SAP EXCELLENCE CENTER Oktatóanyag Sas László: ABAP Objects – Objektumorientált ABAP

8.

Az lcl_antikkonyv osztályban a fejlesztő felüldefiniálja az eladasi_ar metódust. Ehhez felhasználja az újonnan bevezetett kedvezmeny attribútumot és az eladasi_ar ősosztálybeli implementációját. Absztrakt osztályok és metódusok CLASS <osztálynév> DEFINITION ABSTRACT.

PUBLIC SECTION.

METHODS:

<metódusnév> ABSTRACT

IMPORTING …

ENDCLASS.

Absztrakt osztályokat nem lehet példányosítani, de lehet olyan referencia-változónk, ami az absztrakt osztályra mutat. Ténylegesen az alosztályok példányaira mutat. Ha egy osztálynak legalább egy absztrakt metódusa van, akkor az osztály is absztrakt. A fejlesztő az absztrakt metódusokat a DEFINITION részben definiálja, de nem implementálja. Ezt az alosztályokban teszi meg. Statikus metódusok és konstruktorok nem lehet absztraktak. Példa az absztrakt osztályra CLASS lcl_arucikk DEFINITION ABSTRACT.

ENDCLASS.

Az lcl_arucikk osztály egy absztrakt osztály. Valójában csak az alosztályainak (lcl_konyv, lcl_antikkonyv, lcl_ekonyv, stb…) a példányai létezhetnek. CREATE OBJECT … TYPE … CREATE OBJECT <referencia_egy_absztrakt_osztályra> TYPE <nem_absztrakt_alosztály> A fejlesztő használhat olyan referenciát, ami egy absztrakt osztályra mutat. Ha létre kíván hozni egy új objektumot, és a hivatkozást egy ilyen referenciában tárolná el, akkor a CREATE OBJECT-et ki kell egészíteni a TYPE résszel. Példa a CREATE OBJECT … TYPE …-ra DATA: g_ref_arucikk TYPE REF TO lcl_arucikk. … CREATE OBJECT g_ref_arucikk TYPE lcl_konyv. A példában a fejlesztő definiál egy g_ref_arucikk referencia-változót, ami egy lcl_arucikk-re mutat. Létrehoz egy lcl_konyv példányt. Az erre való hivatkozást eltárolja a g_ref_arucikk változóban. Végleges osztályok és metódusok

CLASS <osztálynév> DEFINITION FINAL …

ENDCLASS.

CLASS <osztálynév> DEFINITION …

PUBLIC SECTION.

METHODS:

<metódusnév> FINAL …

ENDCLASS.

Végleges osztályoknak nem lehetnek alosztályai. Végleges metódust nem lehet újradefiniálni egy alosztályban.

ELTE SAP EXCELLENCE CENTER Oktatóanyag Sas László: ABAP Objects – Objektumorientált ABAP

9.

Interfészek

Az interfészek leírják egy osztálynak a külvilággal való külső kapcsolódási pontjait. Ezek elsősorban metódusok. Interfész definiálása és implementálása

INTERFACE <interfésznév>.

DATA:

METHODS:

ENDINTERFACE.

CLASS <osztálynév> DEFINITION …

PUBLIC SECTION.

INTERFACES:

<interfésznév>.

ENDCLASS.

CLASS <osztálynév> IMPLEMENTATION.

METHOD <interfésznév>~<metódusnév>.

ENDMETHOD.

ENDCLASS.

Az interfész csak definíció tartozik, implementáció nem. Interfész definiálásakor a fejlesztő felsorolhat attribútumokat is a metódusok mellett. Ha a fejlesztő implementálni szeretne egy interfészt, akkor először az osztály DEFINITION részben fel kell sorolnia azt az INTERFACES részben. Utána el kell készítenie a metódusok implementációját az osztály IMPLEMENTATION részében. Az interfészben definiált attribútumokat és metódusokat <interfésznév>~<attribútum> vagy <interfésznév>~<metódus> formában érheti el a fejlesztő. Példa az interfészre INTERFACE lif_letoltheto.

ELTE SAP EXCELLENCE CENTER Oktatóanyag Sas László: ABAP Objects – Objektumorientált ABAP

10.

DATA: meretb TYPE i. METHODS: meret EXPORTING meret TYPE i. ENDINTERFACE. A lif_letoltheto interfész definiálja a meret metódust. Minden olyan osztály, ami implementálja a lif_letoltheto-t, annak a példányainál a fejlesztő le tudja kérdezni a méretet, illetve ezeket árucikkeket a vásárlók le is tudják tölteni. Példa az interfész implementálására CLASS lcl_ekonyv DEFINITION INHERITING FROM lcl_konyv.

PUBLIC SECTION.

INTERFACES:

lif_letoltheto.

METHODS:

constructor,

leker_formatum EXPORTING formatum TYPE string,

beallit_formatum IMPORTING formatum TYPE string.

PRIVATE SECTION.

DATA:

formatum TYPE string.

ENDCLASS.

CLASS lcl_ekonyv IMPLEMENTATION. … METHOD lif_letoltheto~meret. meret = me->lif_letoltheto~meretB. ENDMETHOD. … ENDCLASS. Példa az implementált metódus meghívására DATA:

g_ref_ekonyv TYPE REF TO lcl_ekonyv,

g_meret TYPE i.

CALL METHOD g_ref_ekonyv->lif_letoltheto~meret

IMPORTING

meret = g_meret.

Mint az látható, elég nehézkes az interfészekben definiált metódusok és attribútumok kezelése. ALIAS-ok Hogyan lehet meghívni egy metódust, amelyet egy interfészben definiáltak, de egy osztályban implementáltak?

<interfésznév>~<metódus> ALIASES:

<új_metódusnév> FOR <interfésznév>~<metódus>. Lehetőség van egy alias bevezetésére. A fejlesztőnek ezentúl nem kell kiírnia az interfész nevét programozás közben. Az ALIASES részt az osztály definíciójába kell elhelyezni. Példa az alias használatára CLASS lcl_ekonyv DEFINITION INHERITING FROM lcl_konyv.

PUBLIC SECTION.

INTERFACES:

ELTE SAP EXCELLENCE CENTER Oktatóanyag Sas László: ABAP Objects – Objektumorientált ABAP

11.

lif_letoltheto.

ALIASES:

meret FOR lif_letoltheto~meret.

ENDCLASS.

Ebben a példában a fejlesztő definiált egy meret alias-t a lif_letoltheto~meret helyett. DATA: g_ref_ekonyv TYPE REF TO lcl_ekonyv, g_meret TYPE i. … CALL METHOD g_ref_ekonyv->meret IMPORTING meret = g_meret. Bár a fejlesztő ezentúl könnyebben meghívhatja a meret metódust, a lif_letoltheto~meret továbbra is használható. Típuskényszerítés

Szűkítés (narrowing cast): <ref_ősosztály> = <ref_alosztály> Pl.: g_ref_arucikk = g_ref_konyv.

Váltás alosztályra (down cast): <ref_alosztály> ?= <ref_ősosztály> Pl.: g_ref_konyv ?= g_ref_arucikk. Az első esetben egy szimpla értékadás (=) bőven elegendő. A második eset már nem ennyire triviális, mert semmi sem garantálja, hogy egy árucikk egyben egy könyv is. Erre vezeték be a ?= operátort. Eseménykezelés

Események definiálása Események kiváltása Események figyelése és lekezelése

Események definiálása CLASS <osztálynév> DEFINITION … PUBLIC SECTION. CLASS-EVENTS: … EVENTS: <esemény> EXPORTING … ENDCLASS. A fejlesztő az eseményeket a CLASS-EVENTS (osztályszintű) vagy az EVENTS (példányszintű) részben definiálja. Csak EXPORTING paraméterei lehetnek és érték szerint (VALUE) kell átadnia azokat a fejlesztőnek. Események kiváltása RAISE EVENT <esemény> EXPORTING … . Eseményeket a RAISE EVENT utasítással lehet kiváltani. Események figyelése és lekezelése

ELTE SAP EXCELLENCE CENTER Oktatóanyag Sas László: ABAP Objects – Objektumorientált ABAP

12.

CLASS <eseményfigyelő_osztály> DEFINITION. PUBLIC SECTION. METHODS: <metódus> FOR EVENT <esemény> OF <eseményt_kiváltó_osztály> IMPORTING … SENDER. … ENDCLASS.

SET HANDLER <ref_eseményfigyelő>-><metódus> FOR <ref_eseményt_kiváltó> *ACTIVATION …+. Az eseményt figyelő osztályban a fejlesztőnek definiálnia kell egy metódust, ami azt adott osztály adott eseményére fog reagálni. Ezután be kell regisztrálni a SET HANDLER utasítással az eseményt figyelő osztály egy objektumát az eseményt kiváltó osztály egy objektumára. ACTIVATION rész: Ha az ACTIVATION után egy 'X' áll, akkor beregisztrálja az eseményfigyelést. Ilyenkor ez elhagyható. Ha a fejlesztő törölni szeretné a regisztrációt, akkor az ACTIVATION után egy ' ' (szóközt) kell írni. Példa az esemény definiálására CLASS lcl_letolto DEFINITION.

PUBLIC SECTION.

METHODS:

letolt IMPORTING letoltheto TYPE REF TO lif_letoltheto.

EVENTS:

letoltve EXPORTING value(meret) TYPE i.

ENDCLASS.

A példában egy felhasználó egy letöltőt használ egy letölthető árucikk letöltésére. Ha a letöltő letöltötte az árucikket, akkor értesíti egy esemény segítségével a felhasználót. Az lcl_letolto osztály csak a letoltve eseményt váltja ki. Az esemény kiváltása a letolt metódusban történik. Példa az esemény kiváltására CLASS lcl_letolto IMPLEMENTATION.

METHOD letolt.

DATA:

l_meret TYPE i.

CALL METHOD letoltheto->meret

IMPORTING

meret = l_meret.

RAISE EVENT letoltve EXPORTING meret = l_meret.

ENDMETHOD.

ENDCLASS.

A letolt metódusban a fejlesztő lekérdezi a letoltheto objektum méretét, és kiváltja a letoltve eseményt. A letöltött bájtok számát átadja paraméterként. Példa az események figyelésére és lekezelésére CLASS lcl_felhasznalo DEFINITION.

PUBLIC SECTION.

METHODS:

kezel_letoltve FOR EVENT letoltve OF lcl_letolto

IMPORTING meret sender.

ENDCLASS.

Az lcl_felhasznalo osztály egy példánya figyeli majd az lcl_letolto osztály egy példánya által kiváltott letoltve eseményeket. A kezel_letoltve metódus lezeli majd le az eseményt.

ELTE SAP EXCELLENCE CENTER Oktatóanyag Sas László: ABAP Objects – Objektumorientált ABAP

13.

CLASS lcl_felhasznalo IMPLEMENTATION.

METHOD kezel_letoltve.

WRITE: / 'Letöltve (bájt):', meret.

ENDMETHOD.

ENDCLASS.

Ebben az egyszerű példában a fejlesztő csak kiíratja a képernyő a

letöltött bájtok számát.

DATA:

g_ref_letolto TYPE REF TO lcl_letolto,

g_ref_felhasznalo TYPE REF TO lcl_felhasznalo,

g_ref_letoltheto TYPE REF TO lif_letoltheto.

START-OF-SELECTION.

CREATE OBJECT g_ref_letoltheto TYPE lcl_ekonyv.

CREATE OBJECT g_ref_letolto.

CREATE OBJECT g_ref_felhasznalo.

SET HANDLER g_ref_felhasznalo->kezel_letoltve FOR

g_ref_letolto.

CALL METHOD g_ref_letolto->letolt

EXPORTING

letoltheto = g_ref_letoltheto.

Először a fejlesztő létrehoz egy letölthető objektumot. Jelen esetben ez az lcl_ekonyv osztály egy példánya. Utána létrehoz egy letöltőt, majd egy felhasználót. A felhasználót beregisztrálja a letöltő eseményeire. Végül a fejlesztő meghívja a letöltő letolt metódusát, azaz elindul a letöltés. Mi történik ez után? A letöltő letölti az elektronikus könyvet, és kiváltja a letoltve eseményt, amire felfigyel a felhasználó. A képernyőn erre megjelenik a letöltött adatok mérete bájtban.