HIS Server je vlastnosť, ktorá umožňuje rozdelenie implementácie ESL skriptov aktívnych schém (PICTURE) a objektov typu Event (EVENT), otvorených na strane klienta, na dve časti. Časť, ktorá sa vykonáva na strane klienta (lokálny skript) a časť, ktorá je vykonávaná na strane servera (remote skript). Toto rozdelenie umožňuje aplikačnému programátorovi rozčleniť funkcionalitu na dva celky podľa toho, s ktorou časťou systému spolupracujú intenzívnejšie.
Je predpoklad, že skript na strane klienta bude intenzívne spolupracovať práve s užívateľským rozhraním prostredníctvom rýchleho komunikačného kanála a interakciu so serverom obmedzí na minimum. A naopak, skript na strane servera bude intenzívne spolupracovať s časťami aplikácie na strane servera a interakciu s užívateľským rozhraním obmedzí na minimum. Toto rozdelenie je v rukách aplikačného programátora.

Pre ladenie výkonu a odozvy jednotlivých akcií je určený nástroj ESL Profiler. Časti sú reprezentované dvoma ESL skriptami, ktoré sú súčasťou konfigurácie príslušného objektu. Z používateľského (aplikačného) hľadiska je táto skutočnosť vo veľkej miere transparentná a neprináša do konfigurácie systému ďalšiu neprimeranú zložitosť.

Vizuálne sú ESL skripty v editore rozdelené nasledujúcim spôsobom:

Rozdelenie ESL skriptu

L: predstavuje lokálny skript
R: predstavuje remote (vzdialený) skript

Zjednodušený dátový model schémy a eventu:

Dátový model Schéma - Event

Vysvetlivky:

Funkcionalitu lokálneho ESL skriptu (na strane klienta) zabezpečuje proces HIS (meno fyzického procesu je obyčajne odvodené od mena príslušného procesu HIP), ktorého implementácia je zapuzdrená do knižnice event.dll.

Funkcionalitu remote ESL skriptu (na strane servera) zabezpečuje virtuálny proces SEE (Script Execution Engine). Procesy SEE obsluhuje proces SES (Script Execution Server). Jeho implementácia je zapuzdrená do procesu event.exe.

Procesy HIS a SEE v súčinnosti vykonávajú požiadavky klienta, ktorý je v tomto prípade proces HIP. Za týmto účelom je medzi nimi vytvorený virtuálny komunikačný kanál, prostredníctvom ktorého komunikujú. Z pohľadu klienta nie je dôležité fyzické umiestnenie procesu (SEE). Z pohľadu vykonávania sú oba procesy samostatné a pracujú paralelne.

Nasledujúci obrázok schematicky znázorňuje jednotlivé zúčastnené komponenty.

Schéma komunikácie medzi procesmi
Proces Popis
D2000 Server Server proces systému D2000
UserWS.HIP Proces D2000 HI – konzola užívateľa
UserWS_*.HIS ESL Interpret na strane Klienta
UserWS_*.SEE ESL Interpret na strane Servera – Script Execution Engine
REMOTE.SES Remote server obsluhujúci procesy *.SEE.

Procesy HIS a SEE sú dynamické a ich mená sú odvodené od príslušného procesu HIP a doplnené náhodne generovaným číslom, ktoré zabezpečuje jednoznačnosť mena v rámci aplikácie. Proces HIP predstavuje užívateľskú konzolu, kde je otvorená schéma S.ActivePicture, ktorá využíva funkcionalitu lokálneho a vzdialeného ESL skriptu pri zaškrtnutí parametra Server Script v Parametroch schémy.

Parameter Server Script

Obrázok ďalej zobrazuje umiestnenie jednotlivých častí konfigurácie schémy, ktoré sú znázornené ako objekty.

Objekt Popis
S.ActivePicture:PICTURE Definícia schémy potrebná pre vizualizáciu.
S.ActivePicture:ESLDefinition:1  Lokálny ESL skript.
S.ActivePicture:ESLDefinition:2  Vzdialený ESL skript.

Rozloženie jednotlivých procesov je obyčajne nasledujúce:

Prepojenia medzi jednotlivými procesmi predstavujú komunikačné kanále. V závislosti od "vzdialenosti" procesov je použitá komunikácia prostredníctvom Shared Memory alebo TCP/IP. Shared Memory je rýchly a TCP/IP naopak pomalý komunikačný kanál (táto skutočnosť sa významne prejavuje pri TCP/IP spojení v rozľahlých sieťach, kde je prenosová rýchlosť obyčajne dostatočná, ale naopak latencia je vysoká, rádovo niekoľko milisekúnd). Slúžia vo všeobecnosti na prenos správ medzi procesmi, ktoré zabezpečujú funkcionalitu schémy ako celku podľa jej konfigurácie.

Správy je možné rozdeliť do dvoch kategórií:

  1. Správy pre riadenie vizualizácie
    Vznikajú použitím ESL funkcií, typicky %HI_Get*, …
    Podľa umiestnenia príkazov, ktoré ich iniciujú, sú prenášané komunikačnými kanálmi:
    1. HIS <-> HIP
      Rýchly komunikačný kanál.
    2. SEE <-> D2000 Server <-> HIP
      Latentný komunikačný kanál.
  2. Správy pre interakciu so systémom
    V tomto prípade systém predstavuje proces D2000 Server, ktorý vystupuje ako "router" pre vybavenie požiadaviek ESL skriptu, ktoré sú ďalej spracovávané jednotlivými procesmi podľa ich charakteru. Vznikajú použitím ESL akcií, typicky DB_READ, DBS_READ, SQL_*, GETARCHDATA, GETARCHARR, …
    Podľa umiestnenia príkazov, ktoré ich iniciujú, sú prenášané komunikačnými kanálmi:
    1. SEE <-> D2000 Server
      Rýchly komunikačný kanál.
    2. HIS <-> D2000 Server
      Latentný komunikačný kanál.

Vzhľadom na existenciu synchrónnych akcií alebo funkcií v ESL skripte je latencia mimoriadne nepríjemná, lebo významne predlžuje interaktivitu aplikácie. Tomuto sa dá významne predísť vhodným rozmiestnením jednotlivých častí ESL skriptu na stranu klienta (lokálny ESL skript) alebo servera (vzdialený ESL skript).

Prípadné ladenie výkonu je možné prostredníctvom nástroja ESL Profiler. Ten umožňuje podrobne analyzovať vykonávanie jednotlivých akcií ESL skriptu z pohľadu rýchlosti. Pre každú akciu poskytne informáciu o čase jej vykonávania. V prípade, že ide o synchrónnu akciu (dokončenie vykonania akcie je podmienené potvrdením zo strany vykonávateľa akcie) je informácia rozšírená o čas, ktorý akcia strávila pasívnym čakaním na potvrdenie.

Napríklad celkový čas čítania z databázy akciou DB_READ je daný ako súčet časov.

  1. Vyhodnotenie parametrov a odoslanie požiadavky pre čítanie z databázy.
  2. Čakanie na vykonanie požiadavky.
  3. Príjem odpovede a zverejnenie načítaných dát.

Bod 2 predstavuje z pohľadu vykonávania akcie DB_READ pasívne čakanie, ktorého čas trvania ovplyvňuje latencia komunikačnej cesty (samozrejme aj čas vykonania čítania z databázy).

Podobné princípy platia aj pre objekt typu Event otvorený na strane klienta (prostredníctvom akcie OPENEVENT). Rozdelenie ESL skriptov na lokálny a vzdialený je možné nastavením konfiguračného parametra "Typ eventu" na hodnotu "Klient a server event".

Typ eventu

Volanie RPC procedúr medzi lokálnym a remote ESL skriptom je zabezpečené volaním akcie CALL. Ak sa nachádzajú v skriptoch (lokálny a remote) duplicitné deklarácie procedúr, kompilátor vyhlási chybu ("Duplicitná deklarácia procedúry") a nedovolí takúto konfiguráciu ESL skriptov uložiť (viď Rozšírenia ESL pre HIS Server).

Obsluhu všetkých udalostí (okrem definovaných výnimiek) je možné definovať v oboch skriptoch. Pri vzniku príslušnej udalosti systém zabezpečí volanie oboch obslúh. Výnimkou sa rozumie synchrónna udalosť (skript čaká na návratovú hodnotu). Ak sú takéto obsluhy udalostí použité v oboch skriptoch, kompilátor takúto konfiguráciu vyhodnotí s chybou ("Duplicitná deklarácia entry") a nedovolí takúto konfiguráciu ESL skriptov uložiť (viď Rozšírenia ESL pre HIS Server).

Pre zachovanie konfigurácie Remote ESL skriptu pri zmene typu eventu z "Klient a server event" na iný, je implementovaná vlastnosť prekopírovania zakomentovaného Remote skriptu do Lokálneho ESL skriptu. Tým je zabezpečené zachovanie konfigurácie.
Analogicky to platí aj pri grafických schémach po odškrtnutí parametra "Server Script", ktorý sa nachádza v dialógovom okne, ktoré sa otvorí po výbere položky Parametre schémy z ponuky Nastavenia v D2000 GrEditor.

D2000 SES Proces
Rozšírenia ESL pre HIS Server
Ladenie skriptov