1
2
3
•Az adatbázistáblákat az R/3-rendszer az ABAP Dictionary segítségével kezeli. Ott tekinthetők meg az adatbázistábla összes műszaki tulajdonságával kapcsolatos aktuális információk. Az adatbázisban azonos sortípussal és névvel létrehozott adatbázistáblák neve az ABAP Dictionary-ben transzparens tábla. •Ha meg szeretné tekinteni a transzparens táblát az ABAP Dictionary-ben, többféle navigációs lehetőség közül választhat: •A Munkaeszközök->ABAP Workbench->Fejlesztés->Dictionary útvonalon közvetlenül az ABAP Dictionary-be jut, itt írja be a transzparens tábla nevét a megfelelő beviteli mezőbe. •Egy program ABAP Editorából közvetlenül az ABAP Dictionary-be navigálhat: Kattintson duplán a transzparens tábla nevére a SELECT utasítás FROMklauzulájában.
4
•Az adatbázistáblákat az R/3-rendszer az ABAP Dictionary segítségével kezeli. Ott tekinthetők meg az adatbázistábla összes műszaki tulajdonságával kapcsolatos aktuális információk. Az adatbázisban azonos sortípussal és névvel létrehozott adatbázistáblák neve az ABAP Dictionary-ben transzparens tábla. •Ha meg szeretné tekinteni a transzparens táblát az ABAP Dictionary-ben, többféle navigációs lehetőség közül választhat: •A Munkaeszközök->ABAP Workbench->Fejlesztés->Dictionary útvonalon közvetlenül az ABAP Dictionary-be jut, itt írja be a transzparens tábla nevét a megfelelő beviteli mezőbe. •Egy program ABAP Editorából közvetlenül az ABAP Dictionary-be navigálhat: Kattintson duplán a transzparens tábla nevére a SELECT utasítás FROMklauzulájában.
5
•Az adatbázistáblák kereséséhez többféle módszer áll rendelkezésre: •Alkalmazási hierarchia és repository-infórendszer: Az alkalmazási hierarchiában kiválaszthatja az alkalmazáskomponenseket, és az infórendszerre ugorhat. Ott például rövid szöveg alapján kereshet adatbázistáblákat. •Ha már ismer olyan programot, amely hozzáfér az adatbázistáblához: •Beviteli mező egy dynpro-n: Ha ismer olyan programot, mely a keresett táblához kapcsolódó beviteli mezőkkel rendelkező dynpro-t tartalmaz, akkor az F1->Műszaki infó paranccsal és a dynpro-mező műszaki nevére duplán kattintva az ABAP Dictionary-be léphet. Ez gyakran egy struktúramező. Dupla kattintással beléphet az adatelembe, ahol a felhasználáskimutatás segítségével transzparens táblákat kereshet a mezőtípussal. •Debugger: Ha ismer olyan programot, amely a keresett adatbázistáblából olvas, akkor elindíthatja azt Debugging-móduszban, és töréspontot helyezhet el a SELECT utasításnál. •Editor: A SELECT utasítás keresése •Az Object Navigator objektumlistája: Olyan alprogramok keresése, melyek adatbázis-hozzáféréseket tartalmaznak. •Ha egy struktúramező ismert az ABAP Dictionary-ben. •Dupla kattintással beléphet az adatelembe, ahol a felhasználáskimutatás segítségével transzparens táblákat kereshet a mezőtípussal.
6
•Az ABAP-tanfolyamok egységes repülési adatmodellt alkalmaznak. Így elég az adatmodell egy részének megjelenítése, amely szükség esetén még tovább finomítható. •Amennyiben egy ügyfél egy helyről egy másik helyre kíván eljutni, az utazási irodában tisztáznia kell, hogy: • az utazási igény mely repülőtereken keresztül valósítható meg a legkedvezőbben, • a kívánt napon, a megfelelő időpontban közlekedik-e járat, • különböző egyedi feltételeinek megfelelő optimális megoldásokat kell keresnie, pl. a legkedvezőbb árú út, a leggyorsabb csatlakozás, adott érkezési időpontnak megfelelő csatlakozás stb. •Ez a szempont különbözik egy utazási iroda szempontjától: Az adatmodell, amely a szükséges technikai adatok kezelésére van kialakítva, technikai kritériumok szerint, egy központi adatbázis tábláiban rögzíti az adatokat. A szükséges adatmennyiség itt messze meghaladja az ügyfelet érdeklő információkat. (Például rögzítésre kerül, hogy melyik ügyfél melyik járaton foglalt helyet, a foglalás mikor történt, az ügyfél mennyit fizetett stb.) Az adatok a felhasználói igények szerint programok segítségével állíthatók össze.
7
•A logikailag összetartozó információkhoz úgynevezett entitások tartoznak: A repülési adatmodell így entitást tartalmaz: •minden városhoz, •minden repülőtérhez, •minden légitársasághoz, •minden útvonalához, •minden járathoz. •Az entitások meghatározott kapcsolatban állnak egymással: •Az útvonalak repülőtereken indulnak és repülőtereken végződnek. •Az útvonalat a légitársaság, az indulási repülőtér, a célrepülőtér, továbbá a felszállás időpontja egyértelműen jellemzi. •Bármely útvonalhoz az év bármely napján hozhatók létre járatok, a járat viszont csak létező útvonalhoz definiálható. •A reptereket a hozzájuk legközelebb fekvő városokhoz kell hozzárendelni. •Ez az adatmodell redundancia nélkül kezeli a szükséges adatokat és lehetővé teszi, hogy az utazási iroda az ügyfelek számára fontos adatokat megjeleníthesse.
8
•Az ABAP-tanfolyamok példái és gyakorlatai, továbbá az ABAP-dokumentáció az SAP repülési adatmodelljére hivatkoznak. A repülési adatmodell Repositoryobjektumai az SAPBC_DATAMODEL fejlesztési osztályban találhatók. •Az ABAP-tanfolyamok az adatmodellnek elsősorban a következő tábláit alkalmazzák: •SPFLI: a járatcsatlakozások táblája •SFLIGHT: a járatok táblája •SBOOK: a járatok foglalásának táblája
9
•Ha egy adatbázistábla definíciójára navigál az ABAP Dictionary-ben, akkor információ jelenik meg az adatbázistábla műszaki tulajdonságairól. •A performance szempontjából kedvezőbb adatbázis-hozzáférésekhez az alábbi információk lényegesek: •Kulcsmezők: Ha a kívánt sorok adatbázisból való kiválasztása kulcsmezők alapján történik, akkor az adatbázis Optimizer elsődleges indexen keresztül férhet hozzá. A kulcsmezőket egy jelölőnégyzet jelöli a Dictionary-ban. •Másodlagos index: A sorkiválasztás másik módja a másodlagos index használata. Ha az 'Indexek' gombra kattint, egy dialógusablakban választhat a másodlagos indexek közül. Ha duplán kattint egy indexre a dialógusablakban, akkor egy dynpro jelenik meg a kiválasztott index részletes adataival.
10
11
12
13
14
•A SELECT Open SQL-utasítással adatbázis-olvasási hozzáférést programozhatunk. •A SELECT utasítás bonyolult logikával rendelkezik, mely lehetővé teszi, hogy sokféleképpen férjünk hozzá az adatbázistáblákhoz. •A SELECT utasítás különféle feladattal bíró klauzulák sorozatából áll: A SELECT klauzula leírja, hogy a szelekció eredménye egy vagy több sorból álljon-e, hogy az eredmény mely oszlopokat tartalmazza, hogy a szelekció tartalmazhat-e azonos sorokat. Az INTO klauzula azokat a belső adatobjektumokat határozza meg, melyekbe a szelektált adatokat el szeretnénk helyezni. A FROM klauzula a szelektálandó adatok forrását (adatbázistábla vagy nézet) nevezi meg. A WHERE klauzula olyan feltételeket fogalmaz meg, melyeknek a szelekció eredményének meg kell felelnie. Tehát meghatározza az eredménytábla sorait. A további klauzulák leírása a SELECT kulcsszódokumentációjában található.
15
•Az Open SQL utasításai a Standard SQL nyelvi készletének az ABAP-ba teljességgel integrált részhalmaza. Az ABAP-programozó számára egységes adathozzáférést tesz lehetővé, a telepített adatbázisrendszertől függetlenül. Az adatbázisinterfész az Open SQL-t adatbázisfüggő Standard SQL-lé alakítja át.
16
•A SELECT SINGLE * utasítással egyetlen rekord olvasható az adatbázisból. Az egyértelmű hozzáférés biztosítása érdekében az összes kulcsmezőt meg kell adni a WHERE klauzulában. A * jel közli az adatbázis-interfésszel, hogy az adatbázistábla megadott sorának valammenyi oszlopát olvassa be. Ha csak néhány oszlopra van szükség, akkor mezőlista is megadható. •Az INTO klauzula után kell megadni a struktúrát, amely szerint az adatbázisinterfész az adatrekordokat másolja. A struktúra felépítésének balra zártan meg kell egyeznie az adatbázistábla kívánt oszlopaival. •Az INTO klauzula CORRESPONDING FIELDS OF kiegészítésével a célterület komponensenként tölthető fel, ahol csak azok a komponensek kerülnek figyelembevételre, melyek névazonosak az adatbázistábla oszlopaival. Ezen kiegészítés használata nélkül a célterületet a struktúrájától függetlenül balra zártan tölti fel a rendszer. •A sy-subrc értéke nulla, ha a rendszer talált megfelelő rekordot. •A SINGLE kiegészítés azt az információt adja meg, hogy csak egy sort kell beolvasni. Az adatbázis így megszakíthatja a keresést, amint megtalálta a megfelelő rekordot. Ezért a SELECT SINGLE egyedi rekordhozzáférések esetén performance-szempontból akkor is kedvezőbb, mint a SELECT ciklus, ha a kulcsmezők teljes mértékben rendelkezésre állnak.
17
18
•Ha a SELECT utasítás mellett nem szerepel a SINGLE kiegészítés, akkor a rendszer több rekordot olvas be az adatbázisból. A mezőlista segítségével választhatók ki azok az oszlopok, melyek adatait be kell olvasni az adatbázisból. •A kívánt sorok számát a WHERE klauzulában kell megadni. A WHERE klauzulában vagy az adatbázistábla kulcsmezői, vagy másodlagos indexek alapján korlátozható a sorok száma. A kulcsmezőkkel és másodlagos indexekkel kapcsolatos információk az ABAP Dictionary-ben találhatók. Például navigáljon az ABAP Dictionary-be a FROM klauzulában megadott adatbázistáblára duplán kattintva. •A WHERE klauzulán belül csak az adatbázistábla mezőit adjuk meg. Az, hogy mely adatbázistáblára történik a hozzáférés, a FROM klauzulából derül ki. (pl. helyes: SELECT ... FROM spfli WHERE carrid = ... , hibás: SELECT ...FROM spfli WHERE spfli-carrid = ... ) •Több logikai feltétel a WHERE klauzulán belül az AND vagy OR logikai operátorral kapcsolható össze. •Az adatbázis csomagszerűen továbbítja az adatokat az adatbázis-interfészhez. Az ABAP-futásidőrendszer minden adatrekordot soronként egy ciklusba másol a célterületen, és gondoskodik a SELECT és az ENDSELECT közötti utasítások szekvenciális feldolgozásáról. •A sy-subrc értéke nulla, ha a megoldáshalmaz legalább egy rekordot tartalmaz. A sy-dbcnt mező a SELECT-utasítás valamennyi végrehajtása után az addig olvasott sorok számát tartalmazza. Az ENDSELECT utasítást követően a sydbcnt mező az összes olvasott rekord számát tartalmazza.
19
20
•Az INTO TABLE
kiegészítés hatására az ABAP-futásidőrendszer az adatbázis-interfész tartalmát közvetlenül az itab belső táblába másolja. Ezt nevezzük Array fetch-nek. •Mivel az Array fetch logikájából következően nem ciklus, itt nem programozunk ENDSELECT utasítást. •A sy-subrc értéke 0, ha legalább egy rekord olvasásra kerül. •Az Array Fetch-csel és a belső táblákkal kapcsolatos további információ a Belső táblák című fejezetben olvasható.
21
22
•A programnak tartalmaznia kell az adatbázistábla által kért egyes oszlopoknak megfelelően típusokkal ellátott adatobjektumot. Az adatobjektumokat a karbantarthatóság érdekében a megfelelő Dictionary-objektumok segítségével kell típusokkal ellátni. Az INTO klauzula határozza meg, hogy melyik adatobjektumba kerülnek az adatbázistábla adatai. Két lehetőség van: •Egyszintű struktúra: A programban megadunk egy struktúrát, amely ugyanolyan sorrendben tartalmazza a mezőket, mint a SELECT klauzula mezőlistája. Ebben az esetben az INTO klauzulában adhatja meg a struktúra nevét. A tartalom az elhelyezkedés szerint kerül másolásra. A struktúra mezőneveit a rendszer nem veszi figyelembe. •Egyedi adatobjektumok: Az INTO klauzulában megadható az adatobjektumok mennyisége. Példa: DATA: gd_carrid TYPE sflight-carrid, gd_connid TYPE sflight-connid, gd_fldate TYPE sflight-fldate, gd_seatsmax TYPE sflight-seatsmax, gd_seatsocc TYPE sflight-seatsocc. START-OF-SELECTION. SELECT carrid connid fldate seatsmax seatsocc FROM sflight INTO (gd_carrid, gd_connid, gd_fldate, gd_seatsmax, gd_seatsocc) WHERE ...
23
•Ha az INTO CORRESPONDING FIELDS klauzulát használja, akkor az adatok a struktúra azonos nevű mezőibe kerülnek. •A konstrukció előnyei: •A struktúrának nem kell balra zártan megegyeznie a mezőlista felépítésével. •A konstrukció segíti a karbantartást, mivel a mezőlista bővítése esetén nincs szükség a program módosítására, ha a struktúra tartalmaz egy azonos nevű és típusú mezőt. •A konstrukció hátrányai: •Az INTO CORRESPONDING FIELDS nagyobb teljesítményt igényel, mint az INTO. Ez a program túl hosszú futásidejét eredményezheti. •Ha az adatokat Array fetch segítségével egy belső tábla azonos nevű oszlopaiba szeretné helyezni, akkor használja az INTO CORRESPONDING FIELDS OF TABLE utasítást.
24
•Az adatbázis-hozzáférés előtt jogosultságellenőrzést kell végrehajtani. Az AUTHORITY-CHECK utasítással ellenőrizzük, hogy a felhasználó rendelkezik-e a szükséges értékekkel rendelkező jogosultsággal. Az AUTHORITY-CHECK után kérdezze le a return-kódot: ha a kód értéke nulla (0), akkor a felhasználó rendelkezik a szükséges jogosultsággal, és a program folytatható. Ha a return-kód nem nulla, akkor a felhasználó nem rendelkezik a megfelelő jogosultsággal, és üzenet jeleníthető meg. •A szelekciós kép mezőinek ismét aktív mezőkké való beállításával - amennyiben a szelekciós kép utáni közvetlen jogosultságvizsgálat végrehajtása, illetve a hiányzó jogosultságnál a megfelelő üzenet megjelenítése megtörtént - egy későbbi fejezetben fog megismerkedni.
25
•Az SAP-rendszer összes adatát meg kell óvni a jogosulatlan hozzáférésektől, hogy valóban csak azon felhasználók férhessenek hozzá az adatokhoz, akik erre vonatkozóan egyértelmű engedéllyel rendelkeznek. •A jogosultságok kiosztását a rendszeradminisztrátor végzi a felhasználói törzs karbantartása során. Itt egyértelműen meghatározható, hogy a felhasználó mely adatokhoz milyen módon férhet hozzá. Elképzelhető például, hogy egy felhasználó az összes légitársaság adatait megjelenítheti, de csak meghatározott légi járatok adatait módosíthatja. Következésképpen minden jogosultságvizsgálatnál meg kell vizsgálni a 'Tevékenység' és 'Légitársaság' mezők kombinációját. A jogosultságok létrehozásánál is fel kell tölteni mindkét mezőt értékekkel (pl. tevékenység 'Módosítás' és légitársaság 'LH' vagy tevékenység 'Megjelenítés', légitársaság '*'). Ezt úgy biztosítjuk, hogy létrehozunk egy jogosultsági objektumot, amely a 'Tevékenység' és 'Légitársaság' mezőkből áll, és ezen objektumra kell hivatkozni mind a jogosultságok kiosztásakor a felhasználói törzs karbantartásában, mind pedig a programban lezajló jogosultságvizsgálat során. •A jogosultsági objektumok csak azon mezők kombinációit definiálják, amelyekre egyidejűleg kell hivatkozni, és sablonokként szolgálnak mind a jogosultságok, mind a jogosultságvizsgálatok számára. A jogosultsági objektumok kezelésének és keresésének megkönnyítése érdekében azok objektumosztályokba vannak foglalva, míg egy vagy több osztály egy applikációhoz van hozzárendelve. A Development Workbench menüjében, a fejlesztés pont alatt találhatók a jogosultsági objektumok karbantartási tranzakciói és az összes objektum osztályok szerint rendezett teljes listája is, a hozzátartozó mezőkkel és dokumentációval.
26
•A programban történő jogosultságvizsgálatnál megadjuk az objektumot és az értékeket, amelyekre a felhasználónak szüksége van az adott objektumra vonatkozó jogosultságában. A jogosultság megnevezését nem adjuk meg. •Példánkban azt vizsgáljuk, hogy a felhasználó rendelkezik-e jogosultsággal az S_CARRID objektumhoz, ahol a CARRID (légitársaság) mezõben az 'LH' érték és az ACTVT (tevékenység) mezõben a '02' érték ('módosítás') áll. A tevékenységek rövidítései a TACT és TACTZ táblákban, valamint a megfelelõ objektumoknál vannak dokumentálva. •Fontos: az authority-check végzi a jogosultságvizsgálatot és jelenti vissza a returnkódot. A return-kód lekérdezésekor lehetőség van annak szabályozására, hogy a hiányzó jogosultság milyen következményekkel jár (például a program megszakadása vagy csak néhány kiviteli sor átugrása).
27
•Az AUTHORITY-CHECK-ben meg kell adnunk az objektum összes mezõjét, különben 0-val nem egyenlõ return-kódot jelent vissza a rendszer. Ha egy adott mezőre vonatkozólag nem kíván vizsgálatot végrehajtani, akkor a mezõ mögött DUMMY-t adjon meg. Példa: módosítási tranzakció felhívásakor célszerû annak megvizsgálása, hogy a felhasználó módosíthat-e bejegyzéseket valamelyik légi járatra vonatkozóan: AUTHORITY-CHECK OBJECT 'S_CARRID' ID 'ACTVT' FIELD '02' ID 'CARRID' DUMMY. •Az AUTHORITY-CHECK legfontosabb return-kódjai a következõk: •0: a felhasználó rendelkezik a szükséges értékekkel rendelkező jogosultsággal. •4: a felhasználó nem rendelkezik a jogosultsággal. •8: a jogosultsági objektumnak nem neveztük meg az összes mezőjét, ezért nem sikerült a vizsgálat. •Valamennyi return-kód teljes listája az AUTHORITY-CHECK kulcsszódokumentációjában található. •A FIELD kiegészítés mögött mindig csak egyetlen mezõt adhatunk meg, szelekciós táblát nem. Erre megfelelõ funkcióelemek állnak rendelkezésünkre, amelyek a szelekciós tábla összes értékére vonatkozóan végrehajtják az AUTHORITY-CHECK-et.
28
•A legtöbb alkalmazás esetén az adatokat egyidejűleg több adatbázis táblából kell kiolvasni. •Ennek egyik módszere egymásba ágyazott SELECT parancsok használata vagy adatbázis nézetek létrehozása és SELECT parancsban való használata. •Ha rendelkezésre állnak újra felhasználható komponensek, amelyek összetettebb adatgyűjtést foglalnak magukba, akkor ezeket a komponenseket könnyen fel lehet használni. Négy technika áll rendelkezésre: •globális osztályok módszerei: objektumorientált fejlesztési komponensek •üzleti objektumok módszerei: •funkcióelemek •a logikai adatbázisok. Ezek szállított adatgyűjtő programok, melyek hierarchikus rendben szállítják az adatokat. •Az SAP standard modulokhoz rendelkezésre álló kész és újrafelhasználható komponensek meghívásával könnyen lehet bonyolult táblakapcsolatok esetén is adatokat kiolvasni, anélkül, hogy részletesen ismerni kellene az összes érintett táblát és azok kapcsolatait.
29
•A több adatbázistábla egyidejű olvasása megoldható Dictionary nézetek létrehozásával és SELECT parancsban történő használattal is. •A nézetek a különböző ABAP Dictionary-táblák alkalmazásfüggő megjelenítései. Tartalmazhatják nagyobb táblák egyes kiválasztott mezőit, de akár több tábla mezőjét is. •A nézetek fõként az ABAP-programozásnál és az F4-segítségnél használatosak. •A Dictionary nézetek létrehozásakor két vagy több táblát idegen kulcs mezők vagy azonos adatelemű mezők összerendelésével kapcsolhatók össze.
30
31
32
33
•Az ABAP-program feldolgozási blokkokat tartalmaz. Az egyes feldolgozási blokkok olyan passzív forráskódszakaszok, melyeket a rendszer azok meghívása esetén szekvenciálisan dolgoz fel. •A feldolgozási blokk az ABAP legkisebb, fel nem osztható egysége, így azok egymásba nem ágyazhatók. •Az ABAP feldolgozási blokkoknak különböző fajtáit különböztetjük meg: •Az eseményblokkok olyan ABAP feldolgozási blokkok, melyeket a futásidőrendszer hív meg. A feldolgozási blokkok logikailag tartozhatnak a végrehajtható programhoz, szelekciós képhez, listához vagy dynpro-hoz. Most csak a végrehajtható programhoz tartozó eseményblokkokat ismerjük meg. •Az alprogramok feldolgozását egy ABAP-utasítás indítja el. Interfész segítségével paraméterek továbbíthatók az alprogramokhoz, és az alprogramok tartalmazhatnak helyi változókat. •A modulok speciális ABAP feldolgozási blokkok a dynpro-feldolgozáshoz. •A program indulásakor a futtató rendszer tárterületet bocsát a program minden globális adatobjektuma rendelkezésére. A deklaratív ABAP-utasítások így nem részei az ABAP feldolgozási blokkoknak, hanem a program generálásakor a teljes forráskódban való keresésből állnak össze (ennek ellenére javasolt a program elején elhelyezni valamennyi globális változó deklarációját). Kivételt képeznek a helyi adatobjektumok az alprogramokban, melyek csak az alprogramok futása idején élnek.
34
•Az eddigi példa programokban a deklarációk mellett csupán egy feldolgozási blokkot definiáltunk. Ezért annak explicit módon történő megadása nem volt szükséges. Bonyolultabb programokban több különböző feldolgozási blokkot külön deklarálni kell. •Az eseményblokkok példájaként bemutatunk egy programot, amely a szelekciós képen beviteli értéket tartalmaz a dátum számára. Javasolt értékként az egy héttel korábbi dátum jelenik meg. Ez a PARAMETERS utasítás javasolt értékével valósítható meg, mivel számítást kell végrehajtani. A PARAMETERS utasítás DEFAULT kiegészítése gondoskodik róla, hogy a programkezdéskor a javasolt érték bekerüljön az adatobjektumba. A javasolt értékek lehetnek literálok, vagy származhatnak az sy struktúra mezőiből. Az sy-datum mezőt a futásidőrendszer programindításkor tölti ki az aktuális dátummal. A változók futásidőben, de még a standard szelekció elküldése előtt történő módosításához az INITIALIZATION eseményblokkot lehet alkalmazni. A START-OF-SELECTION lista készítésére szolgáló eseményblokk. •A rendszer az összes globális deklarációt a deklaratív ABAP-kulcsszó alapján ismeri fel. Ezek a deklarációnak a forráskódban való elhelyezkedésétől függetlenül egy logikai feldolgozási blokkot képeznek. A rendszer a program generálásakor a teljes forráskódból választja ki a kulcsszavakat. Az áttekinthetőség érdekében célszerű őket a forráskód elején elhelyezni. A PARAMETERS utasítás is a deklaratív nyelvi elemek közé tartozik. A program generálásakor a megadott típus elemi adatobjektumához tartozó információk mellett egy szelekciós dynpro is készül.
35
•A demó program eseményeit mutatjuk be az ábrán: •Az eseményblokkok a listafeldolgozásnak megfelelő sorrendben kerülnek hívásra: az első hívott eseményblokk az INITIALIZATION ezt
követően a rendszer a szelekciós képet a prezentációs szerverhez (SAPGUI) küldi, a
szelekciós kép elhagyása után (végrehajtás ikon vagy F8 lenyomása után) a rendszer a START-OF-SELECTION blokkot hívja meg. Ha
a START-OF-SELECTION eseményblokk tartalmazza a WRITE, SKIP vagy ULINE ABAP-utasításokat, akkor feltöltésre kerül egy listapuffer. Miután
a START-OF-SELECTION eseményblokk összes utasítása lefutott, a rendszer a listapuffert listaként a prezentációs szerverhez (SAPGUI) küldi.
36
•Az eseményblokkok olyan feldolgozási blokkok, melyeket az ABAPfutásidőrendszer hív meg. A feldolgozás sorrendjét ezzel a futásidőrendszer határozza meg. •A végrehajtható programok a különböző feladatok elvégzéséhez eseményblokkokat tartalmazhatnak, melyek listák készítésére szolgálnak.
37
•Az ABAP-programban minden eseményblokkot egy eseménykulcsszó vezet be, és a következő feldolgozási blokk kezdete zár le. Az eseményblokk zárására nincs ABAP-utasítás. •Az eseményblokkokat az ABAP-futásidőrendszer hívja fel. A feldolgozási sorrend szempontjából így az eseményblokkok sorrendje a programban nem számít. •A START-OF-SELECTION az adatfeldolgozás és a lista létrehozásának első eseménye, melyet a standard szelekciós kép után az ABAP-futásidőrendszer hív meg. •Az INITIALIZATION például a bonyolultabb javasolt értékek beállítását teszi lehetővé. Az eseményblokkban lehetőség van például olyan javasolt értékek beállítására, amelyek csak a programfutás során határozhatók meg. A fenti példa az 'Egy héttel ezelőtt' dátumot számítja ki, majd a pa_date változóba helyezi. Ezt követően az ABAP-futásidőrendszer a szelekciós képet a prezentációszerverhez küldi, ahol a kiszámított érték javasolt értékként jelenik meg. A javasolt érték módosítható.
38
Az alprogramok olyan definiált interfészt tartalmazó feldolgozási blokkok, melyek egy ABAP-utasítással bármely feldolgozási blokkból meghívhatók. Az alprogramok a programon belüli egységek kialakítását segítik elő.
39
•A program objektumlistájából kiindulva az alprogramokba navigálhatunk. •Az alprogramra vonatkozó felhasználáskimutatás segítségével minden olyan programsor megjeleníthető, amely az illető alprogramot hívja.
40
•Ha elkészítettük az alprogram definícióját, meghívásához a következő részek kellenek: •Az alprogram neve •Interfész-paraméterek, amelyekhez olvasási hozzáférés történik: a paramétereket a USING használatával kell felsorolni. A legfontosabb a típus és az interfész-paraméterek sorrendje. •Módosításra kerülő interfész paraméterek: a paramétereket a CHANGING használatával kell felsorolni. A legfontosabb a típus és az interfész-paraméterek sorrendje. •Tábla paraméterek: TABLES használatával kell megadni.
41
•Az alprogram felhívásakor minden interfészparaméternek rendelkeznie kell értékkel. Az alábbi két paramétert különböztetjük meg: •a USING utasításra a rendszer felsorolja az összes olyan paramétert, amelyet az alprogramban csak olvas. •a CHANGING utasításra a rendszer felsorolja az összes olyan paramétert, amely az alprogramban módosul. •Ha az alprogramot egy PERFORM utasítás hívja egy ABAP feldolgozási blokkból, akkor az alprogram szekvenciális feldolgozása közbeiktatódik. Az alprogram utolsó sorának (ENDFORM.) elérésekor a feldolgozás a PERFORM utasítás utáni résztől folytatódik. •A futásidőbeli működés nyomon követhető a Debugging-móduszban. Ott az alábbiakra van lehetőség: •az egy lépéssel soronként végiglépkedhet a teljes programon, az alprogramot is beleértve. •a végrehajtással egy feldolgozási blokkot nézhet át sorról sorra. Az alprogramok ezután teljes egészként kerülnek végrehajtásra. •a Return-nel kiléphet az alprogram egylépéses feldolgozásából, és visszatérhet a felhívóhoz.
42
•Az alprogram interfészében adjuk meg, hogy az interfész-paraméterek hogyan kerüljenek átadásra. Ilyenkor referencia-átadás és értékátadás lehetséges. •Referencia-átadás: Az aktuális paraméter címe kerül átadásra. Az alprogramon belül a változó a formális paraméter nevével kerül hívásra. A módosítások azonnal hatással vannak a globális változókra. Ha az alprogram interfészében csak a formális paraméter neve van megadva, akkor referencia-átadásról van szó. •Értékátadás: Az alprogram felhívásakor egy helyi változó jön létre a formális paraméter nevével, és az aktuális paraméter értékét a rendszer a formális paraméterbe másolja. Itt két esetet különböztetünk meg: •Értékátadás: az interfészben a formális paraméter a USING opció után, a VALUE( <parameter name>) kiegészítéssel jelenik meg. Az alprogram felhívásakor a rendszer az aktuális paramétert a formális paraméterbe másolja. A formális paraméter változása csak a helyi másolatra van hatással, az aktuális paraméterre nem. •Értékátadás és érték-visszaadás: az interfészben a formális paraméter a CHANGING után, a VALUE( <parameter name>) kiegészítéssel jelenik meg. Az alprogram felhívásakor a rendszer az aktuális paramétert a formális paraméterbe másolja. A formális paraméter változása elsőként a helyi másolatra van hatással. Az ENDFORM utasítás elérésekor a formális paraméter értékét a rendszer visszamásolja az aktuális paraméterbe.
43
•Az interfész paramétereit formális paramétereknek nevezzük, azokat pedig, amelyek az alprogramnak kerülnek átadásra, aktuális paramétereknek. •Az aktuális és a formális paraméterek számának meg kell egyezni, mert opcionális paraméterek nem lehetségesek. Az aktuális paraméterek hozzárendelése a formális paraméterekhez a paramétersorrend szerint történik. •A rendszer az aktuális és a hozzá tartozó formális paraméterek kompatibilitását már a szintaktikai ellenőrzésnél (Syntax-Check) megvizsgálja. A típusvizsgálatnak különböző formái lehetségesek: •Teljeskörű típusvizsgálat: TYPE d, f, i, t vagy Ezek a típusok teljesen meg vannak határozva. A rendszer megvizsgálja, hogy az aktuális paraméter adattípusa teljes mértékben megegyezik-e a formális paraméter típusával.
•Generikus típusok rész-típusvizsgálata c, n, p vagy x A rendszer megvizsgálja, hogy az aktuális paraméter a c, n, p vagy x típussal rendelkezik-e. A paraméterhosszt és a DECIMALS értéket (p típusnál) a rendszer az aktuális paraméterekből a formális paraméterekbe örökíti. TYPE
a generikus Dictionary-típusok nem specifikált információit a rendszer szintén az aktuális paraméterekből a formális paraméterekbe örökíti. TYPE
•Az interfész definiálása a FORM-rutinban történik. A USING és a CHANGING utasítások a PERFORM utasítással, alprogramok meghívásánál pusztán dokumentációs funkciót töltenek be.
44
45
•Az SAP R/3-rendszerben különböző olyan technikák állnak rendelkezésre, amelyek használatával a már kifejlesztett üzleti logika felkínálható újrafelhasználásra. •Funkcióelemek: minden ABAP-programból felhívhatók. A paraméterek az interfésznél is megadásra kerülnek. Az összetartozó funkcióelemek egy funkciócsoport részét képezik. A funkcióelemeknél a programlogika és a felhasználói dialógusok egymásba ágyazhatók. •Objektumok: az 'ABAP-objektumok' kompatibilis bővítés révén objektumok hozhatók létre a futásidő alatt, a központi osztályokra való hivatkozással. •A BAPI-k olyan üzletii objektumok, amelyek a Business Object Repository-n (BOR) keresztül érhetők el a rendszerben. •A logikai adatbázisok olyan adatolvasási programok, amelyek végrehajtható programokhoz kapcsolhatók. A logikai adatbázisokban az adatok olvasása logikai hierarchiastruktúrák szerint történik. Megfelelő szelekciós képernyőket és jogosultságvizsgálatokat is tartalmazhatnak.
46
•A funkciócsoport olyan speciális ABAP-program, mely a funkcióelemek konténereként működik. A funkcióelemek moduláris egységet képeznek az interfésszel, amely minden ABAP-programból meghívható. Több funkcióelemet, melyek közös adatokat használnak, érdemes egy közös funkciócsoportban létrehozni. •Egy funkciócsoport •olyan adatobjektumokkal rendelkezhet, amelyek a csoporton belüli összes funkcióelem számára elérhetők és módosíthatók. A globális adatobjektumok élettartama megegyezik a funkciócsoport élettartamával. •olyan alprogramokat tartalmazhat, amelyek felhívhatók a csoport minden funkcióeleméből. •olyan dynprókat tartalmazhat, amelyek felhívhatók a csoport minden funkcióeleméből.
47
•A funkcióelemek interfésszel rendelkező moduláris felépítésű elemek. Az interfész a következő elemeket tartalmazhatja: •az importparaméterek olyan paraméterek, amelyeket a rendszer a funkcióelemnek ad át. Ezek rendszerint ABAP-Dictionary-típusokkal kerülnek típusokkal való ellátásra. Az importparaméterek opcionálisként is megadhatók. •az exportparaméterek olyan paraméterek, amelyek a funkcióelemből átadásra kerülnek a felhívónak. Az exportparaméterek mindig opcionálisak, ezért a felhívónak ezeket nem kell feltétlenül átvennie. •A changing-paraméterek olyan paraméterek, amelyeket a rendszer a funkcióelemnek ad át, és amelyek a funkcióelemnél módosíthatók. Az eredményt a rendszer a funkcióelem lefutását követően visszaadja a meghívónak. •Kivételek: a kivételek segítségével a hibaesetek határozhatók meg. Ha olyan hiba lép fel, amely a funkcióelemnél kivételt eredményez, akkor a funkcióelem feldolgozása megszakad. A kivételek számokhoz való hozzárendelésével a meghívó programnál egy szám kerül beállításra a 'sysubrc‘ rendszer változóban. Ez a visszatérési kód (return-code) azután a programban is lekérdezhető. •A funkcióelem tartalmazhat lokális objektumokat is, és a funkciócsoport globális adatobjektumaihoz is hozzáférhet. A funkcióelemben a funkciócsoport összes alprogramja és dynprója felhívható.
48
A funkciócsoport globális adatai a funkcióelem felhívását követően is megmaradnak. A funkciócsoport élettartama a felhívó élettartamával azonos. Ha tehát felhívásra kerül egy funkcióelem, amely a globális adatokat értékekkel tölti fel, akkor ugyanazon csoport másik olyan funkcióeleme, amely ehhez kapcsolódva a programból kerül meghívásra, szintén elérheti ezeket az adatokat.
49
•Számos programban a 'Megszakítás‘ ikon megnyomását követően egy standard dialógust hajt végre a rendszer. A lefuttatott dynpro minden esetben tartalmazza a következő rekordot: 'Az adatok elvesznek.' A cím és két további szövegsor kontextusfüggően változnak. A felhasználó az 'igen' és a 'nem' lehetőségek közül választhat. •Ez a dialógus egy funkcióelembe van ágyazva.
50
•Ahhoz, hogy a dialógust ne kelljen saját magunknak programozni, léteznie kellene következő tulajdonságokkal rendelkező funkcióelemnek: •importparaméter a szövegsorokhoz és a címhez •olyan exportparaméter, amely azt az információt tartalmazza, hogy melyik nyomógombot választotta a felhasználó. •A funkcióelemnek a funkciócsoport egyik olyan dynpróját kell meghívnia, amelyik megjeleníti a szövegsorokat és a címet, és tartalmazza az 'igen' és a 'nem' nyomógombokat.
51
•Standard SAP alkalmazás példa: az 'Object Navigator‘-ban egy program létrehozása során, az 'Attribútumok mentése' popup-ból való kilépésnél a standard popup funkció kerül meghívásra. Újrafelhasználhatóan került-e ez beágyazásra? •1. módszer: debugger, töréspont beállítása a 'CALL SCREEN'-re, ha szükséges a ‘FELHÍVÁS' alatt a program és az alprogram, valamint a funkcióelem azonosítása, az Object Navigator-ban a meghívás és az interfészellátás megtekintése; •2. módszer: debugger, töréspont beállítása a 'CALL FUNCTION'-ra, továbbá az 1. módszernél leírt lépések; •3. módszer: a standard popup-on egy szövegmezőre kell kattintani, itt az F1 műszaki segítséggel a dynpróba kell navigálni, itt a programok felhasználáskimutatását kell választani, majd meg kell nézni a talált funkcióelemet; •4. módszer: a 'Mentés' popup-nál az F1 műszaki segítséget kell választani, innen a dynpróba kell navigálni, a lefutási logikát megtekinteni, majd pedig a modulokba navigálni; •5. módszer: alkalmazási hierarchia, komponens javaslata (az alapszolgáltatások Basis Services - alatt található), ezek kijelölése, ugrás az infórendszerbe, a programozásnál funkciókönyvtár és funkcióelemek megkeresése, a csak engedélyezettek kijelölése, végül a lista áttekintése.
52
•Ha találtunk egy megfelelő funkcióelemet, amit a fejlesztendő programunkban szeretnénk meghívni, akkor először az interfész definícióját kell megnézni. •A nem-opcionális paraméterek értékeit a meghívásnál kötelezően meg kell adni. Azt, hogy mely paramétereket kell kiegészítőleg megadni, a funkcióelem és az interfészparaméterek dokumentációjában található. •Ha a dokumentáció nem nyújt erről elegendő információt, illetve a belépési nyelven nincs ehhez tartozó dokumentáció, akkor a funkcióelem forráskódjában található 'forráskód'-fül elemzésével juthatunk információkhoz.
53
•A funkcióelemek a tesztkörnyezet segítségével tesztelhetők. Az IMPORTparaméterek beviteli értékei a beviteli maszkban adhatók meg. Az eredményt a rendszer az EXPORT-paraméterbe transzportálja, és kilistázza. •Kivétel felmerülése esetén a rendszer megjelöli a kivételt. •A funkcióelem végrehajtásához szükséges időt a rendszer mikroszekundumokban jeleníti meg. A meghatározott értékek részére is ugyanazon korlátozások vannak érvényben, mint a futásidőelemzés funkció esetében. A tesztet emiatt érdemes azonos adatokkal többször is megismételni. •A tesztadatok a tesztadatok könyvtárában rögzíthetők. •A funkcióelemek táblaparaméterekkel a tesztkörnyezetben tesztelhetők. •Lehetőség van tesztszekvenciák létrehozására is.
54
•A funkcióelemek a CALL FUNCTION ABAP-utasítással hívhatók fel. A funkcióelem neve idézőjelek között szerepel. •Az EXPORTING után kerülnek hozzárendelésre azok a paraméterek, amelyek átadásra kerülnek a funkcióelemnek. •Az IMPORTING után kerülnek azok a paraméterek hozzárendelésre, amelyeket a program a funkcióelemtől vesz át. •A rendszer a legtöbb funkcióelemnél kiegészítőleg támogatja a kivételeket is. Az EXCEPTIONS kiegészítést a kivételek számértékekhez való hozzárendelése követi, amelyet hiba esetén a rendszer az sy-subrc mezőben jelenít meg. A paraméterhozzárendelés bal oldalán a funkcióelem interfészparamétereinek nevei, a jobb oldalon pedig a program adatobjektumainak neve található.
55
•A funkcióelem-hívások beépítéséhez használja a programmintákat (az ABAPeditorban erre külön nyomógomb áll rendelkezésre), és adja meg a funkcióelem nevét! •A CALL FUNCTION '' ABAP-utasítást a rendszer az interfésszel és a kivételekkel együtt a program forráskódjának aktuális kurzorpozíciójában generálja. •Ezt követően ki kell egészítenie az aktuális paramétereket, a kivételek „elkapását“ pedig adott esetben programoznia kell. Az interfészparaméterek hozzárendelése az aktuális paraméterek formális paraméterekhez való explicit hozzárendelésével történik. A felhívó program szempontjából azok a paraméterek kerülnek exportálásra, melyek a funkcióelemnek kerülnek átadásra, illetve azok kerülnek importálásra, melyeket a program a funkcióelemből fogad. Az opcionális paraméterekhez nem kell aktuális paramétereket hozzárendelni. Ebben az esetben az opcionális paramétereket tartalmazó sorok törölhetők. •Figyelembe kell venni, hogy a paraméterek hozzárendelésénél a funkcióelemek paraméterei mindig bal oldalt, az aktuális paraméterek pedig jobb oldalt állnak.
56
57