féléves feladat dokumentáció

35
0 ADATBÁZIS HASZNÁLAT II. Féléves feladat Kocsis Tamás Zsolt MQ1LGI ÓE-NIK Teabolt alkalmazás

Upload: kocsis-tam

Post on 22-Jan-2018

119 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Féléves feladat dokumentáció

0

ADATBÁZIS HASZNÁLAT II. Féléves feladat

Kocsis Tamás Zsolt MQ1LGI

ÓE-NIK

Teabolt alkalmazás

Page 2: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

1

Tartalomjegyzék TÁROLANDÓ ADATOK ....................................................................................................................2

MEGSZORÍTÁSOK ...........................................................................................................................2

NORMALIZÁLÁS .............................................................................................................................3

ALKALMAZÁSI KÖRNYEZET..............................................................................................................5

TÁBLÁK ÉS FELHASZNÁLÓK LÉTREHOZÁSA ...................................................................................6

ADATOK FELTÖLTÉSE ..................................................................................................................6

ALKALMAZÁS BETÖLTÉSE............................................................................................................8

DLL KÖNYVTÁR BETÖLTÉSE .........................................................................................................8

ALKALMAZÁS BEMUTATÁSA, TESZTELÉSE ÉS LÉTREHOZÁSÁNAK FOLYAMATA....................................9

ALKALMAZÁS .............................................................................................................................9

FŐOLDAL ................................................................................................................................. 11

KÍNÁLATUNK............................................................................................................................ 16

SZÁRMAZÁSI HELYEK ................................................................................................................ 18

ÁTLAG ÉRTÉK ........................................................................................................................... 20

PARANCSSOR ........................................................................................................................... 21

RAKTÁR ................................................................................................................................... 26

VÁSÁRLÓK ............................................................................................................................... 28

TEA SZÁMLÁLÓ ........................................................................................................................ 30

JOGOSULTSÁGI ADATOK............................................................................................................... 32

TESZTFUTÁSOK ............................................................................................................................ 33

IRODALOMJEGYZÉK...................................................................................................................... 34

Page 3: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

2

TÁROLANDÓ ADATOK

TEA_NEV: Meghatározza az árusított tea nevét (a származási hely elhagyásával), mely a piaci követelményeknek megfelelően minden esetben teljesen egyedi.

SZARMAZASI_HELY: Meghatározza az adott tea termőterületét, tehát azt az országot, ahol feldolgozták (a tea neve szinte minden esetben tartalmazza a helység

nevét is).

TIPUS: Az adott tea feldolgozási módjától függően meghatározza annak típusát.

TEA_AR: Az az összeg forintban megadva, amelyen értékesítésre kerül a tea.

SZAVATOSSAG: Az a dátum, amelytől kezdve a tea fogyasztása nem javasolt,

HOMERSEKLET: A vízhőmérséklet Celsius fokban megadva, melyen az adott teát

forrázni javasolt.

VASAROLT_MENNY: Az adott teából eddig összesen eladott mennyiség grammban kifejezve.

UZLETVEZETŐ: Az adott üzletben felelős alkalmazott, ki a teák árusításáért, az üzlet

vezetéséért felel.

UZLET_NEV: Az adott üzlethelyiség neve.

UZLET_CÍME: Az adott üzletközpont neve, amelyben az üzlethelység található.

VASARLO_NEV: A nyilvántartásba vett vásárló teljes neve.

EMAIL_CIM: A vásárló által megadott egyedi e-mail cím.

MENNYISEG: A vásárló által összesen vásárolt teák mennyisége grammban

kifejezve.

BEVETEL: A vásárló által összesen teákra kifizetett összeg forintban kifejezve.

MEGSZORÍTÁSOK

A forrázási hőmérséklet a teák fajtájából adódóan csak 50 C° és 100 C° között lehet.

A világon csak meghatározott számú tea típus létezik, ezek: Fekete, Fehér, Gyümölcs, Rooibos, Zöld, Vörös

A tea árát nem lehet 1000Ft-nál kevesebb és 10000Ft-nál több.

Page 4: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

3

NORMALIZÁLÁS

1. Ősmodell relációsémája a tárolandó attribútumokkal

teabolt < TEA_NEV, SZARMAZASI_HELY, TIPUS, TEA_AR, SZAVATOSSAG, HOMERSEKLET,

VASAROLT_MENY, UZLETVEZETO, UZLET_NEV, UZLET_CIM, VASARLO_NEV, EMAIL_CIM, MENNYISEG, BEVETEL >

2. Függőségek felismerése a. Magát a teát (ebből adódóan az üzletet is, ami forgalmazza) egyértelműen

meghatározza a neve és annak típusa tehát:

ftea = { TEA_NEV, TIPUS } { SZARMAZASI_HELY, TEA_AR, SZAVATOSSAG,

HOMERSEKLET, VASAROLT_MENNY, UZLET_NEV, UZLET_CIM, UZLETVEZETO }

b. Egyértelműen belátható, hogy az üzletvezetőt egyértelműen meghatározza az

üzletközpont neve, de mivel egy üzletközpontban több tea szaküzlet is található, így az azonosításhoz szükséges még az üzlethelyiség neve is, így:

füzletek = { UZLET_NEV, UZLET_CIM } { UZLETVEZETO }

c. Egy vásárlót természetesen egyértelműen meghatározza és azonosítja a neve és e -

mail címe, ebből adódóan:

fvasarlo = { VASARLO_NEV, EMAIL_CIM } { MENNYISEG, BEVETEL }

3. Függőségek normalizálása

a. Az ftea függőség vizsgálata

1NF: az ftea 1NF-ben van, mivel nincs benne összetett attribútum.

2NF: az ftea egyértelműen nincs 2NF-ben, mivel a másodlagos attribútumai között

van olyan, ami nem függ az elsődleges attribútumok mindegyikétől.

Ha az ftea -ból kivesszük az füzletek -et, akkor:

ftea1 = { TEA_NEV, TIPUS } { SZARMAZASI_HELY, TEA_AR, SZAVATOSSAG, HOMERSEKLET, VASAROLT_MENNY } 3NF: 3NF-ben is van, lévén nincs semmilyen függőség a másodlagos attribútumok között.

BCNF: mivel 3NF-ben van az ftea2, és baloldalának egyetlen valódi részhalmaza se

függ elsődleges sem másodlagos attribútumtól, így ez BCNF-ben van.

Page 5: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

4

b. Az füzletek függőség vizsgálata

1NF: az füzletek 1NF-ben van, mivel nincs benne összetett attribútum.

2NF: az füzletek 2NF-ben van, lévén nincs olyan másodlagos attribútuma, amely ne

függene az elsődleges attribútumok mindegyikétől.

3NF: az füzletek 3NF-ben is vannak, lévén nincs semmilyen függőség a másodlagos attribútumok között.

BCNF: mivel 3NF-ben van az füzletek, és baloldalának egyetlen attribútuma van csak,

így ez BCNF-ben is van.

c. Az fvasarlo függőség vizsgálata

1NF: az fvasarlo 1NF-ben van, mivel nincs benne összetett attribútum.

2NF: az fvasarlo 2NF-ben van, lévén nincs olyan másodlagos attribútuma, amely ne

függene az elsődleges attribútumok mindegyikétől.

3NF: az fvasarlo 3NF-ben is vannak, nincs semmilyen függőség a másodlagos

attribútumok között.

BCNF: mivel 3NF-ben van az fvasarlo, és baloldalának egyetlen attribútuma van csak, így ez BCNF-ben is van.

4. Függőségek összefoglalása ftea2 = { TEA_NEV, TIPUS } { SZARMAZASI_HELY, TEA_AR, SZAVATOSSAG,

HOMERSEKLET, VASAROLT_MENNY }

füzletek = { UZLET_NEV, UZLET_CIM } { UZLETVEZETO }

fvasarlo = { VASARLO_NEV, EMAIL_CIM } { MENNYISEG, BEVETEL }

5. Az eredmény adatmodell

teak < TEA_NEV, TIPUS, SZARMAZASI_HELY, TEA_AR, SZAVATOSSAG, HOMERSEKLET,

VASAROLT MENNY >

uzletek < UZLET_ NEV, UZLET_CIM, UZLETVEZETO >

vasarlok < VASARLO_NEV, EMAIL_CIM, MENNYISEG, BEVETEL >

Page 6: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

5

ALKALMAZÁSI KÖRNYEZET

A féléves feladat az Oracle Application Express fejlesztői környezet segítségével készült, mely

természetesen az Oracle adatbázis rendszerére épül. Először 2006-ban jelent meg ezen a néven,

azóta pedig már a 4.2.3-as verziónál tart a fejlesztése. Nagy István jellemzése a rendszerről mindent

elmond arról, hogy miért is érdemes használni:

„Az Application Express (APEX) az Oracle adatbáziskezelő rendszer PL/SQL nyelvi környezetébe

ágyazott webes eszközkészletre (Web-Toolkit) épülő, úgynevezett vékony-kliensű (webes)

alkalmazások fejlesztésére szolgáló, az Oracle professzionális (pénzért megvásárolható) adatbázis -

motorját kiegészítő, de önmagában ingyenesen letölthető alkalmazásfejlesztő eszköz. E két eszköz

(tehát az Oracle adatbázis-motor és az APEX) felhasználásából az Oracle cég létrehozott egy

ingyenes, web-es adatbázis-alkalmazások létrehozására is alkalmas fejlesztő eszközt Express Edition

(XE) néven. Az XE bizonyos (alapvetően az erőforrások méretére vonatkozó) korlátozásokon túl teljes

értékű web-es adatbázis-alkalmazások létrehozására alkalmas. Az XE-ben a web-es alkalmazások létrehozására szolgáló (az APEX-szel ekvivalens) komponens neve Application Builder.”i

A fentieket figyelembe véve lássuk is, milyen előkészületekre van szükségünk, hogy az alkalmazásunk

működőképes legyen. Ehhez biztosítva van kettő darab szkript fájl, amely létrehozza rendszerben a

táblákat, hozzáadja a megfelelő megszorításokat, valamint létrehozza a felhasználókat és

csoportokat, hogy tesztelhető legyen a rendszer. Létezik valamint három darab .txt kiterjesztésű fájl, melyek ezeket a táblákat feltöltik adatokkal.

Először is jelentkezzünk be az APEX rendszerbe az adminisztrátor felhasználóval (ha a telepítési

útmutatónak megfelelően lett telepítve a rendszer, akkor ez alapesetben: MAGYAR/Tigris -1)!

Page 7: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

6

TÁBLÁK ÉS FELHASZNÁLÓK LÉTREHOZÁSA

Lépjünk be az SQL Workshopba, majd ezt követően az SQL Scriptsbe, ahol jelenleg még csak egy üres

lista jelenik meg. Az üres lista tetején, jobb oldalon kattintsunk az Upload Script gombra, majd a

megjelenő ablakban válasszuk ki a „TablaLetre.sql” scriptet (a DVD mellékleten e /Scriptek/ mappában található), majd nyomjuk meg az Upload gombot.

Ismételjük meg a „users.sql” scriptel is ugyanezt (a DVD mellékleten e /Scriptek/ mappában

található).

A megjelenő listában most már ott van a két darab szükséges fájl, már csak le kell őket egymás után

futtatni, szóval kattintsuk a Run fejléc alatt lévő lejátszás gombra, majd az újonnan megnyíló ablakban a Run Now gombra. Ismételjük ezt meg a másik scriptnél is.

Ha minden rendben ment, létrejöttek a tábláink és a felhasználóink, valamint a felhasználói

csoportok is, ezt le is lehet ellenőrizni, ha rákattintunk a View Results alatt a dokumentum ikonra.

ADATOK FELTÖLTÉSE

Az újonnan létrejött táblákat fel kell tölteni, ehhez menjünk vissza az SQL Workshop nyitóoldalára,

majd válasszuk ki a Utilities menüpontot. Itt a második ikonon, a Data Workshopon belül, a Load

Data ablak Text Data hivatkozására kell kattintanunk. A megjelenő oldalon válasszuk ki a Load to:

Existing Table-t, majd kattintsunk a továbbra.

Page 8: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

7

A következő lépés a megfelelő tábla kiválasztása, tehát azé a tábláé, ahova az adatokat feltölteni

szeretnénk. Mivel három tábla jött létre a szkript lefuttatása után, ezért az egész procedúrát

háromszor meg kell ismételni. Első körben válasszuk ki a legördülő listából a TEAK táblát, majd az ezt

követő alkalmakkal a VASARLOK és az UZLETEK táblát.

Ha ez sikerült, a következő ablakban meg kell adni a feltöltendő adatokat tartalmazó .txt fájl elérési

útját (alaphelyzetben a DVD melléklet /Data/ könyvtárában találhatóak, elnevezésük megegyezik a hozzá tartozó tábla nevével).

Miután ezzel végeztünk, már csak annyi a teendőnk, hogy az utolsó ablakban leellenőrizzük, hogy

minden helyesen lett-e megadva, majd rákattintunk a Load gombra. Ne felejtsük el, hogy ezt a

procedúrát összesen háromszor végig kell csinálni, hogy minden adattábla értéket kapjon.

Page 9: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

8

ALKALMAZÁS BETÖLTÉSE

Nem maradt más hátra, már csak importálni kell magát az alkalmazást. Ehhez menjünk az

Application Builder menüpontra, ahol a középen megjelenő menüsávon kattintsunk az Import gombra.

A megjelenő ablakban válasszuk ki az alkalmazást tartalmazó .sql fájlt (a DVD mellékleten az

/Alkalmazás/ mappában található „f104.sql” fájlt), majd importáljuk be és telepítsük fel. Ha ez

sikeres volt, akkor megjelenik a Run Application gomb, kattintsunk rá erre.

DLL KÖNYVTÁR BETÖLTÉSE Az oldal megfelelő működése érdekében szükség lesz néhány apró utasítás és módosítás elvégzésére.

Először is adjuk hozzá a megfelelő jogosultságokat az SQLDEVELOPER alkalmazás SYSTEM oldalán:

GRANT CREATE ANY LIBRARY,

EXECUTE ANY TYPE,

EXECUTE ANY PROCEDURE,

DROP ANY LIBRARY,

DROP ANY TYPE,

DROP ANY PROCEDURE

TO SEMA1;

Ezt követően másoljuk a „TeaTipus.dll” valamint „TeaTipus.exp” fájlokat (a DVD melléklet /DLL/ mappájában találhatóak) az alábbi helyre:

alkalmazás helye\Oracle\product\11.2.0\dbhome_1\BIN\

például: C:\app\Oracle\product\11.2.0\dbhome_1\BIN

Ha ezzel végeztünk, indítsuk el az Application Expresst és kattintsunk az SQL Workshop menün belül

az SQL Commands gombra, majd írjuk be az alábbi két utasítást:

CREATE OR REPLACE LIBRARY TeaShopLIB AS

'C:\oracle\product\11.2.0\dbhome_1\BIN\TeaTipus.dll';

CREATE OR REPLACE FUNCTION TeaTipus

(bemenet in varchar2)

RETURN varchar2

AS EXTERNAL

LIBRARY TeaShopLIB

NAME "TeaTipus"

LANGUAGE C

PARAMETERS (bemenet string);

Kattintsunk a futtatás gombra, és ha minden jól ment, sikeresen végeztünk az alkalmazás

előkészítésével.

Page 10: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

9

ALKALMAZÁS BEMUTATÁSA, TESZTELÉSE ÉS LÉTREHOZÁSÁNAK

FOLYAMATA

ALKALMAZÁS Az alkalmazás létrehozásánál – az alapvető beállításoktól eltekintve – be lett állítva a magyar dátum

formátum, valamint az authorizációs sémák is, a jövőbeli felhasználó kezelés megvalósítása érdekében.

Az alkalmazás nyelve természetesen magyar, a megjelenő dátum formátuma megegyezik az

országban használt általános dátum formátummal.

A felhasználók (pontosabban felhasználói csoportok) kezelésére két séma lett létrehozva: egy ADMIN és egy UZLETVEZETO séma.

Page 11: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

10

Az ADMIN sémát megvalósító SQL lekérdezés a következő:

Az UZLETVEZETO séma hasonlóan néz ki:

Ez azért különbözik az ADMIN sémától, hogy megvalósítható legyen egy hierarchikus jogosultsági

rendszer, ami annyit jelent, hogy az ADMINISZTRATOR csoportba tartozó felhasználók elérhetik az

oldal összes funkcióját, az UZLETVEZETO csoportba tartozó felhasználók az oldalnak csak bizonyos

funkcióit, míg a publikus felhasználók az oldalnak csak egy még kisebb részét láthassák.

Page 12: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

11

FŐOLDAL Az alkalmazás elindítását követően a következő fogadja a felhasználót:

Ez az oldal minden vendég számára elérhető, nincsen autentikálva. Az üdvözlőszöveg tartalmazza a

cégre vonatkozó főbb adatokat, míg a jobb oldalon megjelenő lista lehetőséget nyújt a cégnél

dolgozó alkalmazottak főbb információnak megtekintésére, tehát arra, hogy adott kolléga melyik

bevásárlóközpont melyik üzletében dolgozik. Erre azért van szükség, mert azon vendégeink, akik

online vagy telefonon keresztül kommunikáltak cégünk valamely alkalmazottjával, de nem biztosak

benne, hol tudnak személyesen kapcsoltba lépni vele, azok így könnyebben megtalálják, me rre

keressék.

A névre kattintva megjelenik az adott alkalmazotthoz tartozó üzletközpont és üzlet neve.

Ezt letesztelve (rákattintva Fekete Judit nevére) meg is jelenik a várt oldal, ahonnan a fenti menü segítségével könnyen visszanavigálhatunk a főoldalra.

A tesztelést követően megállapíthatjuk, hogy megfelelően működik az alkalmazás ezen része, ezért most tekintsük meg a megvalósítás részleteit is.

Page 13: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

12

Az oldal az alábbi módon épül fel:

Egy „Üdvözlő” nevezetű HTML régióban található az a HTML tartalom, ami az üdvözlőszöveget

tartalmazza. Ennek a létrehozásánál nem volt szükség semmilyen speciális beállításra, a megfelelő

szövegek magyarra fordítását leszámítva.

Tartalmaz egy Process-t is, ami a tartalom betöltése előtt hajtódik végre (Before Header). Ha

esetlegesen nem sikerült volna a táblák létrehozása a szkript fájllal, a folyamat észreveszi ezt, és

automatikusan létrehozza a megfelelő táblákat.

Page 14: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

13

A képen jól látszik, milyen esetekben fut le mindenképpen a PL/SQL blokk tábla létrehozó része: ha nem léteznek még a TEAK, UZLETEK valamint VASARLOK táblák. Egy részlet a kódból:

declare

teaktablavan number(1);

uzletektablavan number(1);

vasarloktablavan number(1);

begin

select count(*)

into teaktablavan

from user_tables

where table_name = 'TEAK';

select count(*)

into uzletektablavan

from user_tables

where table_name = 'UZLETEK';

select count(*)

into vasarloktablavan

from user_tables

where table_name = 'VASARLOK';

if teaktablavan != 1 then

execute immediate

'CREATE TABLE teak(

tea_nev VARCHAR2(30),

tipus VARCHAR2(10),

szarmazasi_hely VARCHAR2(15),

tea_ar NUMERIC(5),

szavatossag DATE,

homerseklet NUMERIC(3),

vasarolt_menny NUMERIC(6),

PRIMARY KEY(tea_nev, tipus),

CONSTRAINT forrazasi_homerseklet

CHECK ((homerseklet>=50) AND

(homerseklet<=100)),

CONSTRAINT tea_ar

CHECK((tea_ar>1000) AND

(tea_ar<10000)))';

Page 15: Féléves feladat dokumentáció

14

Természetesen ez nem elég ahhoz, hogy csak akkor fusson le a PL/SQL kód, amikor nem léteznek a

táblák, hisz az ezt leellenőrző (fentebb látott) kód első fele mindenképp lefut. Annak érdekében, hogy az alkalmazás még optimálisabban működjön, adjunk hozzá egy feltételt a Process-hez.

Mivel a feltétel típusánál beállítottuk, hogy csakis akkor fusson le a Process, ha a lentebb olvasható

feltétel igazat ad vissza, megoldottuk, hogy ténylegesen csak akkor hozzon létre táblákat az alkalmazás, amikor biztosan nem léteznek. Az ezt megvalósító kód:

declare

Szam number(1);

begin

select count(*)

into Szam

from user_tables

where (table_name='TEAK') or (table_name='UZLETEK') or (table_name='VASARLOK');

if Szam = 3

then return false;

else return true;

end if;

end;

Page 16: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

15

Az oldal másik fontos funkciója a kollégák listájának, és a nevekhez tartozó címek megjelenítse, ami

egy Drill-down segítségével történik.

Ennek megvalósításához egy új Wizard Report lett létrehozva, ami az UZLETEK táblából jelenítí meg a

neveket. Ezt követően a megjelenített ERTEKESITO report mezőt módosítva megadtam, hogy a linkre

kattintva egy általam létrehozott láthatatlan P6_ERTEK nevezető HIDDEN FIELD típusú mezőnek adja

át magának az értékesítőnek a nevét.

Ezt követően létrehoztam egy új oldalt (Üzleteink néven), amin elkészítettem a fentebb említett

P6_ERTEK nevezetű HIDDEN FIELD itemet, valamint egy Wizard Report is, ahol az UZLETEK tábla

összes attribútumát használva megadtam egy extra feltételt is, ami összekapcsolja a P6_ERTEK

mezőben tárolt névvel, és csak az ahhoz tartozó értékeket jeleníti meg.

Page 17: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

16

KÍNÁLATUNK

Az alábbi – ismételten publikus - oldalon a felhasználónak lehetősége van az üzlet által kínált teák

közötti böngészni termékkategóriák szerint, tehát teatípusonként.

Egy legördülő lista tartalmazza az elérhető teatípusokat, innen kiválasztva a számunkra megfelelőt, a

jobb oldalon megjelennek az ebbe a kategóriába sorolható teák. Az <Összes> menüpont kiválasztása esetén pedig lehetőség van a raktáron lévő összes tea megjelenítése.

Fontos funkciója ennek az oldalnak, hogy csakis azokat a teákat jeleníti meg, amelyeknek a lejárati

dátuma az aktuális dátumnál nagyobb, így elkerülve azt, hogy valaki romlott árut vásároljon.

Az oldal működését és felépítését tekintve a következőképpen néz k i:

Page 18: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

17

A két legfontosabb elem az oldalon a „teáink” klasszikus report és a tea típusokat megjelenítő

P2_TEAK legördülő lista, mely a létrehozásnál alapvető beállítások mellett a következő:

Annak érdekében, hogy az összes teatípus megjelenjen, szükség volt egy NULL DISPLAY VALUE-ra is, amely segítségével megadható a pontos lekérdezés a klasszikus report formon, amely így néz ki:

Az alapvető adatok lekérése mellett (kivéve természetesen a szavatossági dátum) leellenőrizzük,

hogy melyik típust választotta ki a felhasználó, valamint hogy az adott tea szavatossága régebbi-e mint a jelenlegi dátum.

Page 19: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

18

SZÁRMAZÁSI HELYEK

Ezen az oldalon a felhasználónak – lévén ez is publikus – lehetősége van a teákat származási helyük

alapján listázni. Annak érdekében, hogy egyszerre több, számára legmegfelelőbb ország kínálata

közül válogathasson, egy „checkbox” segítségével tudja beállítani a kiválasztott országokat/területeket.

Alapesetben nem jelenik meg semmi az oldalon (a listát leszámítva), így ehhez tartozó táblázat sem,

elkerülve az üres és értelmetlen lekérdezéseket. Viszont amint a felhasználó bekattintotta a

megfelelő mezőket és rákattintott a „Megjelenítés” gombra, megjelennek a kiválasztott teák egy

listában, megyek származási hely szerint vannak sorrendbe helyezve (ez növekvő vagy csökkenő

sorrendbe rendezhető).

Működését tekintve az oldal nagyon hasonló a fentiekben megismertetett „Kínálatunk” oldalhoz, az

elemek is szinte teljes mértékben megegyeznek. Természetesen jelen esetben is figyelünk arra, hogy csakis friss és finom teákat jelenítsünk meg, tehát olyanokat, amik még nem jártak le.

Lévén az oldal felépítése az elemek típusát leszámítva hasonló az előzőével (leszámítva azt az extra

gombot, ami csak a „Küldés” funkciót valósítja meg), így ehhez nem szükséges képet csatolni, viszont fontos tisztázni, mik is azok az apró különbségek.

Page 20: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

19

A legördülő lista helyét átvette egy „checkbox”, melyen az alapvető beállítások nem lettek

módosítva. Az értékeket – hasonlóan mint a legördülő listánál - a következő lekérdezés adja át neki:

SELECT DISTINCT SZARMAZASI_HELY a, SZARMAZASI_HELY b FROM TEAK ORDER BY 1

A megjelenő klasszikus report lekérdezése már kicsit komplexebb (a beállítások megegyeznek a

fentebb képpel dokumentált reportéra), hisz figyelnünk kell arra az esetre is, amikor több elem lett kiválasztva a listában:

select TEAK.TEA_NEV as TEA_NEV,

TEAK.TIPUS as TIPUS,

TEAK.SZARMAZASI_HELY as SZARMAZASI_HELY,

TEAK.HOMERSEKLET as HOMERSEKLET,

TEAK.TEA_AR as TEA_AR

from TEAK TEAK

where (INSTR(:P3_SZARMAZ, "TEAK"."SZARMAZASI_HELY") > 0) and

(teak.szavatossag > sysdate)

Fontos még beállítanunk, hogy csak abban az esetben jelenjen meg maga a tábla, hogy ha ki lett

választva egy teatípus. Ezt a következőképpen tehetjük meg:

Ebben az esetben csakis akkor fog megjelenni táblázat a jobb oldalon, ha ki lett választva valami a teatípusok közül.

Page 21: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

20

ÁTLAG ÉRTÉK

Ez az oldal már csak az üzletvezetők (tehát az UZLETVEZETO csoportba tartozó felhasználók) és

adminisztrátorok számára érhető csak el. Egy rádió gomb csoport segítségével ki lehet választani,

melyik teatípusra vonatkozó statisztikára vagyunk kíváncsiak, és az alkalmazás megjeleníti az eredményt egy szövegdobozban.

A lekérdezés a kiválasztott teatípus teáinak árából számol átlagot, és ezt jeleníti meg a felhasználó

számára, természetesen csak abban az esetben, ha ki lett választva valami. A gombok közötti

váltogatás természetesen dinamikus, és a megjelenített eredmény is maximum csak két tizedes jegyig jeleníti meg az értékeket.

Az oldal felépítése a következő:

A két régió elég egyértelmű: a „Típusválasztó” fogja tartalmazni a rádió gombokat, míg az „Átlagos

érték (100 grammra)” oldal a számolás végeredményét.

Page 22: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

21

A P5_TIPUS rádió gomb elemeit feltöltő lekérdezés nagyon egyszerű, hasonló, mint az előzőek

voltak:

SELECT DISTINCT TIPUS a, TIPUS b FROM TEAK ORDER BY 1

A P5_LAP text field csak az eredmény megjelenítéséért felel, se számolást, se műveletet, se

lekérdezést nem tartalmaz.

Van viszont egy számolást végző „Computation”, amely az „After Header” szekcióban futtatja le az alábbi lekérdezést (SQL Query – return single value):

SELECT ROUND(AVG(TEAK.TEA_AR),2

FROM TEAK TEAK

WHERE TEAK.TIPUS = :P5_TIPUS

Ez felel a kiválasztott teatípusra vonatkozó számolások elvégzéséért, és minden esetben lefut, amint

változtatás történt a rádió gombok között.

PARANCSSOR

Ez az oldal kizárólag csak az ADMINISZTRATOR csoportba tartozó felhasználók számára érhető el,

meggátolva azt, hogy a hozzá nem értő üzletvezetők vagy egyszerű felhasználók módosíthassák az

oldal gerincét alkotó adatbázist és az ahhoz tartozó táblákat.

Page 23: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

22

Itt az adminisztrátornak lehetősége van az alkalmazás tábláinak megjelenítésére, valamint saját SQL

lekérdezések írására, melynek eredménye meg is jelenik az oldalon.

Ha csak egyszerűen meg szeretne nézni egy táblát, akkor az oldal alján lévő listából kiválasztva a megfelelőt, majd a „Megjelenítés” gombra kattintva megjelenik a kívánt adattábla.

Az oldal tetején található „Utasítás” szövegmezőbe tetszőleges SQL utasítás írható (valamint futtatható is), melynek sikeréről vagy sikertelenségéről tájékoztat az alkalmazás.

Page 24: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

23

Természetesen lehetőség van lekérdezéseket is írni a parancssorba, nézzük meg például ezt:

Ebből is látszik, miért szükséges, hogy csak az adminisztrátorok férjenek hozzá ehhez az oldalhoz, hiszen itt nagyon nagymértékben befolyásolni lehet az eladásokat, raktáradatokat, stb.

Az oldal felépítése komplikáltabb, mint azt előzőleg láthattuk, az alábbi képen láthatóak azok az elemek, amik a fenti funkciók megvalósításáért felelősek.

A „Lehetőségek” és „Táblák” HTML tartományok egyértelműek, ezek tartalmazzák az oldalon megjelenített elemeket.

Van az oldalon három gomb is: „Futtat”, „Törlés” és „Megjelenítés”

Az első kettő felelős a megfelelő Process végrehajtásáért, a harmadik pedig a kiválasztott tábla megjelenítéséért (egy egyszerű Submiton keresztül).

A P7_PARANCS és P7_EREDMENY szövegmezők funkcióját fentebb már láthattuk: az elsőbe lehet beleírni az SQL utasítást, amelynek kimeneteléről a P7_EREDMENY mezőbe érkezik a válasz.

A P7_REJTETT mező funkciója az adatok átadása, ennek segítségével tudjuk végrehajtani a beírt

utasításokat.

A P7_TABLANEV legördülő lista tartalmazza az alkalmazásban elérhető adattáblákat, ennek a funkciónak a működéséhez szükséges SQL lekérdezés pedig a következő:

SELECT table_name a, table_name b

FROM user_tables

WHERE (table_name not like 'APEX$%') and

(table_name not like 'DEMO%')

ORDER BY 1

Page 25: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

24

Természetesen ez nem elég ahhoz, hogy működőképes legyen a parancssor, szükségünk lesz még két

Reportra, valamint két Processre is.

Az „Eredmény” klasszikus report alapbeállításain semmi sincs változtatva, a forrása pedig egy egyszerű SQL kód:

BEGIN

RETURN :P7_PARANCS;

END;

Ez annyit jelent, hogy itt fog megjelenni a P7_PARANCS mezőbe írt lekérdezés eredménye. Viszont

arra vigyáznunk kell, hogy csak abban az esetben jelenjen meg bármi is, ha az adminisztrátor SELECT utasítást használt, egyéb esetben csak végre kell hajtanunk a kódot.

Page 26: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

25

Erre segítségül szolgál a VEGREHAJT Process, amely abban az esetben fut le, ha meg lett nyomva a

„Futtat” gomb. Az ezt végrehajtó utasítás a következő (és itt láthatjuk miért is van szükség a rejtett mezőnkre):

BEGIN

:P7_EREDMENY := '';

:P7_REJTETT := UPPER(SUBSTR(:P7_PARANCS,1,6));

EXECUTE IMMEDIATE :P7_PARANCS;

IF :P7_REJTETT != 'SELECT'

THEN

:P7_EREDMENY := 'Végrehajtva. '||SQL%ROWCOUNT||' sor került módosításra';

ELSE

:P7_EREDMENY :='Végrehajtva.';

END IF;

EXCEPTION

WHEN OTHERS

THEN

IF SUBSTR(SQLERRM,1,9)='ORA-06535'

THEN

:P7_EREDMENY := 'Nincs utasítás!';

ELSE

:P7_EREDMENY := 'Hiba történt! Kód: '||SQLERRM;

END IF;

:P7_REJTETT := 'HIBA';

END;

A „TORLO” Process azért felel, hogy ha a felhasználó megnyomta a „Törlés” gombot, eltüntesse az eddig megjelenített üzeneteket, táblákat valamint a beírt utasítást a parancsmezőből:

begin

:P7_PARANCS := '';

:P7_REJTETT := '';

:P7_EREDMENY := 'Utasításmező törölve!';

end;

Page 27: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

26

RAKTÁR

Az alábbi oldal ismét csak az üzletvezetők (és az adminisztrátor) számára érhető el, hiszen itt lehet

megnézni a raktáron lévő teákat, módosítani azokat, valamint új teát felvinni.

Az oldal több fontos funkciót is ellát, például itt lehet leltározás után megadni, mennyit vásároltak

egy adott teából. A tea nevére kattintva megjelennek adatai, melyek módosíthatóak a megfelelő

szabályok betartása mellett (a rendszer például nem enged olyan teákat bevinni a rendszerbe,

melyek már lejártak, így a dátum mindig csak az adott naptól kezdődő napokat listázza).

Page 28: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

27

Új tea felvitelénél az oldal természetesen leellenőrzi, hogy minden fontos adat meg lett-e adva, addig

nem engedélyezi a rekord elmentését, amíg minden kötelező mező adata nincs meg.

Fontos megjegyezni, hogy a módosító / új tea hozzáadása oldalon a típus és származási hely egy

legördülő listává lett alakítva, melyből az üzletvezető kiválaszthatja a megfelelő értéket, így kerülve el az esetleges elírásból adódó hibákat.

Mivel ez egy interaktív report, ezért az összes ehhez tartozó funkció elérhető. Mivel az eszköztár

kínálta lehetőségek széleskörűek, ezeket jelen dokumentumban nem prezentálom, leírásuk megtalálható többek között a hivatalos dokumentációban is.

Megvalósítása egy interaktív report létrehozásával történt, ahol a TEAK tábla és az alapvető

beállítások kiválasztása után az alkalmazás automatikusa létrehozta az oldalakat, az ahhoz tartozó elemeket valamint folyamatokat, így már csak ezek magyarítása, szépítése maradt hátra.

Módosítva lett viszont a TIPUS és SZARMAZASI_HELY elemek típusa, hogy legördülő listaként jelenjenek meg.

És a tartalmukat feltöltő SQL lekérdezés pedig:

SELECT DISTINCT tipus a, tipus b FROM teak ORDER BY 1

valamint

SELECT DISTINCT szarmazasi_hely a, szarmazasi_hely b FROM teak ORDER BY 1

Page 29: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

28

VÁSÁRLÓK

A vásárlók kezelését, valamint a vásárlások lebonyolítását segítő oldal megjeleníti egy tabulátor

nézetben a vásárlókat és a hozzájuk tartozó adatokat.

Mivel ez az oldal is csak UZLETVEZETOK és ADMINISZTRATOROK számára elérhető, így egyszerű felhasználó nem láthatja, tehát nem is manipulálhatja ezen adatokat.

Az oldalon belül lehetőség van egyszerre több adat módosítására és felvitelére is, így megkönnyítve a forgalmas időszakokban az adat-, és felhasználó kezelést.

Page 30: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

29

Az oldal megvalósítását tekintve egy „Tabulator Form”, melyen a megfelelő kulcsok kiválasztása

mellett magyarosítva lettek a megfelelő üzenetek, valamint a fentebb is látott autentikációk létre lettek hozva.

Természetesen fontos, hogy a tabulátor létrehozásakor mindenképpen ROWID alapján azonosítsuk a

sorokat, különben az adatmódosítás valamint adatbevitel problémás lehet.

Page 31: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

30

TEA SZÁMLÁLÓ

Az utolsó oldal - aminek eléréséhez a fentiekben is említett jogosultságok szükségesek -,

megszámolja és megjeleníti a raktáron lévő teák típusai alapján, hogy melyikből hány különböző termék kapható jelenleg.

Itt természetesen interakcióra nincs szükség, hiszen ez csak egy statikus oldal, mely az adatok megjelenítésére szolgál.

Működését tekintve az oldal így néz ki:

Található benne egy régió, itt fognak megjelenni az adatok, emellett pedig egy rejtett mező

(P25_TIPUS), amelybe bekerül az összes teának a típusa (kettősponttal elválasztva) egy stringként.

Page 32: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

31

A P25_EREDMENY felel a művelet elvégzéséért és megjelenítéséért, melyhez egy külső DLL könyvtár

segítségét (melynek bemásolásáról és elhelyezéséről a bevezetőben olvashattunk) használja.

A DLL könyvtár Visual Studio 2012-ben létrehozva, és csak az alábbi egyszerű kódot tartalmazza:

public static string TeaTipus(string bemenet) { string[] tomb = bemenet.Split(':'); int voros = 0; int fekete = 0; int feher = 0; int gyumolcs = 0; int rooibos = 0; int zold = 0; for (int i = 0; i < tomb.Length; i++) { switch (tomb[i]) { case "Fekete": fekete++; break; case "Fehér": feher++; break; case "Gyümölcs": gyumolcs++; break; case "Rooibos": rooibos++; break; case "Vörös": voros++; break; case "Zöld": zold++; break; } } return (string.Format("Fekete: {0}db, Fehér: {1}db, Gyümölcs: {2}db, Rooibos: {3}db, Vörös: {4}db, Zöld: {5}db", fekete, feher, gyumolcs, rooibos, voros, zold)); }

Page 33: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

32

JOGOSULTSÁGI ADATOK

Az alkalmazás jogosultságaiért, felhasználóiért valamint a csoportok létrehozásáért felelős szkript futtatását a bevezetőben olvashattuk (users.sql), így ennek részletezésére itt nincs szükség.

Az alkalmazás a következő felhasználói csoportokkal rendelkezik

UZLETVEZETO

ADMINISZTRATOR

Az alkalmazás a következő felhasználókkal rendelkezik:

scott (jelszava: tiger) – az ADMINISZTRATOR csoport tagja

uzlet (jelszava: vezeto) – az UZLETVEZETO csoport tagja

A csoportok által elérhető oldalak:

Publikus felhasználók:

o Főoldal o Kínálatunk

o Származási helyek o Üzletek

UZLETVEZETO felhasználók: o Minden, amit a publikus is

o Átlag érték o Vásárlóink

o Raktár o Tea számláló

ADMINISZTRATOR felhasználók: o Minden, amit a publikus és UZLETVEZETO is

o Paranccsor

Page 34: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

33

TESZTFUTÁSOK

A fentebbi részletes útmutató tartalmazta az összes főbb funkció bemutatását, a lehetséges teszteseteket, így erre külön itt nem térünk ki.

Page 35: Féléves feladat dokumentáció

Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI

34

IRODALOMJEGYZÉK

Kende Mária – Nagy István: Oracle példatár - SQL, PL/SQL Kende Mária – Nagy István: Internetes adatbázis-alkalmazások fejlesztése

(Oracle Application Express) 1. rész

Kende Mária – Nagy István: Internetes adatbázis-alkalmazások fejlesztése (Oracle Application Express) 2. rész

Kende Mária – Nagy István: Internetes adatbázis-alkalmazások fejlesztése (Oracle Application Express) 3. rész

i. Az idézet Kende Mária – Nagy István: Internetes adatbázis-alkalmazások fejlesztése (Oracle Application Express) 1. rész

dokumentumból származik