Adatbázis rendszerek II.
Alkalmazásfejlesztés Oracle APEX alatt
Összeállította: Dr. Baksáné dr. Varga Erika, adjunktus ME, Általános Informatikai Intézeti Tanszék
Oracle APEX – Application Builder Az Oracle Application Express (APEX) grafikus felülettel rendelkező integrált alkalmazásfejlesztő eszköz, melynek segítségével Oracle adatbázist használó webes alkalmazások fejleszthetők. Ez a fejlesztőeszköz ingyenesen elérhető; web böngészőt és némi programozási ismeretet igényel. Fejlesztőkörnyezet: –
Oracle Database 11g adatbázis
–
Oracle Application Express Release 4.2 2
Komponens-alapú programozás ●
●
●
Az alkalmazás előre definiált komponensekből épül fel → gyors fejlesztés, az implementációs részletek rejtve maradnak Alulról felfelé építkező (bottom up), deklaratív programfejlesztés: feladatunk a komponensek jellemzőinek beállítása Oracle APEX alkalmazás komponensek (page types): – – – – – –
Jelentés (report): lekérdezés megjelenítése táblázatban Chart (diagram): lekérdezés grafikus megjelenítése Űrlap (form / tabular form): DML műv. végrehajtásához Report and form: egy táblára vonatkozó DQL és DML műv. Master Detail: kapcsolódó táblák együttes kezeléséhez; a főtábla report, a részletező tábla módosítható (form) Adatfeltöltő lap (Data Loading) 3
Komponens-alapú programozás ●
Oracle APEX képernyő komponensek (aktív kezelőszervek): –
Szövegmező (text field): alapértelmezés szerint módosítható a tartalma, de beállítható csak olvashatóra
–
Választógombok (radio button): egymást kizáró választási lehetőségek
–
Kapcsoló / jelölőnégyzet (checkbox): kétállapotú kapcsoló (kikapcsolt vagy bekapcsolt)
–
Lista (list of values, LOV): lehet egy ill. többválasztós; inline vagy popup (külön ablakban megjelenő); statikus vagy dinamikus (lekérdezés eredménye) 4
Feladatleírás Készítsünk adatbázist kezelő webes alkalmazást az Oracle APEX eszközzel. Adatbázisunk 5 táblát tartalmaz: tanszékek, oktatók, tantárgyak, hallgatók és vizsgabejegyzések. Minden oktató egy tanszékhez tartozik és minden tanszéknek van vezetője, aki egyébként a tanszék oktatója. Ez elvileg a következőt jelenti, ami a gyakorlatban nem kivitelezhető: CREATE TABLE tanszek (… vezeto references oktato …); CREATE TABLE oktato (… tsz references tanszek ...); A két szabály közül csak az egyik adható meg az adattáblák létrehozásakor. A másik szabály teljesülését az alkalmazásnak kell megoldania. 5
ER modell kód lezárás módja
név
Tantárgy
Vizsga
félév dátum
kredit
Oktató név
beosztás
terem
Tanszék kód
név
kód
Vezető oktató
6
Relációs modell OKTATÓ kód név beosztás tsz
TANTÁRGY kód név kredit félév lezárás oktatja
TANSZÉK kód név vezetőoktató
VIZSGA tárgy dátum terem 7
Előkészületek 1. A szükséges táblák létrehozása (create.sql). SQL Workshop – SQL Commands 2. A táblák feltöltése egyenként. SQL Workshop – Utilities – Data Workshop – Data Load: text data Load to: existing table Load from: upload file
8
Előkészületek A feltöltendő szövegfájl (txt vagy csv) kiválasztása. A megadott fájlok ,-vel tagoltak és tartalmazzák az oszlopneveket.
9
Előkészületek Össze kell rendelni a létező tábla mezőit a feltöltendő adatokkal. A feltöltendő oszlopoknál: Upload – Yes.
10
Előkészületek Figyelem! A vizsga.csv feltöltésekor a dátum mező formátumát is meg kell adni.
A feltöltésről visszajelzést kapunk, de ellenőrizhetjük az SQL Workshop – SQL Commands ablakban is.
11
Új alkalmazás létrehozása Application Builder – Database applications – Create 1. Adjunk nevet és egyedi azonosítót az alkalmazásnak.
12
Új alkalmazás létrehozása 2. Az oktatók listája tanszékenként legyen elérhető. Az űrlapok mögötti táblákat listából lehet kiválasztani: Főtábla – Tanszék; Részletező tábla - Oktató
13
Új alkalmazás létrehozása 3. A tantárgy űrlapot listázásra és módosításra is fogjuk használni.
14
Új alkalmazás létrehozása 4. Az alkalmazáshoz rendelt űrlapok: Report: jelentés, lista Form: módosítható űrlap
5. Most nincsenek megosztott komponensek.
Master Detail: csoportosított lista
15
Új alkalmazás létrehozása 6. Alkalmazás beállításai (bejelentkezés ellenőrzése, űrlap szintek száma, nyelv, dátum / idő formátum).
16
Új alkalmazás létrehozása 7. Alkalmazás stíluslapjának kiválasztása.
17
Új alkalmazás létrehozása 8. A létrehozandó alkalmazás jellemzőinek összefoglalása. Ha elfogadjuk, kattintsunk a Create gombra.
18
Új alkalmazás létrehozása 9. Létrejött az alkalmazás az alábbi űrlapokkal.
19
Alkalmazás futtatása 1. Run Application
2. Bejelentkezés
20
Alkalmazás futtatása Az alkalmazásnak két fő űrlapja van. A Tanszék-et kiválasztva, a tanszékek listája látható. A sorok előtti Szerkesztés ikonra kattintva jelenik meg a részletező, Oktató űrlap. 21
Alkalmazás futtatása
Feladat: rendeljünk a tanszékhez vezető oktatót.
22
Űrlap módosítása 1. megoldás: a részletező tábla elsődleges kulcsa nem látszik (Hidden). Tegyük láthatóvá. Az alkalmazás alsó menüsorában válasszuk ki: Edit Page.
23
Űrlap módosítása Az Oktató tábla Kód mezőjére jobb egérgombbal kattintva a popup menüből válasszuk: Edit. A mező jellemzőknél állítsuk be, hogy látható legyen az oktató kódja (Show Column) és a mező típusa Text Field.
24
Űrlap módosítása A látható oktató kódok közül válasszunk egyet, és írjuk be a tanszékvezető beviteli mezőbe. Mentsük a módosítást.
25
Űrlap módosítása Feladat: a tanszék kódja legyen látható, de ne lehessen módosítani. Megoldás: a tanszék űrlap alján válasszuk az Edit Page 2 menüpontot. Az Edit tanszék listából válasszuk a P2_KOD mezőt. Itt a Display as attribútumot állítsuk át Hidden-ről Display Only-ra. Tesztelés: Apply Changes - Run
26
DML műveletek A Tanszék űrlap főlapján elérhető művelet: ●
Új rekord felvitele a főtáblába (tanszék) A Tanszék űrlaphoz tartozó részletező lapon (szerkesztő lapon) elvégezhető műveletek:
● ● ● ● ● ●
Főtábla (tanszék) mezőértékeinek módosítása Főtábla (tanszék) szerkesztés alatt álló rekordjának törlése Főtábla (tanszék) rekordjai között léptetés (< ill. >) Új rekord felvitele a részletező (oktató) táblába A részletező (oktató) tábla kijelölt rekordjainak törlése A részletező (oktató) tábla mezőértékeinek módosítása 27
DML műveletek Feladat: a) Vigyünk fel új oktatót és módosítsuk Szűcs M. beosztását. b) Az oktatók listájánál a név és a beosztás oszlopot cseréljük fel és név szerint állítsuk sorrendbe az oktatókat. Mezősorrend megváltoztatása: Az űrlap alján válasszuk az Edit Page menüpontot. Itt az egérrel jelöljük ki a beosztás mezőt és mozgassuk a név utáni pozícióba. Vagy a mezőket kiválasztva, Edit–User Interface–Sequence. Mentsük a változtatást.
28
DML műveletek Új oktató felvitele: Az oktató űrlapon kattintsunk az Add Row gombra és adjuk meg az adatokat. Oktató adatainak módosítása: A mezőértékek átírhatók. Rendezés: Kattintsunk a név oszlopcímkére (Sort by this column).
29
Egyválasztós lista Feladat: tanszékvezető kijelölése. 2. megoldás: a tanszékvezető mező értékét legördülő listából (LOV, List Of Values) lehessen kiválasztani. A lista ne az oktatók kódját, hanem a nevüket tartalmazza. Figyelem! Az adatbázis táblát (a vezető mező hosszát) nem kell módosítani, mert a táblában továbbra is a vezető oktató kódja lesz eltárolva. Ezt majd ellenőrizzék (APEX – SQL Workshop – SQL Commands)! 30
Egyválasztós lista 1. lépés: Edit Page 2 vezető mező jellemzőinek módosítása (dupla kattintás a mező nevére vagy jobb egér kattintás és Edit)
31
Egyválasztós lista 2. lépés: mező típusának módosítása
Ha Popup List of Values típust választunk, a lista külön ablakban jelenik meg.
32
Egyválasztós lista 3. lépés: LOV beállításai. Ha a Display Extra Values nincs letiltva, akkor az aktuális vezető kódja is a listába kerül.
Gazdanyelvi változó
33
Egyválasztós lista 4. lépés: alapértelmezés szerint a Source Used mindigre van állítva. Ennek az a hatása, hogy a vezető mezőben mindig a névsor szerinti első oktató látható a listából. Módosítsuk ezt úgy, hogy az aktuális tanszékvezetőt lássuk.
34
Egyválasztós lista Megjegyzések: ●
●
●
●
●
A LOV definíciós utasítás a Create Dynamic List of Values varázslóval is elkészíthető. Ugyanezt a listát az alkalmazáson belül máshol is használni fogjuk majd, ezért adjunk neki nevet és mentsük el. Edit Page – Tasks (jobb oldalon) – Convert LOV (Create Shared LOV) Többválasztós lista: Edit Page – Settings – Allow Multi Selection Mezőhöz alapértelmezett érték rendelése: Edit Page – Default – Default value A listában a megjelenített érték és a visszatérési érték lehet ugyanaz. 35
Jelentés (report) módosítása Tekintsük a Tantárgy űrlapot. A jelentéslap a Tantárgy tábla összes adatát (rekordok és mezők) mutatja. Feladat: a tantárgy jelentéslapon (report) az oktatja mező értéke ne az oktató kódja, hanem az oktató neve legyen. Megoldás: 1. A jelentéslap alján válasszuk az Edit menüpontot. 2. A hierarchikus listában (tree view) kattintsunk duplán a Tantárgy lapra, vagy jobb egérgombbal egyszer és a popup menüből válasszuk az Edit menüpontot. 3. A Source fülön látható a jelentést előállító SQL lekérdezés. Módosítsuk ezt. 36
Jelentés (report) módosítása Eredeti:
Módosított forrás:
Apply Changes – Run → A jelentésből eltűnt a módosított mező. Actions – Reset → A jelentés újra generálódott.
37
Jelentés műveletei ●
●
A jelentésen elvégezhető műveletek az Actions menüpontból érhetők el (formázás, rendezés, csoportosítás, számítások, aggregációk, grafikonos megjelenítés). A jelentéshez új sor hozzáadása: Create.
38
Numerikus értékbeállítások Feladat: a Tantárgy szerkesztő űrlapon (edit form) a kredit mezőnek adjunk alapértelmezett értéket (5) és kössünk hozzá értékellenőrzést (1 < kredit < 8). Megoldás: 1. A Tantárgy jelentéslapon válasszuk ki az egyik sort és kattintsunk az elején található szerkesztés ikonra (Edit Tantargy). 2. A szerkesztőlap (edit form) alján kattintsunk az Edit Page 4 menüpontra. 3. Itt a listából válasszuk ki a P4_KREDIT mezőt. 4. Edit – Default – Default value: 5. 39
Numerikus értékbeállítások Settings:
40
Radio button Feladat: a Tantárgy szerkesztő űrlapon (edit form) a félév értéke “tavasz” vagy “ősz” közül az egyik lehet. Az egyválasztós listát most Radio button formájában jelenítsük meg. Megoldás: 1. A Tantárgy jelentéslapon válasszuk ki az egyik sort és kattintsunk az elején található szerkesztés ikonra (Edit Tantargy). 2. A szerkesztőlap (edit form) alján kattintsunk az Edit Page 4 menüpontra. 3. Itt a listából válasszuk ki a P4_FELEV mezőt. 4. A Display as attribútuma legyen Radio group. 5. A megjelenített értékek listája most statikus. 41
Radio button Static list of values varázslóval:
Így a LOV definíciója:
A LOV definícióját magunk is előállíthatjuk. Ha a megjelenített érték és a visszatérési érték ugyanaz, akkor: STATIC:tavasz,ősz
42
Radio button Beállítási lehetőségek: ●
●
●
●
Source – Source used alapértelmezés szerint Always …; állítsuk Only when current value … is null. Így az aktuális értéket mindig mutatni fogja. Default – Default value Alapértelmezett érték: ősz. Alapértelmezett: Settings – Display Orientation Alapértelmezés szerint Vertical. Most állítsuk Horizontal, vízszintes elrendezésre. Settings – Number of Radio Columns Alapértelmezés szerint 1. Itt azt adjuk meg, Beállított: hogy a felsorolt lehetőségek hány oszlopba rendezve jelenjenek meg. Állítsuk most 2-re. 43
Osztott lista felhasználása Az oktatók egyválasztós listát (LOV) már a Tanszék űrlap részletező lapján (Page 2) létrehoztunk és elmentettük. Most használjuk fel. Feladat: a Tantárgy szerkesztő űrlapon (edit form) az oktatja mező értékét listából lehessen kiválasztani. Megoldás: 1. A Tantárgy jelentéslapon válasszuk ki az egyik sort és kattintsunk az elején található szerkesztés ikonra (Edit Tantargy). 2. A szerkesztőlap (edit form) alján kattintsunk az Edit Page 4 menüpontra. 3. Itt a listából válasszuk ki a P4_OKTATJA mezőt. 4. A Display as attribútuma legyen Select List. 44
Osztott lista felhasználása A List of Values fülön válasszuk ki az elmentett oktatók listáját.
A Source fülön ne feledjük a Source used attribútumot átállítani Only when current value in session state is null-ra!
45
Jelölőnégyzet (checkbox) Feladat: a Tantárgy szerkesztő űrlapon (edit form) a lezárás lehetséges értékei: aláírás + gyakorlati jegy, aláírás + kollokvium, kollokvium, gyakorlati jegy, aláírás, szigorlat. Alkalmazzunk jelölőnégyzeteket a megoldáshoz. Megoldás: 1. A Tantárgy jelentéslapon válasszuk ki az egyik sort és kattintsunk az elején található szerkesztés ikonra (Edit Tantargy). 2. A szerkesztőlap (edit form) alján kattintsunk az Edit Page 4 menüpontra. 3. Itt a listából válasszuk ki a P4_LEZARAS mezőt. 4. A Display as attribútuma legyen Checkbox. 46
Jelölőnégyzet (checkbox) LOV definíció:
Beállítások: ●
●
●
Default - Default value: aláírás. Source - Source used: Only when current value in session state is null Settings – Number of checkbox columns: 2 Figyelem! Ez így többválasztós lista. A kiválasztott értékek ellenőrzését külön kell megoldani.
47
Vizsgaidőpontok hozzáadása Feladat: Módosítsuk az alkalmazást! Adjunk hozzá egy új lapot, ami Naptáron mutatja a vizsgaidőpontokat. A vizsgák adatai ezen keresztül lesznek módosíthatók. Megoldás: Application Builder – Application 1 – Create Page – Calendar – Easy Calendar.
48
Naptár létrehozása A Tanszék és Tantárgy lapok mellett legyen egy új, Vizsga lap.
49
Naptár létrehozása A naptár mögötti tábla megadása:
Meg kell adni a táblában a dátum típusú mezőt, és a naptárban megjelenítendő mező nevét: 50
Naptár létrehozása A naptárban látható mezőérték egy link. Rákattintva megjelenik egy szerkesztő ablak, ahol a vizsga tábla adatai módosíthatók. Végezzük el ennek a lapnak a beállításait. Hozzuk létre a naptár lapot. 51
Naptár létrehozása Így néz ki a Vizsga lap:
A jobb felső sor gombjai a naptárban való keresést segítik. 52
Naptár létrehozása Egy naptárbejegyzésre kattintva megjelenik a kapcsolódó adattábla rekord szerkesztő lapja:
53
Egyszerű értékellenőrzés Feladat: hozzunk létre értékellenőrzést (validation) a vizsgadátumhoz. Biztosítsuk, hogy új vizsga felvitelekor, ill. módosításkor az új dátum ne legyen a mai napnál régebbi. Megoldás: 1. A Vizsga lapon válasszuk ki az egyik naptárbejegyzést. 2. A szerkesztőlap (edit form) alján kattintsunk az Edit Page 6 menüpontra. 3. A Page Processing területen jobb egérgombbal kattintsunk a Validating - Validations lehetőségre, majd Create Validation. 4. Adatérvényesítés szintje (mező szint): Page Item. 5. Válasszuk ki az ellenőrizendő mezőt: P6_DATUM. 54
Egyszerű értékellenőrzés Adjunk nevet az adatérvényesítésnek:
Adatérvényesítés típusa (validation type): SQL – SQL Expression. 55
Egyszerű értékellenőrzés Adjuk meg az ellenőrzés SQL kódját és a megjelenítendő hibaüzenetet.
56
Egyszerű értékellenőrzés Az ellenőrzés csak a CREATE és az APPLY CHANGES (SAVE) gombok lenyomásakor hajtódjon végre.
A Create gomb hatására létrejön az adatérvényesítés, mint tárolt adatbázis objektum.
57
Összetett értékellenőrzés Feladat: a Tantárgy szerkesztő lapon a lezárás módja négyféle lehet: aláírás, aláírás+kollokvium, aláírás+gyakjegy, vagy szigorlat. Ha csak egy mezőre vonatkozik az ellenőrzési feltétel, akkor mező szintű validálásról beszélünk. Most legyen összetett (több mezőt érintő, oldal szintű) az értékellenőrzés. A kreditpont és a tárgy lezárás módja között legyen adott a következő szabályrendszer: Tárgy lezárás módja
Kreditpont
aláírás
2, 3
aláírás+gyakjegy
4
aláírás+kollokvium
5, 6
szigorlat
7
58
Összetett értékellenőrzés Megoldás: 1. A Tantárgy főlapon kattintsunk az egyik tantárgy előtti szerkesztés ikonra. 2. A szerkesztőlap (edit form) alján kattintsunk az Edit Page 4 menüpontra. 3. A Page Processing területen jobb egérgombbal kattintsunk a Validating - Validations lehetőségre, majd Create Validation. 4. Adatérvényesítés szintje (oldal szint): Page.
59
Összetett értékellenőrzés Adjunk nevet az adatérvényesítésnek.
Adatérvényesítés típusa (validation type): PL/SQL – Function returning boolean. 60
Összetett értékellenőrzés Írjunk PL/SQL függvényt, ami akkor ad vissza igaz értéket, ha az űrlapon megadott adatok elfogadhatók. Egyébként hamis értékkel tér vissza és hibaüzenetet kapunk. A megjelenítendő hibaüzenet megadása kötelező.
61
Összetett értékellenőrzés Az ellenőrzés csak a CREATE és az APPLY CHANGES (SAVE) gombok lenyomásakor hajtódjon végre. A Conditions rész beállításai:
A Create gomb hatására létrejön az adatérvényesítés. A Run gombra kattintva tesztelhetjük. 62
Felhasznált irodalom ●
Building an Application using Oracle Application Express: Part 1 http://www.oracle.com/webfolder/technetwork/tutorials/ obe/db/devdays2012/apexp1_lab/apexp1_lab.html
●
Oracle Help Center: Database Application Express User's Guide – 4. Using Application Builder http://docs.oracle.com/cd/B28359_01/appdev.111/b322 58/bldr.htm#BABHEGEA
●
Oracle Help Center: Application Express Application Builder User's Guide https://docs.oracle.com/cd/E14373_01/appdev.32/e11838 63 /toc.htm