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



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.