JLABS

VaxNt.Podřízené pohledy

Podřízené pohledy

Bullet Na desktopu můžeme v aplikaci zobrazit několik pohledů. Tyto mohou být zcela nezávislé, ale pomocí tzv. podřízenosti je možno mezi nimi vytvářet i systematické a "živé" vazby. Předpokládejme, že v databázi existuje tabulka oblastí a rovněž tabulka objektů, které do těchto oblastí patří. Obecně tedy jde o seznam a širší množinu, která je tímto seznamem nějak logicky členěna. Přirozeně vzniká požadavek snadno a rychle se dívat na data patřící jenom do jedné skupiny:

  • Objeky patřící do jedné oblasti
  • Zařízení patřící do kompetence jedné údržbové čety
  • Poruchy na jednom zařízení
  • Poruchy v konkrétním období
  • Poruchy podle typů
  • Zařízení podle uživatelů
  • ...
  • Bullet Nejsnazžím způsobem prezentace takových dat jsou dvě okénka zobrazující dva svázané seznamy. V jednom například seznam oblastí a ve druhém seznam objektů - ovšem vždy takových, na jaké oblasti se nacházíme v seznamu oblastí. Posouváním po oblastech (uživatelích, typech poruch, ...) se pak druhý seznam zařízení (zařízení, poruch,...) automaticky aktualizuje a přeobrazuje. Stejně tak je možno chtít sestavit podřízený graf, který automaticky kreslí po každém pohybu v seznamu oblastí přehled četnosti poruch podle typů ve formě koláčového grafu.

    Bullet K tomu slouží pojem podřízenosti. Podřízený pohled získáme výběrem po stisku pravého tlačítka myši na nadřízeném, tedy původním pohledu. V našem případě nad pohledem na seznam oblastí. Vybereme Podřízený a potom Pohled. Z menu si vybereme opět libovolný pohled - v našem případě například pohled na databázovou tabulku Kmen. Potom v okénku SQL definujícím dotaz na databázi v podřízeném pohledu vyplníme vazbu. Ta bude typicky zprostředkována pomocí stejnojmenné položky v obou tabulkách, ne však nutně. Okénko bude obsahovat standardní sql dotaz, pravděpodobně:

  • "SELECT * FROM Kmen".
  • Pro zajištění vazby dopíšeme textna tvar:
  • "SELECT * FROM Kmen WHERE Zavod='$(^Zavod)'"
  • a definice podřízenosti je hotova. Detail na podmínku: Zavod='$(^Zavod)'

    Bullet Nakonec oba pohledy uspořádáme vhodně na obrazovku, například jako "dlaždice svisle" a uložíme jako konfiguraci desktopu - viz Layouts. Například pod jménem "OblastiAZarizeni" Můžeme se pak kdykoli vrátit k takto zhotovené konfiguraci. Ukládá se tam, odkud byl spuštěn binár vaxnt.exe, vi dialogu si ale můžete vybrat jakékoli jiné místo.

    Bullet V této konfiguraci tedy můžeme "browsit" po oblastech v základním pohledu a v podřízeném pohledu se automaticky budou objevovat odpovídající zařízení v nich. Je jasné, že podmínku v podřízeném pohledu můžeme ještě jakkoli doplnit, například omezit datum uvedení do provozu atd.

    Bullet Zcela analogickým způsobem můžeme sestavit i podřízený graf. Ten pak může při "browsení" přes zařízení automaticky kreslit koláčový graf rozložení typů poruch na daném zařízení.

    Bullet Tato technika se hodí všude tam, kde existují vazby 1:N v datech, která je vhodné prohlížet jako parciální seznamy. Uspoří to sáhodlouhé zadávání filtrů a rovněž se omezí i datový tok mezi serverem a vaším PC. Takže vedle oblastí a zařízení nebo zařízení a poruch to mohou být odběratelé a smlouvy apod. Podřízenost může být samozřejmě řetězená a může tedy existovat ještě podřízený pohled nebo graf k pohledu už podřízenému. Čili je možno vytvořit kaskádu Oblast -> Zařízení -> Rozložení poruch.

    Bullet Vtip je v tom, že třebas i složitě zkonstruovaná kaskáda podřízenosti pak uspoří mnoho psaní a umožní využívat data nečekaně flexibilním způsobem. Důležité je to, že "živost" a automatické překreslování celé kaskády jsou zaručeny systémem automaticky.

    Bullet Poznámka pro znalce SQL. Obrat "SELECT * FROM KMEN WHERE Zavod='$(^Zavod)'" je rozšířením syntaxe SQL. Proměnné typu $(Zavod) jsou řešeny softwarem na konstanty těsně před položením dotazu a to podle kontextu, parametrů a nebo dialogem s operátorem. Proměnná ^Zavod je vlastně metaproměnnou a značí totéž co "hodnota proměnné Zavod z nadřízeného pohledu a tam z aktuálního záznamu". Stojíme-li tedy v nadřízeném pohledu na záznamu, kde Zavod je "ZC", pak je obrat kompilován těsně před odesláním do databáze na dotaz "SELECT * FROM KMEN WHERE Zavod='ZC'". Flexibility systému je zde dosaženo vhodnou interpretací kontextu a kompilací dynamických sql dotazů metodou just-in-time. Stejná technika je použita při zadávání sloupcových filtrů. To také ukazuje sílu interpretace oproti tvrdému zadrátování aplikací do EXE souborů.

    Bullet Vedle proměnných, jako byla výše $(Zavod) řeší některé proměnné systém automaticky, takové jsou například $(Today), $(Yesterday), $(Tomorrow), $(ThisWeek) a celá řada jiných.

    Bullet Při řešení hodnot just-in-time se někdy musí rozvinout dialog nebo kalendář apod. V tom případě se software snaží vyhnout duplicitním dotazům na to, na co už uživatel nějak odpověděl. To se hodí hlavně tam, kde se opakuje použití stejné proměnné. Například:

    "select * from stvol where STA like '$(Stanice X)%' or STA1 like '$(Stanice X)%' ..."

    Bullet Viz kapitola o gridech.
    Bullet Viz kapitola o metaproměnných.
    Bullet Hlavní obsahová stránka / rejstřík


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