JLABS

VaxNt/ProDB.PGuide.Proměnné

Programátorská příručka.Proměnné

Bullet Rozlišujeme několik tříd proměnných, které se liší zejména lokalitou vůči skriptům resp. jejich instancím. Skripty se mohou volat navzáje a to i rekurzivně, je tedy správnější hovořit o instancích.

Bullet Každý skript má vlastní sadu proměnných uložených v TStringListu Context. Při volání se tato kopíruje do Contextu volaného skriptu a při návratu se odebírají do Contextu volajícího skriptu neprázdné hodnoty.

Bullet Zpohledu volajícího resp. volaného skriptu jsou to pak CallingContext a ReturnedContext. Skripty se explicitně odvolávají vlastně jenom na svůj vlastní Context, přesuny při a po volání jsou automatické.

Bullet Dále existuje globální kontext, ve kterém jsou uloženy nebo dynamicky just in time vypočítávány hodnoty - jsou case sensitivní a uvádíme je pro názornost rovnou v dolarové notaci, protože přiřazení do nich nemá dobrý význam - provedlo by se jednak do lokálního Contextu a pro vypočítávané hodnoty přiřazení navíc nemá žádný smysl, jsou to tzv. R-values. Význam je popsán nebo je očividný:

  $(dnes) - RRRRMMDD
  $(Dnes) - RRRRMMDD
  $(Dept) - oblast rozsáhlého podniku nebo jeho oddělení či primariát
  $(Today) - RRRRMMDD
  $(TodayName) - v češtině resp. podle locales
  $(ThisDay) - číslo dnešního dne
  $(ThisMonth) - číslo dnešního měsíce
  $(ThisYear) - číslo dnešního roku
  $(Tomorrow) - RRRRMMDD
  $(TomorrowName)
  $(NextWDay) - další pracovní den podle kalendáře RRRRMMDD
  $(NextWDayName) - jeho jméno
  $(DateXName) - jméno daného dne DateX, nastaveno exportem ze skriptu
  $(Yesterday) - RRRRMMDD
  $(ThisWeek) - počínaje minulou nedělí ve tvaru ('RRRRMMDD',.....'RRRRMMDD')
  $(Now) - RRRRMMDD HHMMSS
  $(TimeNow) - HHMMSS
  $(DateTime) - RRRRMMDDHHMMSS
  $(LastDay) - načítá se z paramsů, není-li tam, pak se bere dnešek při startu programu, typicky to je zarážka "kam až něco počítat"
  $(Rok) - obvykle je exportováno ze skritpů při opakovaném běhu nějakého výpočtu
  $(Obdobi) - obvykle je exportováno ze skritpů při opakovaném běhu nějakého výpočtu
  $(Vydej) - adresář DATA/VYDEJ v domovském adresáři aplikace
  $(Param) - adresář PARAMS v domovském adresáři aplikace
  $(Paramdir) - dtto
  $(Tmp) - TmpDir z paramsů
  $(HospId) - exportuje se ze skriptů
  $(SW) - verze kompilovaného programu VaxNt.Exe
  $(User) - uživatel odvozený z loginu k Windows nebo z -u na command line
  $(WindowsUser) - uživatel odvozený z loginu k Windows
  $(LoggedUser) - uživatel definovaný login procedurou aplikace
  $(SwitchedUser) - vnucené uživatelské jméno z privilegovaného skriptu nebo za autoexecu aplikace
  $(Computer) - jméno počítače, kde běží klient
  $(DOCDIR) - adresář DOCDIR v domovském adresáři aplikace
  $(Random) - náhodné číslo, generuje se vždy další JENOM po volaní funkce random ...
  $(VaxNtVersion) - verze interpreteru skriptů
  $(CutPrefix) - definovaná kategorie uživatele buď z obsahu SystemUsers.Oblast nebo z c:\jlabs.sys\special.cfg a rovnice Oblast=
  $(UUser) - uživatel podle parametrů

  !!! Krom toho je možno příkazem context.export do globálního kontextu přidat libovolný počet jiných
      proměnných...

Bullet Skripty si typicky vystačí se svým vlastním Contextem. K dispozici je ještě globální SavedContext, do kterého mohou skripty odkládat hodnoty pomocí příkazu "save". Ty tam pak vydrží do příštího volání skriptu. Nebo je mohou použít jiné skripty. To se hodí v situaci, kdy uživatel již odpověděl na dotaz "Jaké období zpracovat?" a je možno mu poslední odpověď nabízet jako default. K pohybu ze SavedContext do Context slouží příkaz "restore".

Bullet K pohybu z lokálního kontextu do globálního slouží příkaz "context.export" podobně jako export v unixu.

Bullet Globální kontext má význam i mimo rámec skriptů. Jak je snadno vidět, dolarová notace se používá například i v definici pohledů (views.prm) přímo nebo indirektně přes obsah souborů, kde je nějaký třebas i šíleně složitý sql dotaz. Skripty mohou během execuování postupně do globálního kontextu "nasázet" hodnoty a rovnou tím vyřešit proměnné typu PosledniOdpovedNaObdobi apod. V praxi to pak funguje tak, že jádro VaxNt se dolarové proměnné mimo rámec skriptu (v pohledech) snaží řešit z globálního kontextu. Teprve když se to nepodaří, řeší se dotazem přes dialog. Důležité je, že hodnota jednou vyřešené dialogem nad jedním stringem se neřeší dialogem opakovaně. To umožňuje psát celkem smysluplně dotazy typu:

select * from zarizeni where Motor='$(Zadej dil)' or Baterie='$(Zadej dil)' or Antena='$(Zadej dil)'
a selektovat podle jmena dilu bez ohledu na komponentu a to jedinym dialogem.

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


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