VaxNt/ProDB.PGuide.Příklady
Úprava ambulantního zápisu při návětěvě na neurologii
context.use
?load.sql !Chyba,select * from Ambulance where AmbulanceId='$(AmbulanceId)'
do LoggedUser,Lekar,randomize,random
_set !Pacient=$(Prijmeni) $(Jmeno) $(Titul) $(RC) $(CentralId)
set WizCaption,Úprava už napsaného vyšetření
call videoeeg/prefill.prg
?wizard videoeeg/upravit_zapis.wiz,Text,wfenlarged
do DateTime,KdyZapsal,LoggedUser,KdoZapsal
try.update.dump.exit Ambulance,videoeeg_upravit_zapis
Chyba:
_quit V pohledu není AmbulanceId - akce nemá smysl ...
Komentář:
1.Nejprve se převezme kontext, tedy data z řádku nad kterým se akce volá. Bude to asi popis existující
ambulantní návštěvy.
2.Pokusíme se načíst komplet data o upravované návštěvě. Pokud to nevyjde, končíme chybou na odpovídajícím
návěští Chyba.
3.Iterací "do" se nastaví proměnná Lekar a inicializuje se generátor náhodných čísel.
4.Příkazem _set se sestrojí syntetická proměnná Pacient - pozor na to, že může obsahovat v titulech i čárky
a jiné divoké znaky.
5.Nastaví se titulek wizarda.
6.Zavolá se skript na předvyplnění textu nálezu - ten sestaví proměnnou Text s předepsanými kapitolami.
7.Zavolá se formulář, začne se rovnou na proměnné Text a zobrazí se v modu 2/3 obrazovky.
8.Pokud snímání dat dopadlo dobře, inicializují se iterací služební proměnné
9.Pak se systém pokusí data aktualizovat v tabulce Ambulance a dumpovat celou operaci do logu pod udaným jménem
10.Tím to končí.
11.Toto je typický skript a VaxNt je primárně určen k interpretaci takto složitých skriptů.
Tisk nálezu z ambulance přes WinWord
context.use
if @AmbulanceId = void then _quit V pohledu není vyplněna identifikace - akce nemá smysl
_call Setup
_call GetData
create.rtf $(MUSTR),$(TARGET)
opendoc $(TARGET)
exit
Setup:
context.set MUSTR=$(DOCDIR)ambulance.rtf
context.set TARGET=c:\tmp\ambulance.rtf
context.set_system TARGET
context.set_system MUSTR
set Dnes,$(Today)
yyyymmdd.ddmmyyyy Dnes,DnesCz
yyyymmdd.ddmmyyyy Datum,DatumCz
_return
GetData:
load.sql !select * from Ambulance where AmbulanceId='$(AmbulanceId)'
load.sql !select Podpis from LekariEtc where Kdo='$(Lekar)'
_return
Komentář:
1.Pro přehlednost jsou ve skriptu dvě procedury - SetUp a GetData.
2.První dva příkazy převezmou kontext a vyřeší ev. nevhodné volání v nevhodném kontextu.
3.Pak se zavolají procedury na nastavení proměnných a získání dat o pacientovi a nálezu.
4.Podle mustru nálezu a aktuálních hodnot se vygeneruje soubor ve formátu RTF.
5.Zavolá se na něj WinWord resp. defaultní editor asociovaný funkcí Open se suffixem .rtf.
6.Procedura Setup nastaví hodnoty MUSTR a TARGET - dělá to opatrně kvůli možným výskytům znaků "\".
Setup ještě vypočte a překonvertuje do české notace dnešní datum i datum uskutečnění vyšetření.
7.Procedura GetData nasaje z databáze všechna data o vyšetření a také položku Podpis lékaře, který
vyšetření prováděl.
Získání kódu pojišťovny podle centrálního identifikačního čísla prostřednictvím univerzálního stykového
modulu na straně serveru.
if @CentralId = void then return
push CentralId
clear
set LiServer,lisal.nem.homolka.cz
pop CentralId
java !$(LiServer),/servlet/dbGet/eq/pojistovna3,CentralId
return
Komentář:
1.Pokud není zadáno centrální číslo pacienta, končíme.
2.Uschováme na zásobník udané číslo.
3.Úplně vyčistíme vlastní kontext.
4.Nastavíme jméno serveru.
5.Ze zásobíku vrátíme centrální číslo.
6.Zavoláme funkci serveru pomocí příkazu "java".
7.Jakékoli vrácené hodnoty předáme díky "return" do volajícího nadřízeného skriptu.
8.V důsledku volání se přepíšou hodnoty získané prostřednictvím serveru, pokud volání nedopadne
dobře nebo pokud centrální databáze nemá žádné hodnoty k mání, zůstanou v platnosti ty, které ev.
měl k dispozici volající skript. Používá se při "trumfování" lokální evidence pomocí dat z
nějaké centrály.
Rozjetí pohledu na dnešní poruchy zařízení.
set Autorefresh,120,_Colored,Color,Name,Přehled poruch dnes
context.set SQL=select DatPor,Cislo,zarizeni,KodRDN,PlusMinus as PM,DatPl,Typ,Cast(Pricina as varchar(4)) as Pricina,Pocet,Rks,ZacatekUziv as ZU,KonecUziv as KU,ZacatekTech as ZT,KonecTech as KT,Zavod,Servis,Forhont,uziv,Drs,Objekt,Komentar,PoruchaId,Skupina,KdyZapsal,KdoZapsal,Color,'On' as FKeys,Znacka from PoruchyDisp where (DatPor = '$(Today)') order By Color desc,Zarizeni asc,Uziv asc,Drs asc
launch.named !$(Name),$(SQL)
exit
Komentář:
1.Nejprve se nastaví různé vnitřní parametry:
- Autorefresh - udává ve vteřinách, za jak dlouho se má pohled sám přezobrazit a nasát ev.
nově zadané poruchy z jiných počítačů
- _Colored - proměnná ovládající probarvování řádků, zde nastavena na Color, což znamená, že barva
požadovaná je rovnou součástí zobrazovaného záznamu. Existuje ale celá řada jiných metod probarvení.
- Name - titulek pohledu / gridu.
2.Pak nastavíme hodnotu SQL, může obsahovat čárky a tak je to děláno opatrnější formou setu. Ke konci
řádku v klauzuli se odvoláváme na Today a tím dosáhneme po substituci správného pohledu na správná data.
Pro databázi se pak předá už sql s vyřešenou substitucí.
3.Pomocí launch.named se rozjede zobrazení a skript končí.
4.Konvence je taková, že takto zavolaný pohled uzavře jiné, které snad byly zavolány stejným mechanismem.
To proto, aby desktop nebyl zaplněn množstvím osiřelých pohledů, které by se navíc mohly pěkně co pár vteřin
refreshovat a utavit databázi na straně serveru...
Stisk funkční klávesy F11 pro získání detailního pohledu.
context.use.only PrispevekId,VylukaId
?allowed FF
?switch NejdeTo,Fkeys visible 0,Prispevek,@PrispevekId <> void,Vyluka,@VylukaId <> void
NejdeTo:
big.message Pozor:,Použití funkční klávesy F11 nemá v tomto pohledu smysl ...
exit
Vyluka:
fetch vyluky/f11.prg
Prispevek:
fetch prispevky/f11.prg
Komentář:
1.Toto je hodně assemblerový skript. Chceme podle toho, jaká jsou vidět při stisku F11 data vyvolat
odpovídající skript, který už požadavek vyřeší v detailu.
2.Nejprve si z kontextu vybereme pouze relevantní položky.
3.Vyzkoušíme, zda má uživatel vůbec právo "FF" - v dané aplikaci to je stisk funkčních kláves pro
ovládání běhu aplikace s právem zápisu.
4.Příkaz switch postupně bere ze seznamu návěští a podmínku. Jakmile narazí na splněnou podmínku, pokračuje
na udaném návěští.
5.První podmínka "Fkeys visible 0" značí, že v pohledu vůbec není povoleno stisknutí funkční klávesy, není
k tomu určen. takové pohledy jsou v dané aplikaci vybaveny fiktivní položkou Fkeys.
6.Další dvě podmínky se ptají, zda vhodná hodnota není prázdná.
7.Pokud se nalezne splněná podmínka, příkazem fetch se nahradí stávající skript tím udaným. Fetch je
nízkoúrovňové volání, skutečně nahradí v paměti text aktuálního skriptu a začne ho interpretovat od
prvního řádku.
Zadání poruchy na jednom vysílači nebo trase s tranzitivním dohledáním všech zasažených zákazníků a jejich
provozu. Tento skript je tady spíše jako ukázka pokročilejšího programování, jako ukázka toho, že se dá udělat
i dosti divoká akce. V zásadě jde o to, že po iniciálním prověření kompetencí a přípustnosti akce se
vyplní formulář s náležitostmi akce. Takto vypadá. Skript není komentován ...
?allowed Vx,Vn
context.use.only CisPo,Cislo
if @CisPo = void then setv CisPo,Cislo
call vyluky/prelude_new.prg
if @NovaVyluka = A then set CisPo,,Cislo,,
set WizCaption,Nová výluka přes Zařízení
?wizard vyluky/form_pres_kmen.wiz,,wfenlarged
call vyluky/complete_new.prg
set Pocet,0
load.sql !select count(Zarizeni) as Pocet from Sluzba where (Zarizeni='$(Zarizeni)') and ((AkslK='') or (AkslK is null))
if @Pocet <> 0 then goto PresSluzby
confirm.or.exit !Na zařízení $(Zarizeni) není žádná služba - výluka se naplánuje bez položek Uziv a Drs ?
call vyluky/cislovani.prg
load.sql !select objekt,Zavod as Oblast from kmen where Zarizeni='$(Zarizeni)'
load.sql !select KodRDN,Kralert,Servis from Sluzba where Zarizeni='$(Zarizeni)'
try.insert.dump.exit Vyluky,vyluky_new_pres_kmen
PresSluzby:
call vyluky/cislovani.prg
menu.construct !Zarizeni,Uziv,Drs;select Zarizeni,Uziv,Drs from Sluzba where (Zarizeni='$(Zarizeni)') and ((AkslK='') or (AkslK is null))
menu.multiselect Menu,Menu,Vyberte všechny vhodné kombinace Zarizeni.Uziv.Drs pro zadání výluky
Loop:
menu.getnext Zarizeni,Uziv,Drs
jump.iffalse Quit
set objekt,,KodRDN,,Kralert,,
load.sql !select objekt,Zavod as Oblast from kmen where Zarizeni='$(Zarizeni)'
load.sql !select KodRDN,Kralert,Servis from Sluzba where Zarizeni='$(Zarizeni)' and Uziv='$(Uziv)' and DRS='$(Drs)'
try.insert.dump Vyluky,vyluky_new_pres_kmen
inc Poradi
set !VylukaId,$(Skupina).$(Poradi)
jump Loop
Quit:
exit
Rejstřík kapitoly
Nadřízená kapitola dokumentace / rejstřík