CaIS ® Tapplication
&
Delphi OLE/COM
InterSystems CACHÉ post-relációs adatbáziskezelõ és ObjectScript alkalmazás futtató Rendszer Objektum Orientált programozása
ALKALMAZÁS TECHNOLÓGIÁK I. (CAIS®) / Belső használatra ! /
szerzõdött VAR partner (Value Added Remarketing partner) A dokumentáció változtatásának jogát fenntartjuk . Copyright (C) 2004-2005 Tel. : 06 20/441 4882
Fax.: 06 96/ 245 199
e-mail :
[email protected] http\\:www.m-soft.hu
Cache & CaIS® 8. Alkalmazás technológiák CaIS® és Borland Delphi Az általunk (M-Soft) kifejlesztett eseményvezérelt alkalmazások alapobjektuma a CaISys , sokban hasonlóan működik a Borland cég Tapplication objektumához . Legnagyobb eltérés , hogy a CaISys-objektumnak csak a karakteres interaktív felület kezelését kell felügyelnie . A bemutatandó komponensek és mintapéldák mindegyikében törekedtünk az alapkoncepcióra , miszerint : a CaISys és Tapplication objektumokat (vagyis a CaIS®FormEditort és a Borland Delphi-t) csak a felhasználói interakciók beprogramozásához használjuk , az adat objektumokkal(adatbázisokkal) kapcsolatos műveleteket a mindkét objektum felület által elérhető CACHÉ objektumokban fejtettük ki . 8.1 CaIS® Tapp alkalmazás vezérlés A CaISys objektumra épített alkalmazás elkészítéséhez nélkülözhetetlen a CaISFormEditor program használata . A FormEditor által előállított karakteres formot fogja a CaISys objektum működtetni a benne tárolt paraméterek alapján . A formok paramétereit és azok beállításait a következő pontban ismertetjük , most következzék a CaISys objektum fontosabb hívható metódusainak , lekérdeezéseinek , rendszer változóinak ismertetése . CaISys objektumosztály adattábla objektumai : CaISfnc speciális login scriptet alkalmazó terminálok választható program funkcióit tárolja : ^PSW("P",funkciókód,"R")=routine CaISTRM terminálok beállításait tároló adattábla lsd.: CaISConfigService ; ^["%SYS"]CaIS("TRM",comx) = …#…#… CaISUser CaIS alkalmazás felhasználói paraméterek , nyelvezet hozzárendelése , alkalmazás jogosultságok , log beállítása ^["%SYS"]CaIS("USER",cacheuser) = paraméterek…. CaISActLog ha log funkció engedélyezett , akkor az adott felhasználó műveleteit , akcióit jegyzeteli fel a rendszer a CaIS globálba , ami a CaISConfigService programban listázható . CUser CACHÉ definiált (controll panel-ban) felhasználóit tároló globál ^["%SYS"]login FormPar adott form adatmezőihez rendelt alapértékek CaISys – TApp objektum : Alkalmazás első lépéseként létrehozunk egy CaISys objektum változót , amelyre építjük a programunkat ; vagyis formját feltültjük a memória M nevű multidimenzionális változójába , a futáshoz szükséges paramétereket rname , user , lng beállítjuk , majd elindítjuk a program eseményvezérlését az Init – Run – Done hívásokkal . set Tapp=##class(CaISys.TApp).%New() set Tapp.rname=$zn,D=$C(35) set Tapp.user=$zu(67,11,$j) do Tapp.Init(),Tapp.Run(),Tapp.Done() kill quit
Cache & CaIS®
A programunk tulajdonképpen csak ennyi , a munkát a Run metódus végzi , amely működése során a FormEditorral beparaméterezett módon kezdi működtetni a formot . Ezen beparaméterezhető elemek és működtető funkciók pontosabb leírása a következő : Property M
Multidimenzionális tömb változó , a CaISFormEditor által az ^M globálba mentett form paramétereket tárolja memóriában.Globálból történő feltöltését az Init() metódus hajtja végre , kötelezően beállítandó változó az rname és a lng . Property rname A form feltöltéséhez M memória tömbbe , szükséges routine-t azonosító form neve . Property user Felhasználó neve , amire a CaIS rendszer a logokat bejegyzi (ha aktív).Általában megegyezik a CACHÉ login névvel $ZU(67,11,$J) Property lng Private property ! kívülről nem állítható változó , csak CaIS használja. Az aktív felhasználó nyelvezete , Init() metódus user változó alapján automatikusan beállítja (CaISConfigService-ben állítható) , ha nincs megadva érték , akkor a rendszer alapértelmezett nyelvezetére kapcsol ^%CaIS("FE","DFLTLNG") bejegyzés szerint . Property rif A CaIS Run() metódusa a form adatmezőit a CaISFormEditorban meghatározott TabOrder sorrend szerint kezeli . Ha ettől el szeretnénk térni, akkor ezen változóval határozhatjuk meg a direkt következő adatmezőt: ... set Tapp.rif="COD" Quit ...
Property err Az aktív form működtetése közbeni ellenőrzésekkor felmerülő hibákat jelezhetjük a Run() metódusnak . Az aktuális adatbekérő mező befejezése után mindig kiértékelődik ezen változó . Ha értéke nem 0 , akkor a a Run() metódus felhívja a hibakezelőt , és a kiértékelt hibát a felhasználónak megjeleníti . ... If oref="" set Tapp.err=12,Tapp.rif=%F Quit ...
A hibakódok kiértékelését az ^ME globálból olvassa ki a rendszer , amely szabadon bővíthető
Cache & CaIS® Property paramstr ... Hlp
Az aktuális form adatbeviteli mezőjéhez rendelt választó ablak , megjelenítendő elemszám és méret paramétereket adhatjuk meg :
;==== Input Scroll section ======================= Kill ^whlp($J) if Tapp.rif="COD" Do .set i=1,$E(BL,80)=" ", .set %wl=$P(Tapp.paramstr,"^",2),%wi=$P(Tapp.paramstr,"^",1)
...
Method Init A változókkal megadott form memóriába való betöltését végzi el , a következő , kötelezően szükséges rname és user változók szerint . Beállítja a nyelvezetet , a terminál típusát (PC-ANSI , VT, ..) , billentyű kiosztás hozzárendeléseket feltölti , majd a form képét a beállítások szerint monochróm vagy színes megjelenítéssel végrehajtja a TXT() és az RFR() metódusok felhívásának segítségével . Ha a routine-unkban elhelyeztünk Init elnevezésű cimkét , akkor ennek Végrehajtását is elvégzi , pl.: ... Init
...
;--- Init block set BL=$E(" ",1,80) ... set POS="Auto" Do Tapp.RFR() Quit
Method Run A form működtetését végző metódus . A FormEditor-ban megadott Tab Order szerinti sorrendben hívja fel az adatbekérő mezők kezelését végző %CaISrf() rutint . A mezők Editorban beállított forrás cimkéit felhívva elvégzi a beprogramozott lépéseket , kiértékeli err hibaváltozó ér tékét , majd ha rif válzotó nem lett direkt módon beállítva , a Tab Order sorrend szerinti következő adatbekérésre áll . Adatbekérés közben figyeli a megengedett kezelői interakciókat , funkcióbillentyű leütéseket ESC-t , stb … és az ezekhez beprogramozott programcimkéket végrehajtja . Method Done Törli memóriából M változó összes értékét , törli rname és user változó értékét is , valamint helyreállítja a hívó STACK-jét . Method RFR Init() és Run() metódusok is hívják az adatbekérő mezők ismételt frissített értékekkel történő kiíratásához , A form összes adatmezőjét frissíti . Program közben is hívható adatmező értékének megváltozásakor: ... set COD="1123",PLT=COD Do Tapp.RFR() ...
Method TXT Init() metódus is hívja a képernyő felépítéséhez . Adott form szöveges informáló (nyelvezetfüggő) kiírásainak frissítését végzi el a képernyőn. Ha bármely felülírással (üzenetablak , listaablak,…) megváltoztatjuk a képernyőnket , ezen hívással helyreállíthatjuk a form eredeti képét: ... Do Tapp.TXT() ...
Cache & CaIS® Method Msg
Egyszerű szöveges üzenet küldése felhasználónak a képernyő alsó üzenet területére . Első paramétere az üzenet , második az üzenet megjelenítésének időértéke másodpercben ; a –1 az állandó üzenetet jelenti , amíg le nem töröljük külön utasítással . ... do Tapp.Msg("Betárolási jegy nyomtatása ...",-1) ...
Method urs
A CaISConfigService programban a user felhasználóhóz rendelt elérési jogosultságokat és Log opciót ellenőrizhetjük a függvény visszatérési értékével : 0-hamis , 1-igaz Paramétere a lekérdezendő opciót mutatja : R Read access W Write access D Delete access L Log user action
Method CULog
A paraméterben megadott string-et beszúrja dátum,idő,percmásodperc,user,rname azonosítással ellátva a Log adattáblába .
... do:Tapp.urs("L") Tapp.CULog("Update:Freez.Inp(DATN,CSDTN)="_COD_PCS_"...") ...
Fontos tudni , ha a Log opció az adott user felhasználónál aktív a CaIS rendszer a következő automatikus logokat helyezi el a Log fájlban : Init() "Init" Run() "Run" Ha err változó értéke nem 0 , adatbekérő mezőnként: "Field:=mezőbév Error:=err" Done() "Done"
Cache & CaIS®
8.2 CaIS® Form Editor , multi nyelvezet , kódgenerátor A FormEditorral már meglévő rutinjaink formjait szerkeszthetjük át , vagy új rutint generálhatunk a segítségével . A rutin nevének és címének (képernyő címsor) megadása után a kívánt nyelvezetet állíthatjuk be . A formot a kiválasztott nyelvezet szerint szerkeszthetjük az F4 funkcióbillentyűre aktív Editor segítségével . Az F7 funkcióval erről a nyelvezetről adhatjuk meg a fordításokat a kívánt nyelvezetekre .
A Code generator opciót a space billentyűvel kapcsolhatjuk be illetve ki , amit a mezőben megjelenő X karakter jelez . A forrákód generálást csak új rutin létrehozásakor ajánljuk , mivel a bővített rutinban lehetnek a sablontól eltérések , ekkor a code generator felülírhatja a már megírt programunkat !
Cache & CaIS® A szerkesztő képernyőn a 3-22 sorok között szerkeszthetjük a formunkat . A szöveges infor-mációkat egyszerűen csak rágépeljük a kívánt területre . Adatmező definiálásához az adatmező első pozíciójánál ENTER-t ütve definiálhatjuk az adatmezőt . Az adatmező (max. 3 karakteres) nevének megadása után a kurzor (bal-jobb) nyilakkal méretezhetjük az adatmező hosszát . Ennek megadása után nyílik fel az adatmezőt beállító ablak . Az ablakban megadhatjuk a mező típusát , megjelenésének módját (inverznormál) , numerikus esetében a pontosságot , adatbeviteli Help szöveget . Ezt követi a mező Run() metódusban elfoglalt szerepét határozhatjuk meg , vagyis informális mezőt definiálunk , vagy adatbeviteli mezőként majd a Tab Order-ben is besoroljuk . A LabelOfCode mezőben az adatbevitelt követően végrehajtandó programcimkét adhatjuk meg (csak a cimkenevet kell megadnunk a rutinnevet automatikusan képzi a program . Az InputScroll –ban definiálhatunk az adatbeviteli mezőhöz választó listát , aminek az elemszámát és szélességét ^ jellel elválasztva adhatjuk meg . Már létező mezőre állva az Insert billentyűvel hívható elő az adatmező beállítások ablakot . Létező adatmező definíció törléséhez álljunk rá az adatmező tetszőleges részére és nyomjunk Del billentyűt . Az InputField-ként definiált adatmezők működési sorrendjét a TAB billentyűvel érhetjük el . A sorrend megadásához a kiválasztott mezőnévre ENTER-t adva megadhatjuk sorszámát :
A Tab Order sorrend megadása fontos , ennek elmúlasztása utáni mentéskor a program az InputField adatmezőket automatikusan átminősíti InfoField-nek . Adatbekérési ciklikusság-iteráció a rif objektum változó értékadásával oldható meg . Az F1 funkcióbillentyű leütésével érhetjük el a funkcióbillentyű feliratok definiálását . A megdott funkcióbillentyűkhöz a rutinunkban tartozni fog egy-egy azonos mevű (F1..F9)
Cache & CaIS® program címke , ahol beprogramozhatjuk a funkcióbillentyűre aktivizálni kívánt műveletsort . A cimkéket Quit utasítással zárjuk , mivel ezen funkció cimkék subrutinokként hívódnak fel a Run() metódusban : F1
... ;--- [F1] function selection block set BL=$E(" ",1,80) ... set POS="Auto" Do Tapp.RFR() Quit ...
A főképernyő F2 billentyűjére forráskód generátor előnézeti képet kérhetünk , vagyis lefuttatjuk a forráskód generátort mentés nélkül . A megjelenő listaablakban csak megtekinthetjük , de nem szerkeszthetjük a forráskódot , erre a CACHÉ-Studio –t használhatjuk . Az előnézeti listaképet viszont áttekintés céljából nyomtathatjuk .
Cache & CaIS® Az CaIS® FormEditor főképernyőjének F1-es funkciójára az aktuálisan kiválasztott nyelvezet szerinti leírás – Help jeleníthető meg listaablakban (magyar-angol elérhető) . A leírásban a program használatának rövid ismertetését találhatjuk meg . A leírást nyomtatott formában is olvashatjuk a P-nyomtat funkció aktivizálása után . A leírást a ^%CaIS("Help",...)= ...text... adatmezőkben tárolva is megtalálhatjuk CACHÉ-ben
Adatmezőtípusok definiálása : A CaIS® rendszer négy alapadattípust kezel . %String típusként bármely karakter megengedett adatbevitelnél . %Numeric típusnál csak numerikus adatbevitel engedélyezett az (opcionálisan) előírt tizedes pontosság szerint (lsd. alább) . %Date típusnál dátum adatbeadás engedélyezett , nn.hh.éééé formátumban . Megengedett a nn.hh rövidebb formátum is , ekkor a rendszer az aktuális évet automatikusan hozzáteszi . Továbbá használható a T karakter a (Today) aktuális dátum gyors megadásához ; valamint ennek kombinációi is megengedettek : pl.: T-1 (tegnap) T+2 (holnap után) , stb … A dátum mezőkben használhatóak a dátum gör-gető – léptető funkciók a PgUp és PgDn billentyűkkel . %Time típusnál időpont megadása engedélyezett a következő formákban : óó.pp vagy óó:pp .
Cache & CaIS® A dátum adatbevitelnél a CaIS® rendszer a %DN lokális változóba adja vissza a CACHÉ dátum rendszersorszámát . Időbevitelnél pedig a %TN lokális változó adja meg a CACHÉ rendszeridő másodpercbeni sorszámát . A %Numeric típusnál a tizedes pontosságot is kiválaszthatjuk az ábra szerinti ablakból . Ha nem választunk opciót , akkor az egész numerikus (Integer) lesz az adatmező típusa . A formban betöltendő szerepéről is egy választó ablakban dönthetünk . Lehet adatbeviteli mező a definiált adatmezőnk (ekkor bekerül a Tab Order listába) , vagy választhatjuk az InfoField – csak információs jelleget betöltő adatmezőt (pl.: bekért cikkszám adatbeviteli mező mellé definiált cikkmegnevezés mező , mint informáló mező) . A Skip felirat arra utal , hogy a Run() metódus eseménykezelője figyelmen kívül hagyja a mezőt.
A CaISFormEditor-al generált/szerkesztett formokat és a hozzá kapcsolódó rutinokat menükbe szerkeszthetjük . A menüprogramok is rutinok , sablonszerüen sokszorosíthatóak , mivel egyformán működnek . A CaISMD program segítségével létrehozott menüprogramok nevét adhatjuk meg a CACHÉ Controll Panel-ben a felhasználók belépési programjaiként . Ezzel egy felhasználó , csak a saját programmenüjét kapja meg bejelentkezése után .
Cache & CaIS®
8.3 CaIS® Configuration Service A CaIS® szerviz beállító program a rendszergazda számára nélkülözhetetlen eszköz . Segítségével managgelhetjük a multiplexorokrta épülő ipari hál- lózati végpontok beállításait . A CaIS felhasználók beállításait is ezen program segítségével végezhetjük el . Minden opciónál a Save gomb megnyo másával aktiválhatjuk a mentési methódust . Az így mentett beállítások üzem közben lépnek életbe , nem igényelnek semmilyen CACHÉ aktivítást (Activate , Restart, …) A program elindításakor CACHÉ Namespace-t kell választanunk , a Connectdialog delphi metódusnak köszönhetően . Ebből már ki is derült , hogy ezen program Delphi-OLE alapokra építkezik , amit a következő fejezetekben fogunk elsajátítani . A program ezen fejezet elején ismertetett CaISys objektum táblákat és azok metódusait haználja . Az első panelon hangolhatjuk be az egyes com portokon lévő végeszközök kezelé-sének módját . Ezen paramétereket a CaIS alkalmazás rendszer értelmezi . Fontos hogy az emulációs módot pontosan adjuk meg . A printer méretének megadása a listakezelőknek ad paraméterértéket , közö-sen a printer emuláció módjával . Támogatott printer emulációk : IBM pro-printer , EpsonESC/P2 , HP PCL A Tied login NameSpace csak mérlegek esetében töltendő ki , mivel ezen végpontok nem a standard InterSystems login-t fogják futtatni : Tied loginNSpace : NameSpace ahova a mérleg bejelentkezik Tied routine : speciális login script (Mérleg Caché driver)
Cache & CaIS®
A második lapon a mérlegek bejelentkező funkció jelszavait definiálhatjuk . A funkció azonosító (jelszó) megadása után a hozzá tartozó program nevét kell megadnunk . A Description mezőbe rövid szöveges funkcióleírást adhatunk meg . Megjegyzés: a printer emulációk támogatásá- hoz az alábbi szerkezetű bejegyzéseknek kell meglenniük a %SYS NameSpace-ban : ^%CaIS("PRNDEF",emuláció,vezélő szekvencia)=$C(érték,..,...) Emulációk : IBM - IBM és EPSON PCL - HP PCL Ezen bejegyzések hiányában csak IBM emulá- ció lesz elérhető a nyomtatási funkcióknál . A CACHÉ Controll Panel Security opciójában felvett felhasználók alkalmazás környezeti beállításait adhatjuk meg . Beállíthatjuk az adott User nyelvezetét , ami (ha a formokban definiálásra került) a CaIS alkalmazói rendszer adott nyelvű formjait tölti be a felhasználónak . Az alapvető tárolóegységek elérési opcióit adhatjuk meg , valamint a Log opcióval be-ki kapcsolhatjuk a felhasznáó CaIS rendszerben végzett munkájának naplózását . Az opciók elérését és rögzítését ActiveXOLE felületen kezeli a program . A Log lista lekérdezéséhez és eléréséhez viszont ODBC SQL elérést használtunk . Ehhez nélkülözhetetlen egy CaIS elnevezésű ODBC adatforrás definiálása . Az ODBC adatforrás beállítását a Windows XP vezérlőpult opciójában a felügyeleti eszközök között állíthatjuk be a Adatforrások (ODBC).lnk
ablakban .
Cache & CaIS® A naplózás rögzíti másodpercre pontosan az egyes felhasználók műveleteit , általuk érintett proramokat , funkciókat , adat módosításokat , … stb … az alábbi minta szerint: