JLABS

VaxNt/ProDB.PGuide.Příklady

Programátorská příručka.Další příklady

BulletÚ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ů.

Bullet 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.
    
Takto vypadá mustr ambulantního nálezu. Místa, kde se provádějí substituce, jsou označena dolarovou notací. Místo JLABSBOOKMARK je jenom technické a a slouží k orientaci v exitujícím a off-line mimo rámec VaxNt vytvořeném dokumentu. VaxNt podporuje substituci do RTF formátu místo DOC a to jako pro úspornost tak i portabilitu. RTF je široce přijímaný formát, zatímco DOC je nativní formát WinWordu a navíc od verze k verzi jiný...

Bullet 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.

Bullet 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...
        

Bullet 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.

Bullet 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

Bullet


BulletRejstřík kapitoly
BulletNadřízená kapitola dokumentace / rejstřík


JLABS Aktualizováno dne 20000704. Komentář: info@jlabs.cz