Sok alkalmazásban vannak egymáshoz nagyon hasonló programrészletek, amelyek ugyanazokat az utasításokat tartalmazzák ugyanolyan sorrendben, csak más objektumon hajtódnak végre. Ezeket a hasonló programrészleteket össze lehet gyűjteni egy sablonba (TEMPLATE), ahol a valódi objektumok helyett formális objektumok szerepelnek. A létrehozott sablonokat konstrukciók (CONSTRUCT) kialakításával használhatjuk úgy, hogy a formális objektumoknak aktuális objektumokat feleltetünk meg. A SuperNOVA több sablont is biztosít, amelyeket szabadon felhasználhatunk az alkalmazásokban.
Példa sablon definiálására:
#-----------------------------------------------------------------------
#
# Table Editor Template to handle a dialog containing a viewbox
# A zoom dialog is used to change/add records
# Delete is not confirmed.
# TableZoomViewbox:
# Table currency is not necessarily equal to viewbox currency. In case
# it is possible to uniquely position on a table record this template
# should be used. Caching is used to keep the records read from the
# table. Only when necessary a real table read is done.
#
#-----------------------------------------------------------------------
TEMPLATE TZV_EDIT
{
CTRL_ADD
CTRL_DEL
CTRL_FIRST
CTRL_LAST
CTRL_NEXT
CTRL_NPAGE
CTRL_PPAGE
CTRL_PREV
CTRL_SEL
CTRL_UPD
EDIT_DIALOG
EDIT_TABLE
EDIT_VIEWBOX
ZOOM_CANCEL
ZOOM_DIALOG
ZOOM_OK
}
#-----------------------------------------------------------------------
# Inheritable functions on template TZV_EDIT
#-----------------------------------------------------------------------
FUNCTION dialog TZV_EDIT
{
...
}
# Sorban a többi függvény...
...
#-----------------------------------------------------------------------
# Internal functions on member EDIT_TABLE
#-----------------------------------------------------------------------
FUNCTION NEXTLAST EDIT_TABLE
{
...
}
# Sorban a többi függvény...
#-----------------------------------------------------------------------
# Internal functions on member EDIT_VIEWBOX
#-----------------------------------------------------------------------
FUNCTION TF_ADDVISIBLE EDIT_VIEWBOX
{
...
}
# Sorban a többi függvény...
#-----------------------------------------------------------------------
# Template variable(s)
#-----------------------------------------------------------------------
FIELD TV_BREAK string(16) EXPR=ok|fail|break STATIC
FIELD TV_CHECK string(16) EXPR=ok|fail|break STATIC
Példa konstrukció definiálására:
CONSTRUCT INHERIT TZV_EDIT
{
CTRL_ADD cDmn1Buj # felvitel nyomógomb
CTRL_UPD cDmn1Bmod # módosítás nyomógomb
CTRL_SEL cDmn1Bval # válogatás nyomógomb
CTRL_FIRST cDmn1Bfirst # első lap nyomógomb
CTRL_LAST cDmn1Blast # utolsó lap nyomógomb
CTRL_NEXT cDmn1Bnext # következő sor nyomógomb
CTRL_NPAGE cDmn1Bnpage # előző sor nyomógomb
CTRL_PPAGE cDmn1Bppage # következő lap nyomógomb
CTRL_PREV cDmn1Bprev # előző lap nyomógomb
EDIT_DIALOG cDmn1 # fődialóg
EDIT_TABLE MANUAL # tábla
EDIT_VIEWBOX cVmn1 # viewbox
ZOOM_CANCEL cZmn1Bmegsem # zoom_dialóg 'mégsem' nyomógomb
ZOOM_DIALOG cZmn1 # zoom_dialóg
ZOOM_OK cZmn1Bjo_mod # zoom_dialóg 'rendben' nyomógomb
}
FUNCTION TF_NORECS cDmn1
# nem talált rekordot
FUNCTION TF_SHOW cVmn1
# viewbox megmutatása
FUNCTION uncolor cVmn1
# viewbox sor normál színezése
FUNCTION color cVmn1
# viewbox aktuális sor színezése
FUNCTION TF_NOCURR cDmn1
# viewbox-ban nincs aktuális rekord
FUNCTION TF_YESNO cZmn1
# rákérdezés a törlésre
FUNCTION TF_FOCUS cZmn1
# cursor beállítás a zoom_dialógon
FUNCTION TF_ADD_INIT cZmn1
# felvitel előtti tevékenység
FUNCTION TF_SEL_INIT cZmn1
# válogatás előtti tevékenység
FUNCTION TF_UPD_INIT cZmn1
# módosítás előtti tevékenység
FUNCTION TF_DEL_INIT cZmn1
# törlés előtti tevékenység
FUNCTION TF_MUT_INIT cZmn1
# megmutatás előtti tevékenység
FUNCTION TF_ADD_CHECK cDmn1
# rekord-felvitel előtti ellenőrzés
FUNCTION TF_UPD_CHECK cDmn1
# rekord-módosítás előtti ellenőrzés
FUNCTION TF_SHOW cZmn1
# zoom_dialóg megmutatása
FUNCTION TF_HIDE cZmn1
# zoom_dialóg eltüntetése
FUNCTION TF_ORDER cDmn1
# tábla-rekord sorrend a viewbox-ban
FUNCTION TF_GETPOS MANUAL
# aktuális viewbox rekordhoz a megfelelő tábla rekord beolvasása
FUNCTION TF_ADD_OK cDmn1
# rekord-felvitel sikerült
FUNCTION TF_INIT MANUAL
# tábla rekord inicializálás
Az üzenetállomány
A SuperNOVA lehetőséget biztosít arra, hogy egy alkalmazást több nyelven is lehessen használni a programkód megváltoztatása nélkül. Egy-egy külön adatállományban leírható, hogy milyen szimbolikus névhez milyen konkrét, nyelvfüggő szöveg tartozzon, és ezt az alkalmazásban fel lehet használni. Ezek alkalmazásához elegendő a SuperNOVA megfelelő környezeti változóit beállítani.
Példa üzenetállomány használatára:
FSUSRLANG=hun # a nyelv beállítása, lehet pl. en vagy ita is.
FSUSRMSG=fsusr
Az fsusrhun.dat állomány tartalma:
BUT_CANCEL ~Mé&gsem BUT_CANCEL ~&Cancel
BUT_DEL ~&Törlés BUT_DEL ~&Delete
BUT_DELALL ~T&örli mindet BUT_DELALL ~Delete &all
BUT_END ~&Vége BUT_END ~&End
BUT_FIRST ~|| BUT_LAST ~>|
BUT_NEW ~&Felvitel BUT_NEW ~&New
BUT_NEXT ~> BUT_NEXT ~>
BUT_PRINT ~&Nyomtatás BUT_PRINT ~&Print
BUT_PREV ~
Használata programból: pl. BUTTON DdialogBok X=20 Y=20 TEXT=message('BUT_OK')
Adatbázis kapcsolódás
A SuperNOVA egységes adatbázis felületet biztosít, ami olyan alkalmazások készítését teszi lehetővé, melyek teljesen függetlenek az adatbázis valós típusától és struktúrájától. Egyetlen lényeges elvárás a SuperNOVA interfész számára az adatbázis és az adatok formális leírása (a mezők és táblák megfelelő definiálása). Ez a formális reprezentáció megengedi egy bizonyos adatstruktúrára épülő alkalmazás létrehozását, amiről az alkalmazás fejlesztésének befejezése után egyszerűen áttérhetünk más típusú adatbázisra a táblák típusának megváltoztatásával.
SQL felületek
A SuperNOVA megengedi SQL interfész használatát. Ilyenkor lehetséges SQL utasítások létrehozása és végrehajtása, illetve ezek eredményének SuperNOVA függvények által történő feldolgozása. Az SQL utasítások használhatóak a SuperNOVA kódba ágyazva vagy külső Script-állományon keresztül.
Az alkalmazásból három fajta módon érhetünk el SQL utasításokat:
- Az SQL interfészhez tartozó objektumra hívott SQL függvényekkel, pl. CLOSE, EXECUTE, OPEN;
- SQL-füzérekkel, ekkor az SQL-string tartalmazza az SQL utasítást karakteres formában, ami az alkalmazás futása közben meg is változhat;
- SQL-állomány, ekkor két szöveges állomány használható. Az egyik a végrehajtandó SQL utasításokat tartalmazza, a másik egy leíró állomány, amelyben a bemeneti (input) és kimeneti (output) specifikáció adható meg, illetve az eredmény feldolgozását végzõ függvény neve és objektuma, amennyiben szükséges. Pl. SQL cikk lekerdezés