SQLForms
Az adatbázisrendszerek piacán a legnagyobb szeletet az alkalmazásfejlesztő
eszközök foglalják el. Egyetlen nagyobb, e területhez valaminként is csatlakozó
cég sem engedheti meg magának, hogy önként lemondjon erről a piaci
szegmensről. Ha beletekintünk a nagyobb RDBMS forgalmazó cégek szofter
kínálatába, láthatjuk, hogy abban jelentős helyet foglalnak el a alkalmazás
fejlesztő termékek. Ez igaz, többek között az Oracle cégre is. Az Oracle cég
CDE (Cooperative Development Enviroment) rendszere magába foglalja
mindazon fejlesztő eszközöket, vagyis 4GL komponenseket, melyekkel
rugalmasan, plattformfüggetlenül elkészíthetők a különböző Oracle alapú
alkalmazások. Természtesen az Oracle sem tartja célszerűnek nyitott
világunkban, hogy elzárkózzon, falat emeljen maga köré, ezért az elkészített
alkalmazások, megfelelő csatlakzoások segítségével, a többi RDBMS
rendszerhez is hozzáférhetnek. E nyitottság ellenére az alkalmazások fejlesztő
eszközö döntő többsége elsődlegesen az Oracle RDBMS sajátosságaihoz
igazodik.
Oracle CDE
A CDE a különböző fejlesztő eszközök széles sprektumát foglalja magába. A
következő lista egy 1994-es állapotot mutat be, megadva az akkorra
megvalósult komponenseket:
Komponensek
rövid leírása
- Oracle Browser
Grafikus menürendszeren alapuló
lekérdező és adakezelő rendszer,
elsősorban nem adatbázisszakértők
számára. A kezelési felülete az RQBE
felületre hasonlít (a FoxPro RQBE-nél
megismert megjelenés és funkcionalitás
jellemzi)
- Oracle Book
On-line dokumentumok készítésére és
megtekintésére alkalmas segédeszköz. Az
elkészített dokumentum a struktúrált
adatok mellett szöveges, képi, hangi, video
elemeket is tartalmazhat, s hypertext
jellegű navigációt is biztosít.
- Oracle Data Query
Menürendszeren alapuló ad-hoc lekérdező
rendszer karakteres terminálra. A kezelés
módja itt is RQBE alapon nyugszik.
- Oracle Forms
Grafikus képernyő program fejlesztő
rendszer. A fejlesztő a megfelelő kontroll
elemek felhelyezésével és a viselkedést
leíró PL/SQL blokkoknak a kontrollokhoz
történő hozzárendelésével dolgozik. A
felület funkcionalitásában hasonlít a
FoxPro Screen Editor komponenséhez.
- Oracle Reports
Jelentést fejlesztő segédeszköz. A fejlesztő
itt is a különböző kontroll elemek és
kódrészletek megadásával grafikusan
felépítheti a jelentést. A jelentés grafikus
elemeket is magába foglalhat.
- Oracle Graphics
Grafikus lekérdező rendszer, mellyel az
adatbázisban tárolt adatok grafikonok,
képek formájában jeleníthetők meg. A
rendszer multimédia lehetőségekkel is
rendelkezik.
- Oracle Card
Grafikus alkalmazás fejlesztő eszköz. A
rendszer külön komponenseket tartalmaz a
táblázatok létrehozására, módosítására;
gyors képernyő program prototipus
generálására; ad-hoc lekérdezések
fejlesztésére.
- Oracle Precompilers
Beágyazott SQL utasításokat tartalmazó
gazdanyelvi programok készítéséhez
szükséges előfordítók, könnyvtárak
rendszere. E kategóriába tartozik a
korábban megismert ProC rendszer is.
- Oracle Call Interface
Alacsony szintű program interface a
gazdanyelvi programokból az Oracle
RDBMS felé. Ez a rendszer gazdagabb
funkcionalitást biztosít, mint a beágyazott
SQL formalizmus.
- PL/SQL
Procedurális elemekkel kibővített SQL
nyelv. Az elkészitett PL/SQL blokk több
különböző komponensben is felhasználható
a vezérlési elemek leírására.
- SQLPlus
Parancsorientált, interaktív kezelő felület
az Oracle RDBMS felé. A rendszer SQL
alapokon nyugszik, kiegészítve néhány
jelentés készítő és információ lekéderdező
egyedi paranccsal.
- CASE Dictionary
Egy központi adatszótár, repository,
kezelő, melynek segítségével gyorsabban
definálhatók, generálhatók az alkalmazás
különböző komponensei.
- CASE Designer
Alkalmazás tervező, mellyel grafikusan
megtervezhetők a különböző rendszerlíró
mátrixok (adatfolyam-, ER-, függőségi- és
vezérlési diagrammok), adattipusok,
táblázatok. Ezen mátrixok alapján a
rendszer automatikusan generálja az
adatbázis objektumokat, az űrlap és
jelentés programokat.
- Oracle CASE for SSADM
SSADM technikán alapuló CASE fejlesztő
rendszer.
- Oracle CASE Exchange
A különböző fejlesztőktől származó CASE
rendszerek közötti adatkapcsolat
megvalósítását szolgáló rendszer. Az
adatok mindkét irányba történő
konvertálásvertálást megoldja.
- Oracle Glue
Különböző formátumú adatok integrálását
szolgáló rendszer.
A táblázatban is említett Oracle Forms egy hatékony és plattformfüggetlen
fehjlesztőeszközt biztosít az RDBMS-en alapuló alkalmazások elkészítéséhez.
A működési módja hasonlít a már megismert képernyő tervező 4GL
komponesek működéséhez. A tervezés indulásakor itt is egy üres képernyőt kap
a tervező, melyre a megadott kontroll listából kiválasztott vezérlési elemek
(mint pl. nyomógomb, adatmező, lista,...) az egér segítségével lehelyezhetők.
Az egyes vezérlési elemek mögött egy paraméterlista áll, mely segítségével az
elem egyes paraméterértékei adhatók meg. Az egyes elemekhez kódblokkok
(most PL/SQL blokkok) is rendelhetők a különböző viselkedési elemek,
melyeket itt triggereknek neveznek, leírására. Az elkészült képernyő program,
vagy űrlap a Forms nevet viseli, ezért is kapta a fejlesztő eszköz is a Oracle
Forms elnevezést.
Az Oracle Forms tervező felületének szemléltetésére bemutatunk két ábrát ( ),
melyek az űrlapot szerkesztő ablakot, illetve a mező attributumait beállító
paraméterablakot ábrázolják. Az első ábrán megfigyelhető a rendelkezésre álló
menürendszer és a vezérlési elemek pallettája. A paletta a magába foglalja a
grafikus és adatelemek mellett a megjelenenítés formátumát szabályozó
elemeket is.
Ezen ábrák elsődleges célja annak szemléltetése, hogy első pillantásra is milyen
sok azonos külső és belső vonás fedezhető fel a különböző forrásból származó,
de azonos funkcióhoz kapcsolódó 4GL komponensek között. E ábrán is
számtalan ismerős elem tűnik fel, s igen sok elem funkcióját már magunk is
kitalálhattuk az eddigi ismereteink alapján. Ez a nagymérvű hasonlóság
segítséget ad abban, hogy könnyebben áttérhessünk az egyik 4GL rendszerről a
másikra.
A hasonlóság azonban nem jelent teljes azonosságot. Minden rendszer
tartalmaz egyedi elemeket, egyedi szemléletmódot. A következőkben mi az
Oracle űrlaptervezőjének jellegzetességeit fogjuk áttekinteni.
A figyelmes olvasónak feltünhetett, hogy ugyan a fejezetcímben SQLForms
szerepel, de eddig ehelyett csak az Oracle Forms rendszerről beszéltünk. Nos az
eltérés oka, hogy ugyan jelenleg az Oracle Forms a CDE részeként
forgalmazott rendszer, de ennek gyakorlása helyett mi a rendszer elődjének
tekitnhető SQLForms fejlesztőrendszert fogjuk tanulmányozni. A váltás több
okra vezethető vissza. Elősször is az SQLForms igénytelenebb hardver
környezetben is fut, s rendszereünkben ez jobban, több helyről elérhető, s
egyidejűleg többen is dolgozhatnak rajta. A praktikus okok mellett azzal is
indokolható a választás, hogy az SQLForms magában hordozza mindazon
alapvonásokat, amik az Oracle Forms -ot is jellemzik, így a két rendszer
terminológiája, fogalomrendszere igen hasonló. Emiatt e rendszer ugyanolyan
alkalmas az alavonások, a Forms-ban történő fejlesztés szemléletmódjának
elsajátítására.
Az SQLForms alapelemei
Az SQLForms karakteres terminálon futó Oracle RDBMS-hez kapcsolódó
alkalmazások fejlesztő eszköze. A karakteres terminál, az egér hiánya
jelentősen meghatározza mind a fejlesztés, mind a futó rendszer paramétereit. A
felhasználó parancsait, utasításait egyedül a billentyűzeten keresztül adhatja ki.
Emiatt az űrlap egy szigorúbb, egyérelműbb vezérlési menethez kötődik, s
hiányoznak olyan kontroll elemek, melyek a Windows-os környezethez
kapcsolódnak, mint például a nyomógomb. A karakteres terminál a
szegényesebb megjelenési formátum mellett azonban számos előnnyel is
rendelkezik a hagyományos, adminisztrációs alkalmazások terén. A karakteres
terimál egyrészt olcsóbb megvalósítást jelent, másrészt könnyebb a felhasználó,
az ügyviteli dolgozó figyelmét a szükséges dolgokra irányítani, s jobban
ellenőrzés alatt tartható a felhasználó tevékenysége is.
Az SQLForms fejlesztőrendszer maga is több komponensből épül fel. E
komponsensek külön-külön is használhatók, de bizonyos esetekben, például a
tervezés során, mindegyikük elérhető közvetlenül. A leglényegesebb
tulajdonság a komponsnekre vonatkozólag, hogy az SQLForms-nak létezik egy
fejlesztő és egy futtató változta. A futtató változat a kész alkalmazások
futtatására alkalmas, mely nem ad lehetőséget az alkalmazások módosítására.
Az elkészült alkalmazások tehát nem futtathatók önállóan, az elindításukhoz
szükséges az SQLForms egy futtató változata is. Az SQLForms az alábbi
komponseket tartalmazza:
- SQLForms Design: tervező program, az elkészített alkalmazás
leírását adatbázisban tárolja
- SQLForms Run: futtató változat
- SQLForms Generate: az adatbázisan tárolt leírásból futtaható leírás
állományt hoz létre
- SQLForms Convert: az alkalmazás különböző leírási formátumai
közötti átalakítást végzi, s alkalmazható az
SQLForms verziók közötti konverzióra is
Az Oracle rendszer az elkészített Forms leírásokat több különböző formában is
tárolhatja. mindegyik tárolási formalizmus különböző igényeket és célt szolgál.
Az elkészített Forms definíció elsődlegesen az adatbázisban tárolódik. Az
SQLForms-ban mentés (Save funkció) esetén az adatbázisba töltődik be a
leírás. Az Open parancsnál is az adatbázisból olvassa ki az SQLForms a
definíciót. Az adatbázis mint egy központi repository-ként szolgál, aminek az
az előnye, hogy bármely csomópont előtt ülve elérhetők az alkalmazások. Az
elkészített Forms-ok futtatásához előbb egy kódállományt kell generálni. E
bineáris kódállomány az FRM kiterjesztést kapja meg, erre lehet kiadni a
futtatás (Execute) utasítást. A bineáris kódállomány mellett a generálás során
képződik egy szöveges, formátumozott állomány is, mely a Forms
definíciójának ASCII leírását tartalmazza. Ezen állomány kiterjesztése INP. A
szöveges leíró állomány jelentősége, hogy ez környezetfüggetlen, s átvihető a
különböző plattformok között, mivel az SQLForms az INP állományból elő
tudja állítani az űrlap adatbázisbeli objektumát, s ezen keresztül az FRM
formátumot is. A Form különböző tárolási formátumait, s a közöttük fenálló
kapcsolatatot szemléltei a következő ábra.
Az SQL Forms alkalmazás, a Form, melyet magyarul űrlapnak fogunk nevezni,
több különböző tipusú objektumból épül fel. Ilyen objektumnak tekinthetők
például az adatbeviteli vagy adatkijelzésre szolgáló mezők, vagy a képernyő
grafikus elemei is. Minden létrehozott objektum a kapcsolódó adatbázisban fog
letárolódni. Az SQLForms csak létező és futó Oracle RDBMS mellett
használható, s az SQLForms-ot is csak az használhatja, akinek megvan a
megfelelő Oracle adatbázis jogosultsága. A jogosultságot a rendszer az
SQLForms elindításakor ellenőrzi, ekkor meg kell adni az Oracle adatbázishoz
kapcsolódó felhasználói nevet és jelszót. A SQLPlus elindításakor is ezen
adatokkal azonosíthattuk magunkat, hogy megkapjuk az adatbázishoz való
hozzáférés jogát. A létrehozott objektumok tehát a kapcsolódó Oracle
adatbázisban fognak letárolásra kerülni. Ezen központi letárolás előnyei közé
tartozik, hogy bárhonnan elérhetők a definiciók, s emellett lehetőséget ad arra
is, hogy az egyszer létrehozott objektumokat később más alkalmazásokba is
beépíthessük.
Az SQLForms objektumtipusok hierarchiáját a következő ábra szemlélteti.
A hierarchia tetején a Form, vagy űrlap áll. Ez jelenti magát az elkészült
alkalmazást. Az alkalmazásnak, mint adatbázis objektumnak van azonosító
neve, van tulajdonosa és védelmi rendszere. Az alkalmazás legfontosabb
komponensei a következő tipusok:
Pages: Lapok, melyek az alkalmazáshoz tartozó képernyő formátumokat
jelenti. A képernyő magába foglalja megjelenítési elemeket, mint
a feliratokat, keretvonalakat illetve a megjelenítési mezőhelyeket.
Maguk a mezők, az adatok már nem részei a képernyőknek. Egy
alkalmazáshoz több lap is tartozhat, egy képernyő egyszerre több
lapot is megjeleníthet. A lap és képernyő függetlenségét az is
jelzi, hogy a lap nagyobb területű is lehet, mint egy képernyő,
azaz a képernyőn ekkor a lapnak csak egy szeletét látjuk.
Blocks: Blokkok. Egy blokk egy logikailag összetartozó adathalmazt
jelent. Egy blokk rendszerint egy táblához vagy egy view-hoz
kapcsolódik, de megoldható az is, ha egy blokkba több különböző
helyről kívánunk adatokat integrálni. Az adatok nemcsak
adattáblákhoz lehetnek hzzákötve, hanem lehet belső
memóriaváltozókat is definiálni. A blokkhoz tartozó adatokon
különböző adatkezelési és adatlekérdezési műveletek végezhetők.
Az egyes blokkok között adatkapcsolatok definiálhatók, így
például megadható egy master-detail kapcsolat, amely egy egy-
több kapcsolatnak felel meg. Ebben az esetben a szülő (master)
blokk miden egyes rekordjához a gyermek (detail) blokk több
rekordja is kapcsolódik.
Fields: Adatmezők. Adatok tárolási helye. Az adatok származhatnak
adatbázis táblákból és memóriaváltozókból. A mezők értékeit
közvetlenül a felhasználó módosíthatja, de a kódblokkok,
triggerek is hozzáférhetnek a mezők értékeit, módosíthatják a
mezők értékeit. A mező paraméterin keresztül szabályozhatjuk a
mezőben tárol értékek körét, a mezőben tárolt értékek
megjelenítési formátumát és a mező közvetlen viselkedését is.
Triggers: Triggerek. A triggerek az űrlap egyedi aktív elemeinek, az űrlap
viselkedésének a leírására szolgálnak. A trigger egy kiváltó
eseményből és egy választevékenységből áll. Az SQLForms
számtalan, százas nagyságrendű figyelendő eseménytipust
tartalmaz. Az eseménytipusok alapvetően kétféle jelenségre
vonatkozhatnak: billentyűzet eseményre és belső
állapotváltozásra. A választevékenységek az Oracle rendszerhez
tartozó PL/SQL nyelv blokkjaival adhatók meg. A triggerek az
űrlap különböző objektumaihoz köthetők, lehetnek teljes űrlapra,
lehetnek blokkra és lehetnek például mezőkre kötött triggerek is.
A mezők és blokkok esetén minden külön mező, illetve blokk
saját egyedi triggerekkel rendelkezhet. A választevékenységek
funkcionalitásának fokozására a rendszer tartalmaz, úgynevezett
rendszer eljárásokat is, melyek a PL/SQL blokkba beépíthetők, s
amelyek az adatfeldolgozáshoz kapcsolódó tevékenységek
elvégézésére szolgálnak.
Procedures: Eljárások. Az triggerekben megadott tevékenységek
hatékonyabb megadására a felhasználó készíthet saját, az
űrlaphoz kapcsolódó PL/SQL blokkot tartalmazó eljárásokat,
amelyeket az űrlap több különböző triggerében is meghívhat,
illetve más űrlap tervezésénél is felhasználhat.
Az űrlap futtatása során a felhasználó a billentyűzet segítségével felkeresi az
űrlap különböző objektumait, adat lekérdezés vagy adat felvitel céljából. Mivel
a mozgás az egyes objektumok között csak a billentyűzet révén lehetséges,
ezért az objektumok közötti vándorlás, a navigáció, itt egy sokkal kötöttebb
formában zajlik le. A rendszer mindíg számon tartja, hoy mely objektumnál,
milyen objektumtipus szinten járunk. Az éppen érintett objektumot nevezik
navigációs unitnak. A navigáció során nem lehet tetszőleges ugrásokat tenni két
objektum között. Létezik egy navigációs hierarchia, melyen haladva
mozoghatunk csak az objektum váltásnál. A navigációs hierarchia az alábbi
szintekből áll:
outside the Form : űrlapon kívül helyezkedünk el
Form szint : űrlap szint
Block szint : blokk szint
Record szint : rekord szint
Field szint : mező szint
Ez a hierarchia megfelel az űrlap strukturáltságának, kibővítve a rekord szinttel.
A hierarchia alapján, ha az AUTO adattábla rekordjait kilistázó programban a
felhasználó megnyomja a következő rekordra ugrást kiváltó billentyűt,
miközben a kurzor éppen a TIPUS mezőn áll, akkor a vezérlés nem közvetnül
kerül át a követekező rekord TIPUS mezőjére, hanem előbb bejárja a
navigációs hierarchia megfelelő útvonalát. Így az alábbi szinteket fogja érinteni
a navigációs útvonal: Mezőszintről fel a rekordszintre (Aktuális mező
elhagyása). A rekordszintről fel a blokk szintre (aktuális rekord elhagyása),
majd a blokk szintről le a rekordszintre (A következő rekordra ugrás), s a
rekordszintről le a mezőszintre (mező kiválasztás). A következő ábra
szemlélteti a hierarchiát, és a navigációs útvonalat.
A navigációs útvonal ismeretének jelentősége abban áll, hogy tudjuk milyen
események következnek be az egyes mozgásoknál. E események magukba
foglalják a triggereket illetve az egyes szintek átlépésekekor fellépő ellenőrzési
tevékenységeket.
Az értékellenőrzés (validation) az a folyamat, mely során a rendszer eldönti,
hogy az obejktumokban tárolt adatértékek megfelelnek-e a megadott integritási
szabályoknak vagy sem. Az integritási szabályok most az SQLFormsban
megadott integritási szabályokat jelentik. Az ellenőrzés különböző
objektumszinteken is előfordulhat. Így például a blokk szintű ellenőrzésnél a
blokkhoz tartozó összes adatmezőre megtörténik a mező szintű ellenőrzés.
Az adatmezők az értékellenőrzés szempontjából egészen másként kezelendők,
ha éppen most módosítottunk benne, vagy ha most olvastunk bele értéket az
adatbázissból. Az előző esetben nem lehetünk biztosak benne, hogy
elfogadható érték került a mezőbe, míg a másik esetben, biztosak lehetünk,
hogy megfelelő az érték, hiszen ekkor az adatbázisból olvastunk be korábban
már ellenőrzött értéket. Ha feljegyezzük, hogy mely mezőket tekinthetjük
elfogadottnak, akkor jelentős munkát takaríthatunk meg az ellenőrzéskor,
hiszen csak a még nem ellenőrzőtteket kell átvizsgálni, másrészt ezzel a
mechanizmussal tarthatjuk nyilván az ellenőrzés teljesítettségének fokát is.
Az SQLForms a mezők, illetve a rekordok, ellenőrzöttségi fokának
megadásánál három különböző értéket használ. A mező lehetséges
ellenőrzttségi szintjei:
New a mező most jött létre (új rekord létrehozása), s az üres
érték vagy az alapértelmezési érték került bele
Changed a mező értékét a felhasználó megváltoztatta. Egy újonnan
felvitt rekord bármely mezőjének megváltoztatásakor a
rekord összes mezője felveszi ezt a státuszt.
Valid a mező sikeresen átjutott az értékellenőrzésen, vagy ha
most került be adat a mezőbe az adatbázisból.
Az adatbázis kezelésekor az ellenőrzések nemcsak az SQLForms szintjén
hajtódnak végre, maga az adatbáziskezelő is végez integritásellenőrzést. Így az
SQLForms használatával sem kerülhetők meg az RDBMS-ben tárolt integritási
szabályok. Mint ismert, az adatok kezelése az RDBMS rendszerekben
tranzakciókba szervezetten hajtódik végre. Az RDBMS tranzakció koncepciója
az SQLForms-ban is megjelenik az adatok lementésére vonatkozó
műveleteknél. Az SQLForms ugyanis élesen megkülönbözteti egymástól az
adatok kiírásának (POST utasítás) és a műveletek véglegesítésének (COMMIT
utasítás) lépéseit.
A generált űrlap program a karakteres termináltipus megkötöttségei miatt
sokkal kevesebb kontroll elemmel rendelkezik, mint egy abakos technikát
alkalmazó program. Mivel a tervező rendszer is ugyanolyan környeztben fut és
ugyanolyan felülettel rendelkezik, mint a generált alkalmazás, ezért a fejlesztés
során is szűkösebb a rendelkezésre álló adatbeviteli eszközkészlet. A
SQLForms az alábbi, karakteres terminálhoz igazított interface elemekkel
rendelkezik:
Alert Figyelmeztető, tájékoztató ablak. Az ablak egy cimkét, egy
üzenetet és egy nyomógombot tartalmaz. A cimke utal az
üzenet jellegére, míg a nyoógombbal jelölhetjük ki az
üzenetre adott választ.
Button : Nyomógomb, zárólejben megadott feliratt, melynek
kivalasztasa nyomogombot szimulal. A nyomógomb olyan
adatmezőként valósítható meg, melyhez az ENTER
billentyűt figyelő trigger definiálunk, s e triggerhez kötött
tevékenység hajtódik végre a nyomógomb aktivizálásakor.
Check box : Kapcsoló. Logikai érték kijelzésére szolgál, szimbóluma a
kapcsos zárójelpár, melyben egy X jelzi, ha a möfötte álló
adatelem igaz értékű.
Dialog box : Dialógus ablak. Ez egy olyan ablak, amely a képernyőn
megjelenve adatok bevitelére szolgál. Rendserint csak pár
mezőt tartalmaz.
Field : adatbeviteli vagy adatkiirási mező. A mező mögött
adatbázis emző vagy memóriaváltozó állhat. A mező elemi
értékek bevitelére szolgál.
List of values: Lista, érték kiválasztására szolgál, ahol a lehetséges
értékek egy kinyíló listában foglalnak helyet. A lista
ablaka a fejrészében egy kereső mezőt is tartalmaz,
melynek segítségével gyorsan ráállhatunk a megadott
karakterekkel induló értékekre a listában.
Scroll region : Szerkesztő ablak. A szerkesztő ablak többsoros szövegek
kezelésére, szerkesztésére készült. Az ablakban a teljes
szöveg egy részlete látható, s a megfelelő kurzorvezérlő
nyilak segítségével lehet mozzogni a szerkesztő területen
belül.
Spread table: Táblázat az adatok megjelenítsére. A táblázat egy browse
jellegű lekérdezést valósít meg, azaz egyidejűleg több sor
és több oszlop tartalma is látható a képernyőn.
A vezérlési elemeket a felhasználó a billentyűzet segítségével aktivizálhatja. E
rendszer jellegzetessége, hogy viszonylag kevés vezérlési elemet tartalmaz, s
ezzel szemben igen sok különböző billentyűkombinációt figyel az egyes
alkalmazás funkciók aktivizálásra. A SQLForms programok velejárója, hogy a
felhasználónak egy sor, számunkra ma már idegennek tűnő billentyűzet
kombinációt kell megtanulnia, ha nem kíván minden funkcióhívás előtt a
segítséget kérni a HELP rendszerből az aktuális billentyűzet és funkció
összerendelésről. Ugyanez érvényes a fejlesztő programozóra is, hiszen az
SQLForms Design változatában is több tucat rejtélyes billentyűpárt kellene
megismernie a gördülékeny fejlesztéshez.
Az billenyűzetek alkalmazásával jelentekező másik nehézség abban áll, hogy a
különböző hardver rendszerek billentyűzetei jelentősen eltérhetnek egymástól.
Biztosan mi is találkoztunk már olyan billentyűzet tipusjelölésekkel, mint
vt100, vt200, vt320, ansi, iris-ansi, .... . Ezek a billentyűzetek egymástól eltérő
billentyűfunkciókkal rendelkeznek, s egymástól eltérő billenytűkódokat
generálnak. Emiatt az alkalmazás is más és más kódot fog kapni a különböző
hardver rendszerekben még egyazon feliratú billenytűk lenyomása esetén,
feltéve hogy megvan mindkét rendszerben ugyanaz a feliratú nyomógomb.
A billentyűzet tipusok sokféleségét az SQLForms úgy hidalja át, hogy betesz
egy konvertert a billentyűzet és az alkalmazás közé, s az alkalmazásokba nem
közvetlenül az egyes billentyűkódok figyelésére építi be. Ehhez a megoldához
elősször is úgynevezett logikai billentyűket definiálnak. A logikai billentyűk
nem a felirathoz kapcsolódnak, hanem az egyes funkciókhoz. Így például
létezik [Down] logikai billentyű, melynek funkciója a navigáció az előző
objektumra. A rendszer mintegy ötven logikai billentyűt tartalmaz.
AzSQLForms alkalmázoskat úgy kell megírni, hogy azok nem a fizikai, hanem
a logikai billentyűkre hivatkoznak. Így például a billentyűzet figyelő triggerek
is mind a logikai billentyűkhöz kapcsolódnak.
A következő ábra a fizikai és logikai billentyűk konverzióját mutatja be.
A konverter feladata az egyes logikai billentyűk és a fizikai billentyűk
összerendelése. Az összerendelési (map) állomány már hardver rendszer függő.
Az alkalmazások futtatásakor az SQLForms kiválasztja a megfelelő
összerendelési állományt a fizikai billentyűkhöz kapcsolódó funkciók
meghatározására. Így egy alkalmazás esetén is ugyanazt a funkciót, például a
rekord kitörlését, más-más billentyűkombinációval lehet kiváltani az aktuális
környezeti változóktól függően. Már itt érdemes megjegyezni egy fontos
billenyűzet kombinációt, mellyel minden rendszerben lekérdezhetjük az éppen
élő hozzárendelési táblázatot. Ez a billentyűkombináció a CTRL-K. Az alábbi
lista az irisansu termináltipushoz tartozó hozzáendelési táblázatot mutatja be.
Accept F5 Next Field ^X F
^X A Next Record F2
Beginning of Line ^A ^X R
Bookmark Esc F1 Paste Esc P
^Z ^X H ^Z P
Change Display Type Esc T Previous Field ShiftTab
^Z T Esc Tab
Clear Field Esc Esc Tab ^Z Tab
^Z ^Z Tab Previous Record Esc F2
Copy Object Esc O ^Z ^X R
^Z O Print Esc Esc P
Delete Backwards BackSpace ^Z ^Z P
Delete Character ^D Refresh ^R
Delete Line ^L ^D Return Return
Delete Record Esc D Right Right
^Z D ^F
Down Down Screen Painter F12
^N ^X 4
End of Line ^E Scroll Left ^U ^B
Exit F3 Scroll Right ^U ^F
^X E Select F7
Help F1 ^X S
^X H Esc @
Insert Record Esc I ^Z @
^Z I Show Keys ^K
Insert/Replace Esc / Esc K
^Z / ^Z K
Left Left Up Up
^B ^P
Menu F8 Zoom In Esc Z
^X M ^Z Z
Navigate Esc N Zoom Out Esc Esc Z
^Z N ^Z ^Z Z
Next Field Tab
Azt, hogy melyik leképzési táblát kell haználni, az SQLForms alapesetben a
környezeti változó (pl. TERM) aktuális értéke alapján határozza meg. A
felhasználó azonban ettől eltérő, például saját táblát is rákényszeríthet az
SQLForms-ra. Ehhez az SQLForms indításakor paraméterként explicite ki kell
jelölni a kívánt leképzési táblázatot. Ennek formátuma:
sqlforms30 -c file:device
ahol file a táblázatot tartalmzzó állomány, míg a device a billentyűzet tipusát
jelöli ki. Erre azért van szükség, mivel egy leképzési állomány több különböző
esközre vonatkozó táblát is tartalmazhat. Az alábbi példában az iris-ansi
terminálhoz kapcsolódó leképzési tábla behívását mutatjuk be:
sqlforms30 -c irisansu:utd
Az állományok alapesetben az ORAKITPATH változóban megadott
katalógusban helyezkednek el. Az egyes leképzési táblákat maga a felhasználó
is átszerkesztheti, illetve új táblákat is hozhat létre. A leképzési táblák
szerkesztése az
oraterm
segédprogrammal lehetséges. Ebben az eszköz és az alkalmazás kiválasztása
után mint a funkció és fizikai billenytűk összerendelését, mind az alapvető
terminál vezérlő kódok megadását is elvégezhetjük.
SQLForms űrlaptervező használata
Egy alkalmazás tervezésének első lépése egy induló, alapértelmezési blokk
létrehozatala. Ezután a kapott blokk paramétereit módosítjuk a speciális
igényeknek megfeleően. Ezután megtervezzük a program képernyőjét, majd
megadjuk a programhoz kapcsolódó triggereket, eljárásokat is. Eztkövetően, a
definició lementése után generáltatjuk a futtatható kódot, melyet azSQLForms
Run üzemmódjában lehet kipróbálni.
A következő ábra az SQLForms főablakát, menürendszerét ábrázolja, melyben
az Action menüpontot kinyitva láthatjuk.
Action foRm Block Field Trigger Procedure Image Help Options
| New |
| Open |
| Copy |
| Rename |
| Delete |
| Load |
| Print doc |
| Generate |
| Execute |
| Save |
| F. security |
| Quit |
+--------------+
Egy új alapértelmezési blokk létrehozása a Block főmenüpont Deafult
menüpontját kell aktivizálni. A következő ábrában az alapértelemzési blokk
paraméterezési ablakát láthatjuk.
---------------------------- Default Block -----------------------
Block Name: b1
Base Table: autok
---------------------------------------------------------------------------
Sequence Number: 1 ( Select Columns ) [ ] Use Constraints
Records Displayed: 1 Page Number: 1 Base Line: 1
--------------------------------------------------------------------------
Master Block: [ ] Delete Details
----------------------------- Join Condition -------------------------
A paraméterablakban az egyes paraméterek jelentése a következő:
Block [Name]: a blokk neve
[Base] Table: az Oracle bázistáblázat neve (az SQLForms-ban
minden blokk alapesetben egyetlen egy táblázathoz,
view-hoz kötődik; emellett azonban más
forrásokból származó mezőket is tartalmazhat)
Sequence Number: a blokk relativ sorsz'ma a végrehajtás során
(hanyadik lesz a végrehajtási listában)
Records Displayed: mennyi rekord jelenjen meg egyidejűleg a blokkhoz
tartozó lapon
Records Buffered: mennyi rekordot tároljon egyidejűleg blokkhoz
tartozó bufferben
Records Lines per: mennyi sor foglalódjon le a képernyőn egy
rekordnak
Array size: maximum rekord darabszám, melyet a blokk
egyidejűleg fogadni tud a FETCH utasításokban
Default Where/Order by: szűrőfeltétel és rendezési elv megadása a
blokkban megjelenitendő rekordokra. A
kifejezésben az SQL SELECT WHERE és ORDER
BY opcióinál használatos formalizmus
alkalmazható. A kifejezésekben globális
memóriaváltozókra nem lehet hivatkozni.
Page Number: mely lapon jelenjen meg blokk
Base Line: a lap mely sora legyen az első blokkhoz tartozó sor
Master Block: mely blokk a blokk szülő blokkja (ha nincs szülő
blokk a paraméter üresen marad)
Delete Details: ha igaz és van szülőblokkja, akkor a szülőrekord
törlese esetén a gyerek rekordok is törlődnek
Join Condition: a blokk és a szülőblokk közötti kapcsolódási
feltétel, melyben a kapcsolódás feltételében
szereplő mezőkre a
blokknév.mezőnév
formalizmussal leht hivatkozni. Ha például a b1
blokk tulajmezőjének meg kell egyezni a
kapcsolódó blokkokban a b2 blokk nev mezőjével,
akkor feltétel alakja: b1.tulaj = b2.nev
Az űrlapok közvetkező építőköve a mező. A mezők defináláshoz a FIELD
menüpont MODIFY alpontját kell aktivizálni. A megjelenő listában minden, az
aktuális blokkhoz tartozó mező kijelzésre kerül az összes paramétereivel együtt.
Új mező hozzádáshoz az [Insert Record] funkciót kell meghívni. Mivel új mező
felvitelénél sokkal jobb, ha az összes paraméter egy képernyőn látjuk, célszerű
meghívni a [Change Display Type] funkciót. Ekkor csak egy mező paramétereit
fogjuk csak látni. A funkció újbóli meghívásakor visszatérünk a táblázatos
formátumra. A [Change Display Type] funkció más objektum tipusoknál is
alklmazható a táblás és egyedi objektum kijelzési módok közötti átváltásra. A
következő ábrában a mezők paraméterezési ablaka szerepel.
---------------------------- Field Definition --------------------------
| Field Name: RSZ
| Sequence Number: 1 Data Type: CHAR ( Select Attributes)
| Field Length: 6 Query Length: 6 Display Length: 6
| Screen Position: X: 14 Y: 9 Page: 1 ( Editor Attributes )
| Format Mask:
| Default Value:
| Hint: Enter value for : RSZ
| Valid Range: Low: High:
| Enforce Key:
| List of Values: Title: Pos: X: Y:
| ------------------------ List of Values SQL Text -----------------------
Az egyes paraméterek jelentése a következő:
Field name: a mező azonosító neve
Sequence number: a mező sorszáma a végrehajtás során (hanyadik lesz
a mező felkersési sorrendben)
Data type: a mező adattipusa
Select attributes: a mező viselkedési parametérei, melyből néhány
fontosabb jelentését alább láthatjuk:
Base table: a mező az alaptáblázat egy mezője-e
vagy sem
Displayed: ki szabad-e jelezni a mező értékét a
képernyőn vagy sem
Echo Input: visszairható-e a képernyőre a beirt
adat vagy sem
Input Allowed: bevihető-e új adat a mezőbe, vagy
sem
Primary key: kulcsmező szerepet játszik-e a mező
Query allowed: lehet-e hivatkozni erre a mezőre a
QBE lekérdezéseknél
Required: kotelező-e értéket adni ennek a
mezőnek
Update allowed: módositható-e a mező, vagy sem
Uppercase: nagybetűre konvertálja-e a bevitt
adatokat vagy sem
Field length: a mező hossza
Query length: a lekérdezési maszk hossza
Display length: megjelenités hossza
Screen Position: a megjelenites kepernyő pozicioja, ahol X a sor, Y
az oszlop koordinátát jelöli.
Page: melyik lapon jelenitődik meg a mező
Format Mask: az érték megjelenítési formátuma
Default value: alapértelmezési értéke (konstans, rendszer változo,
más mezo, sequence) a mezőnek
Hint: tájékoztató szöveg
Valid range: megengedett értéktartomány,ahol Low jelöli az
also, míg High a felső korlátot.
Enforce key from: a mezo egy kapcsolómező, amely egy másik blokk
valamely mezőjének az értékét tartalmazza. A
mezőnél az Input Allowed kapcsolót a hamis
értékre kell állitani, mivel a mező nem
tetszőlegesen bevitt értéket tartalmaz.
List of Values: lista definiálása a mezőhöz az adatbevitel
megkönnyítésére. A [List] funkció meghívásakor
kinyílik egylista a megadott képernyő pozición,
melyből kiválasztható a megfelelő beviteli értékek.
Title: a kinyíló lista neve
Pos: a kinyíló lista képernyő poziciója
List of Values SQL text: azon SQL SELECT utasasitás szövege,
amely megadja a listában megjelenítendő adatokat.
A listában a lekérdezés eredményei fognak
megjelenni. A SELECT utasításban az INTO
opcióval jelöljük ki, hogy a listából történo
választás esetén mely érték hová, mely változóba
kerüljön (pl. ha a mező neve MEZ, akkor a
SELECT ID, NEV INTO :MEZ FROM
EMBER WHERE ...
utasitás hatására a lista ID és NEV adtokat fog
tartalmazni, melyből a kiválasztás uttán a megfefelő
ID elem fog letárolódni a MEZ mezőbe, míg a
NEV érték nem kerul rögzitésre)
Az alkalmazások műveleti részének meghatározásánál nagy szerepe van a
triggereknek. A triggerek segítségével lehet a speciáis, egyedi tevékenységeket,
definiálni. Minden trigger egy eseményhez kapcsolódik, s tartalmaz egy
választevékenység blokkot is. A blokkok PL/SQL formátumban adhatók meg.
A triggrek különböző szinteken definiálhatók. Az alábbi érvényességi körök
különböztethetők meg:
- FORM
- BLOCK
- FIELD
Az űrlap hatáskörű triggerek alapesetben mindenhol érvényesülnek, míg a
blokkra kötött triggerek csak a blokk objektumainál vannak hatással. A mező
szintű triggerek pedig csak a mező viselkedését határozzák meg. Ha egy
objektumnálugyanazon eseményre több, különböző szinten definált trigger is
létezik, akkor mindíg a legalacsonyabb szinten definiált triggernek lesz a
legnagyobb prioritása.
A triggereket több különböző menüponton kerestül is elérhetjük. A BLOCK,
illetve FIELD menüpontokon keresztül a blokkokra, illetve mezőkre vonatkozó
triggerek kezelhetők, míg a TRIGGER főmenüpont minden, bármilyen
szinthez, objektumhoz tartozó triggert elérhetővé tesz. A triggerek leírásánál is
lehet a megadott módon táblázatszerű és egyedi objektum megjelenítési
üzemmódok között váltogatni. A trigger definíciós paraméterezési ablakát
szemlélteti az alábbi ábra.
--------------------- Trigger Definition ---------------------------------
| Trigger: KEY-STARTUP | - For Key Triggers Only -- |
| Block: b1 | [ X ] Show Keys |
| Field: | Descrip: |
| Trigger Style: V3 | |
| ------------------------------- Trigger Text ----------------------------- |
| execute_query; |
| |
| |
Az egyes paraméterek jelentése a következő:
Trigger a trigger azonosító neve, a trigger tipusa, amely
megegyezik a triggert kiváltó esemény leírásával,
azonosítójával
Block mely blokkhoz kapcsolódik
Field mely mezőhöz kapcsódik (ha mezőszintű)
Trigger text: a triggerhez kapcsolódó PL/SQL választevékenység
blokk leírása
A triggerek két nagy csoportja a kiváltó esemény alapján határozódik meg. Az
első csoportba tartoznak a billentyűzet triggerek, melyeket valamely funkció
billenytű megnyomása aktivizál. Az SQLForms az alábbi billentyűzet triggerek
tartalmazza (ezen trigger azonosító neveket kell megadni trigger tipusként a
trigger definálása során). Az egyes triggerek definálásakor a létrehozott
triggerek helyettesítik az alapértelmezési, gyári eseménykezelő rutinokat, ezért
nagyobb körültekintéssel kell őket alkalmazni.
Key-CLRBLK: Blokk törlése funkció. A blokkhoz tartozó mezők
tartalmának kitörlése, a kitörlés előtt a rendszer
megpróbálja a módosított adatokat lementeni az
adatbázisba.
Key-CLRFRM: Űrlap törlése funkció. Az űrlaphoz tartozó mezők
tartalmának kitörlése, a kitörlés előtt a rendszer
megpróbálja a módosított adatokat lementeni az
adatbázisba.
Key-COMMIT: Commit funkció. Az űrlaphoz tartozó
adatmezőkben elvégzett módosítások átvitele az
adatbázisba, a módosítősok véglegesítésével együtt.
A COMMIT utasítás egyben feloldja a korábban
elvégzett lezárásokat is.
Key-CREREC: Új rekord létrehozás funkció. Új, üres rekord
behozatala a blokkba.
Key-DELREC: Rekord törlése funkció. A blokkban kijelzett rekord
megszüntetésére szolgál.
Key-DOWN: Lefele nyíl kurzormozgató funkció, jelentése:
mozgás az előző rekordra, a blokkban az előző
rekord tartalma fog megjelenni.
Key-EDIT: Szerkesztési funkció. Hosszabb szövegű mezők
esetén egy külön szerkesztő ablak behívása a
mezőtartalom kényelmesebb kezelésére.
Key-ENTER: Enter billentyű. Rendszerint az adott mezőben
végzett adatbevitel lezárását eredményezi, az
adatmezőről történő továbblépést szolgálja.
Key-ENTQRY: Lekérdezési üzemmódba való áttérés funkciója.
Hatására az űrlapon a mezők törlődnek, s minden
mezőbe beírható egy szelekciós feltétel. A később
elindítandó lekérdzés azon rekordokat fogja csak
visszaadni,melyek eleget tesznek a megadott
feltételeknek. A lekérdezés QBE elven működik.
Ha minden mező üresen marad, az összes rekord
kiválasztásra kerül.
Key-EXEQRY: Lekérdezés elindítása funkció. A előzőleg
összeállított szelekciós ablak alapján kiválogatott
rekordok megjelenítése. A kijelzés formátumától
függően vagy egy vagy több rekord látható
egyidejűleg a blokkban. A rekordok közötti
mozgása azonban csak az eredményrekordok
halmazában lehetséges.
Key-EXIT: Exit funkció, a blokk vagy űrlap elhagyására
szolgál.
Key-LSTVAL: Listázási funkció. Kinyitja a mezőhöz definiált
értéklistát
Key-MENU: Menü funkció. A kurzor felkerül a menübe, s
lehetőség van a menüpontok közötti mozgásra, a
menüpontok aktivizálására.
Key-NXTBLK: Következő blokk funkció. A kurzor átugrik a
soronkövetkező blokkra, behozva az új blokk
képernyő megjelenítési lapját is. Csak olyan
blokkra lehet ugrani, amely tartalmaz olyan mezőt,
ahol a kurzor megállhat adatbevitel céljából.
Key-NXTFLD: Következő mező funkció. A kurzor átugrik a
soronkövetező mezőre
Key-NXTREC: Következő rekord funkció. A kurzor átugrik a
soronkövetező rekordra. A következő rekord
mezőértékei fognka kijelzésre kerülni a blokkban.
Key-PRVBLK: Előző blokk funkció. A kurzor átugrik az előző
blokkra, behozva az új blokk képernyő
megjelenítési lapját is. Csak olyan blokkra lehet
ugrani, amely tartalmaz olyan m,ezőt, ahol a kurzor
megállhat adatbevitel céljából.
Key-PRVFLD: Előző mező funkció. A kurzor átugrik a blokk előző
mezőjére.
Key-PRBREC: Előző rekord funkció. A kurzor átugrik az
előző rekordra. Az előző rekord mezőértékei fognak
kijelzésre kerülni a blokkban.
Key-UP: Felfelé nyil. Rendszerint az előző rekordra való
mozgást eredményezi.
Key-OTHERS: Egyéb billentyű funkcióknak megfelelő trigger.
Minden olyan billentyűt összefogl, melyekhez nem
definiáltunk explicite triggert. Az itt megadott
tevékenység akkor hajtódik végre, ha olyan
esemény következik be, melyhez nem adtunk meg
külön kezelő triggert
Key-STARTUP: Virtuális indító billentyű, mely akkor hajtódik
végre, amikor a program elindul. Az funkcióhoz
tartozó esemény nem pobtosan a első program
utasításnál következik be, hanem akkor amikor már
megjelent minden mező a képernyőn
A triggerek másik csoportját azon triggerek alkotják, melyek a billentyűzet
helyett más kiváltó okokhoz kapcsolódnak. Ezen okok lehetnek adatkezelési
lépések, navigációs tevékenységek. A következő listában megtaláljuk az egyéb
trigger tipusok felsorolásását.
On-Delete: Oracle rekord kitörlése, a Post és a Commit alatt
hajtódik végre. A kitörlődő rekordok feldolgozására
szolgál.
On-Error: Hibaüzenet kiirásakor hívódik meg, a hibaüzenet
kiírását helyettesíti. Saját hibakezelő rutinok vagy
saját hibaüzenetek definálására szolgál.
On-Insert: Oracle rekord beszúrásához kapcsolódik, s a Post és
Commit alatt hajtódik végre. A beszúrandó rekodok
feldolgozására alkalmas.
On-Lock: Oracle rekord zárolása, akkor hívódik meg, ha
az SQLForms megpróbál egy adatbázis rekordot
zárolni. Az alapértelmezési zárolási mechanizmus
helyettesíthető vele.
On-Mesage: Normal üzenet kiirásakor, az üzenet helyett
meghívódó trigger. Saját eseménykezelő, üzenet
kííró rutin definálható vele.
On-New-Field-Instance:
Akkor hívódik meg ez a triggertipus, amikor egy új
mezőre lép a kurzor és a rendszer készen áll az
adatok bevitelére. A mezőbe történő belépéskor
végrehajtandó feladatok meghívására alkalmas.
Ezen keresztül lehet például a mezőhöz tartozó
értéklistát automatikusan kinyitni.
On-New-Record: Új rekord létrehozásakor meghívandó trigger.
Segítségével lehet például dinamikus kezdőértékkel
feltölteni a mezőket.
On-Remove-Record: A rekord törlésekor (CLEAR vagy DELETE)
meghívódó trigger, a kitörlendő értékek
feldolgozására alkalmas.
On-Update: Oracle rekord módosítása, a Post es Commit alatt
hajtódik végre. Az alapértelmezési módosított
rekord feldolgozási eljárás helyettesíthető vele.
On-Validate-Field: Mezőbe bevitt érték helyességének ellenőrzésekor
meghívódó trigger. Segítségével egyedi
értékellenőrzés végezhető, s felhasználható a
vizsgált mező értékének megváltoztatására is.
On-Validate-Record: A rekordba bevitt érték helyességének
ellenőrzésekor meghívódó trigger.Segítségével
egyedi értékellenőrzések végezhető a rekord
mezőire, s a trigger alkalmas a rekordbeli mezők
értékének a megváltoztatására is.
Post-Block: A blokkból való kilépéskor meghívódó trigger.
Segítségével egyedi értékellenőrzések végezhető a
blokk mezőire.
Post-Commit: Post és Commit végrehajtásához kapcsolódó
trigger, a COMMIT-hoz kötődő események
definálhatók.
Post-Field: Egy mezőből történő kilépéskor meghívódó trigger.
Alkalmas más mezők értékeinek meghatározására,
s számított kifejezések aktualizálására.
Post-Form: Az űrlapból történő kilépéskor aktiviálódik. Lezáró
események megadására szolgál.
Post-Record: Rekordból történő kilépéshez kapcsolódik.
Rekordra vonatkozó számított kifejezések
meghatározására szolgál.
Post-Query: Lekérdezés futtatásakor hívódik meg egy újabb
eredményrekord beolvasásánál. Felhaználható
számított mezők, kifejezések aktualizálására.
Pre-Block: A blokkba történő belépéshez kapcsolódik, s
jogosultságok, mezők induló értékének
meghatározásához, globál változók beállíítására
használható.
Pre-Field: A mezőbe való belépéskor hívódik meg, s
felhasználható pl. komplex alapértelmezési értékek
kiszámítására.
Pre-Form: Az űrlapba történő belépéskor aktivizálódik,
szerepe hasonlít a Key-Startup triggerhez. s
jogosultságok, mezők induló értékének
meghatározásához, globál változók beállíítására
használható.
Pre-Query: A lekérdezés elinditásakor meghívódó trigger.
Amikor elindul a QBE maszk már kitöltött, de a
lekérdezési SQL még került meghatározásra. E
trigger alkalmas például a QBE szelekciós feltétel
módisítására.
Pre-Record: A rekordba történő belépéskor indul el, s
felhasználható pl. komplex alapértelmezési értékek
kiszámítására.
A triggerhez kapcsolódó tevékenységek leírására PL/SQL blokkokat lehet
alkalmazni. A PL/SQL blokkban az SQL lehetőségei kiegészülnek sajátos
vezérlési elemekkel. A PL/SQL blokk azonban abban az értelemben általános
adatbázisekezelő eszköznek tekinthető, hogy mind az SQL mind a csatlakozó
vezérlési elemek témafüggetlen utasításokat foglal magába. Így például egy
PL/SQL blokk alapvetően több különböző környezetben is felhasználható, s az
SQLForms mellett a jelentés szerkesztőben, a triggerekben is alkalmazhatók
aPL/SQL blokkok. Ez egyuttal azt is jelenti, hogy a PL/SQL blokkokban a
PL/SQL alaputasításokra szorítkozva nem tudunk semmi olyan
környezetspecifikus utasítást megadni, amelyekkel a kapcsolódó rendszer
sajátos műveleteit elő tudnánk hívni. Az SQLForms esetén az eddig ismert
PL/SQLutasításokra támaszkodva a triggerekből nem tudunk tehát olyan
SQLForms specifikus utasításokat meghívni, mint pl. a rekordok, vagy mezők
közötti navigáció, vagy értékellenőrzés, mező attributumok beállítása.
Könnyen belátható, hogy ez a megkötés túlságosan beszorítaná a triggerek
alkalmazási körét is, s ez egyuttal az SQLForms funkcionális gyengüléséhez
vezetne. Emiatt az SQLFormshoz kapcsolódó triggerek PL/SQL blokkjaiban
lehetővé tették az alapvető SQLForms műveletek elérését is. Az SQLForms
műveletek meghívása beépített, tárolt eljárások meghívásával történik. Az
SQLForms rendszerhez tartozik egy tárolt eljárás készlet, amelyek az alapvető
SQLForms műveleteket végzik el. A PL/SQL blokkokban meghívhatók,
beépíthetők ezen eljárások, s ezáltal egy teljesebb funkcionalitású trigger
koncepciót kapunk.
Az SQLForms több tucat saját tárolt eljarással rendelkezik, melyek paraméter
átadás útján kapcsolódhatnak az űrlap különböző objektumaihoz. Bizonyos
esetekben az objektum értékére van szükség, ekkor a
:objektumnév
formát kell alkalmazni. Ha pédául a blokk1 blokban elhelyezkedő mező1 mező
tartalmát szeretnénk átadni, akkor a
:blokk1.mezo1
hivatkozást kell használni.
Ha az eljárásnak magát az objektumot kell megadni, akkor viszont az anozosító
nevet, mint szövegkonstamst kell átadni. Így például a fenti mezőt a
'blokk1.mező1'
formátumban adhatjuk át egy mező attributum módosító eljárásnak.
A következőkben megadjuk a legfontosabb tárolt eljárásokat, melyeket
felhasználhatunk a triggerek definiálásakor. Az első látásra is igen széles
területet lefedő eljárás gyüjtemény használatát azonban egy fontos szabály
szigorítja. Ehhez azt kell tudni, hogy az SQLForms különbséget tesz kétfajta
triggertipus és kétfajta elárástipus között. Durván megfogalmazva a különbség
a két csoport között abban áll, hogy az egyik tipusba a felhasználó által
közvetlenül kiváltott, a billentyűzethez kapcsolódó események, műveletek
tartoznak, míg a másik csoport az egyéb, adatkezelést, belső állapotváltozáshoz
kapcsolódó műveleteket tartalmazza.
A eljárások első csoportjába, vagyis a navigációs, a felhasználó tevékenységét
szimuláló eljárásokhoz tartozó tárolt eljárások csak a billentyűzethez
kapcsolódó triggertipusokban, illetve még az ON-NEW-FIELD-INSTANCE
triggerben is felhasználható, de a többi triggertipusban már nem szerepelhet. Az
eljárások ezen csoportját nevezik között felhasználású (restricted) eljárásoknak.
A tárolt eljárások másik csoportja (unrestricted) bármely triggertipusnál
felhasználható.
A következő lista előbb megadja a kötött felhasználású tárolt eljárásokat, tehát
azon eljárásokat, emleyek csak a KEY tipusú triggerekben, illetve az ON-
NEW-FIELD-INSTANCE triggernél alkalmazhatóak.
CLEAR_BLOCK (ASK_COMMIT | DO_COMMIT | NO_COMMIT |
NO_VALIDATE): Az aktuális blokk tartalmának kitörlése, a
blokk mezőinek kitisztítása. A megadott
paramétertől függően rákérdez, hogy a
korábbi mezőtartalmakat lementse-e az
adatbázisba (ASK_COMMIT), vagy minden
esetben lement (DO_COMMIT), nem menti
le a változtatásokat (NO_VALIDATE),
lementi a változásokat, de nem véglegesíti
azokat az adatbázisban (NO_COMMIT),
CLEAR_FIELD: Az aktuális mező tartalmának kitörlése
CLEAR_FORM (ASK_COMMIT | DO_COMMIT | NO_COMMIT |
NO_VALIDATE); Az űrlap tartalmának kitörlése. A megadott
paramétertől függően rákérdez, hogy a
korábbi mezőtartalmakat lementse-e az
adatbázisba (ASK_COMMIT), vagy minden
esetben lement (DO_COMMIT), nem menti
le a változtatásokat (NO_VALIDATE),
lementi a változásokat, de nem véglegesíti
azokat az adatbázisban (NO_COMMIT),
CLEAR_RECORD: Aktuális rekord tartalmának kitörlése
COMMIT_FORM: Blokk tartalmanak lementese az adatbazisba.
az aktuális adatotok, módosítások
végelegesítése az adatbázisban, mely
magába foglalja az értékellenőrzést, kiírást, a
zárolások feloldását is.
CREATE_RECORD: Új, üres mezőkkel rendellkező rekord
létrehozása az aktuális blokkban, majd az új
rekord kijelzése adatbevitel céljából.
DELETE_RECORD: Az aktuális rekord törlése a blokkból. Ha a
rekord adatbázishoz tartozik, akkor onnan is
törlődik.
DOWN: Ugrás a következő rekordra
EDIT_FIELD (x, y, w, h): Az aktualis mező tartalmának szerkesztésére
egy szerkesztő ablak megnyitása. Az x és y a
balfelső sarok képernyő koordinatái, w az
ablak szélessége, s h az ablak magassága.
ENTER: A bevitt értekek helyesség ellenőrzésének
elindítása.
ENTER_QUERY: Belépés a lekérdezés üzemmódba. A QBE
szelekciós ablak meghívása a szelekciós
feltételek beállítására.
EXECUTE_QUERY: A lekérdezes elinditása a kitöltött QBE
szelekciós ablak lapján.
EXECUTE_TRIGGER (trigger_nev):
A felhasznaló által megadott trigger
elinditása.
EXIT_FORM (ASK_COMMIT | DO_COMMIT | NO_COMMIT |
NO_VALIDATE);
Kilepes az űrlap programból. A megadott
paramétertől függően rákérdez, hogy a
korábbi mezőtartalmakat lementse-e az
adatbázisba (ASK_COMMIT), vagy minden
esetben lement (DO_COMMIT), nem menti
le a változtatásokat (NO_VALIDATE),
lementi a változásokat, de nem véglegesíti
azokat az adatbázisban (NO_COMMIT),
FIRST_RECORD: Ugrás a blokk első rekordjára
GO_BLOCK(blokkobjektum):
Ugrás a megadott blokkra.
GO_FIELD(mezoobjektum):
Ugrás a megadott mezőre.
GO_RECORD(sorszam): Ugrás a blokk megadott sorszámu
rekordjára.
LAST_RECORD: Ugrás a blokk utólsó rekordjára.
LIST_VALUES: Az aktuális mezőhöz tartozó értéklista
kinyitása
NEXT_BLOCK: Ugrás a következő blokkra.
NEXT_FIELD: Ugrás a következő mezőre.
NEXT_RECORD: Ugras a kővetkező rekordra
POST: Adatok kiirása a DB-be Commit nélkül
PREVIOUS_BLOCK: Ugrás az előző blokkra
PREVIOUS_FIELD: Ugrás az előző mezőre
PREVIOUS_RECORD: Ugrás az előző rekordra
UP: Ugrás az előző rekordra
A soronkövetkező lista a szabadon felhasználható tárolt eljárásokat mutatja be,
amelyek bármely triggertipusba beépíthetőek.
ABORT_QUERY: Az éppen futó lekérdezés lezárása,
visszatérés normál üzemmódba.
BELL: Csengetés a figyelemfelkeltéshez
CALL (form2) A megadott űrlap elindításba, melynél az
aktuális űrlap futásai ideiglenes
felfüggesztődik,amíg az indított űrlap le nem
fut.
CALL_QUERY (form2): A megadott űrlap elindításba, melynél az
aktuális űrlap futásai ideiglenes
felfüggesztődik,amíg az indított űrlap le nem
fut. Az elindított űrlap csak olvasásra ad
lehetőséget,módosításra már nem.
COPY (ertek, mezoobjektum):
A megadott értek felvitele a megadott
mezobe (Ehelyett legtőbbszőr
kőzvetlenül adunk értéket)
HIDE_PAGE(sorszam): A megadott lapot elrejtése, a lap nem lesz
látható
HOST (parancs): A megadott OS parancs végrehajtása
LOCK_RECORD: Az aktuális rekord zárolása
MESSAGE (szoveg): A megadott üzenetszöveg kiirása a
képernyőre
SET_FIELD (mezoobjektum, attributum, jelzo):
A megadott mező viselkedési
paramétereinek megváltoztatása, ahol az
attributumok kijelentése a következő:
AUTO_HELP automatikus tájékoztató szöveg
AUTO_SKIP automatikus továbblépés a
következő mezőre
DISPLAYED a mező értéke kijelzett a
képernyőn
ECHO bevitelnél az érték kiíródik a
képernőre is
ENTERABLE értékbevitel engedélyezett
FIXED_LENGTH fix értékhosszúság
QUERYABLE lekérdezésnél adható meg
szelekciós feltétel a mezőre
REQUIRED kötelező kitölteni
UPDATE_NULL módosítani kell, ha üres lenne
UPDATEABLE módosítás engdélyezett
UPPER_CASE nagybetűs szöveget tárol
A jelző lehet:
ATTR_ON engedélyezés, beállítás|
ATTR_OFF letiltás, visszavonás
A tárolt eljárások mellett a rendszer információ lekérdezési céllal tárolt
függvényeket is tartalmaz. E néhány függvény szolgál az hibakódok és
üzenetek közvetlen elérésére. Az alábbi lista mutatja rendelkezésrá álló tárolt
eljárásokat
ERROR_CODE: visszaadja a hiba kódját
ERROR_TEXT: visszadja a hiba szövegét
MESSAGE_CODE: üzenet kódja
MESSAGE_TEXT: üzenet szövege
A több blokkból álló alkalmazások esetén szükség lehet olyan közös változóra,
amely valamilyen globális értéket tárol. Vagyis valamely blokkban vagy
Pl?SQL triggerben előállított értéket más blokkokban vagy trigerekben is
szeretnénk felhaználni. Ugyan az megoldható, hogy kiválasztunk egy blokkot, s
ahhoz kötünk egy változót, hiszen bármely blokkból hivatkozhatunk más
blokkok adataira is az űrlapon belül, azonban ennek a megoldásnak is van
kortlátja. Ez a korlát akkor jelentkezik, ha egy alkalmazás nemcsak egy
úrlapból, hanem több űrlapból is áll. Ez megtehető, hiszen a CALL illetve a
CALL_QUERY tárolt eljárások segítségével egy űrlapból meghívható egy
másik űrlap. Ebben az esetben a meghívott űrlapból nem érhető el a hívó űrlap
blokkja és annak mezője. E blokkon belüli globális változó deklarálásának
másik, inkább szemléletbeli problémája, hogy a globális változó léte arra utal,
hogy szükség van blokkokon kívüli, a blokkokból elérhető változókra is. Ebben
az esetben pedig elvárjuk, hogy ne legyen egyetlen egy blokk sem kitüntetve.
Ezen igény kielégítésére az SQLForms lehetőséget ad blokkokon kívül
elhelyezkedő globális változók létrehozásárása is. A globális változót valamely
PL/SQL blokkban lehet létrehozni egy értékadással. A globális változót az
azonosító név előtt elhelyezkedő GLOBAL kulcsszóval jelöljük. Az alábbi
példa egy RSZ nevű globális változót hoz létre, melybe a 'RDJ781' érték kerül
letárolásra:
:GLOBAL.RSZ := 'RDJ781';
A globális változók használatának egyik sajátsága, hogy nem lehet benne csak
sztring tipusú értékeket tárolni. Ez azzal a kellemetlenséggel jár, hogy
numerikus értékek esetén nekünk kell elvégezni a szükséges konverziókat
minden egyes hivatkozás esetén.
Az SQLForms által biztosított lekérdező függvények által szolgáltatott
információk mellett vannak olyan rendszerinformációkis,melyek nem annyira
valamilyen számítási tevékenységhez kötődnek,hanem inkább a rendszer
pillanatnyi állapotát tükrözik. Ezen információelemek lekérdezésére szolgálnak
az úgynevezett rendszer változók. A rendszerváltók értékét a rendszer állítja be,
a PL/SQL blokkokban úgy lehet használni őket mint a változókat, pontosabban
mint a konstansokat, hiszen értéküket nem módosíthatjuk.
A rendszerváltozókat az azonosító nevük elő írt SYSTEM előtaggal
különböztetjük meg a többi változótól. A rendszerváltozókat rendszerint
állapotvizsgálatban használjuk. Az alábbi kifejezés például azonmező tartalmát
adja vissza, amleyben éppen a kurzor tartózkodik:
:SYSTEM.CURSOR_VALUE
A következő felsorolás a fontosabb rendszer változókat adja meg a
jelentésükkel együtt.
SYSTEM.BLOCK_STATUS:
az aktuális block állapota, mely lehet
CHANGED ha módosult adatok vannak benne,
NEW ha új,
QUERY ellenőrzött adatok vannak csak benne
SYSTEM.CURSOR_FIELD :
azon mező azonositóját adja vissz, ahol a kurzor áll.
SYSTEM.CURSOR_VALUE :
azon mezo értéke, ahol a kurzor áll.
SYSTEM.CURSOR_RECORD :
az aktualis rekord sorszáma a blokkban.
SYSTEM.FORM_STATUS :
az űrlap állapota, az állapotok értékei ugyanazok,
mint a. SYSTEM.BLOCK_STATUS esetében
megadott értékek
SYSTEM.LAST_RECORD :
Akkor ad igaz értéket, ha az utolso blokkbeli
rekordnál vagyunk
SYSTEM.RECORD_STATUS :
Az aktuális rekord állapota, az állapotok értékei
ugyanazok, mint a. SYSTEM.BLOCK_STATUS
esetében megadott értékek, de ezen felül itt még
NEW állapot is szerepelhet.
Az SQLFormsban az előzőekben ismertetett rendszerváltozók mellett még
három, speciális célra használható rendszerváltozó is rendelkezésre áll. E
változók formátumukban is elütnek a többi változótól, hiszen duppla dollárjelek
határolják az azonosító nevüket:
$$DATE$$: rendszer dátum
$$TIME$$: rendszer idő
$$DATETIME$$: dátum és idő
Ezen változók az űrlapok tervezésekor az egyes mezők definiálásakor, a mezők
alapértelmezési értékének megadására szolgálnak. Abban az esetben
használhatók, ha a mező az aktuális rendszer dátumot vagy időt fogja
alapértelmezési értékként tartalmazni. Erre egyébként csak kerülőúton,
triggerek alkalmazásával lehetne lehetőség.