História činnosti obsluhy

Dodatočná poznámka k príspevku:
Tento príspevok som hodil na web 13. 9. 99. Až po vyše mesiaci som si všimol, aké bludy v ňom píšem. Nižšie totiž tvrdím, že systém CP nemá prostriedok (virtuálny prístroj), ktorý by mohol slúžiť na sledovanie činnosti obsluhy a že si treba vypomôcť prístrojom ARCHIVER. To samozrejme nie je pravda - pre tento účel je stavaný prístroj JOURNAL. Nedokážem si vysvetliť, ako som k takému hrubému omylu prišiel - asi som pri hladaní spôsobu sledovania histórie prístroj JOURNAL totálne prehliadol (ej, ale sa hambím...). Ešte že som si to všimol sám a nemusel som byť na to upozornený (to by bol trapas...). Ak som niektorých čitateľov uviedol do rovnakého omylu, akého som sa dopustil sám, ospravedlňujem sa. Nasledujúci príspevok teda stráca vlastne zmysel, ale ponechávam ho v pôvodnom tvare ako dôkaz svojej omylnosti a ako ukážku spôsobu sledovania histórie bez prístroja JOURNAL :-)

Pokiaľ vyvíjate aplikácie v CP (CW) na zakázku (čiže nie pre vlastnú potrebu), je niekedy dobré vedieť, aký sled úkonov prevádza obsluha - mám na mysli detailnú históriu, čiže aký ovladací prvok a kedy bol aktivovaný, prípadne s akou hodnotou a pod. Systém CP ale prostriedok pre takýto účel neposkytuje.

Môžme si však zobrať na pomoc prístroj archiver, ktorý je i pre tento účel velice vhodný. Riešenie budem demonštrovať na príklade:
Máme aplikáciu, ktorá obsahuje 2 ovládacie prvky - prístroj "switch", ktorý nám bude niečo zopínať a vypínať a prístroj "control", ktorý nám bude nastavovať hodnotu nejakej reálnej premennej. Prístroj "archiver" bude archivovať dátum, čas a popis udalosti - čiže zopnutie/vypnutie prístroja "switch" a zmenu hodnoty premennej prístrojom "control".

Prístroj "archiver" nesmie byť časovaný, pretože ho budeme aktivovať len v prípade vzniku sledovaných udalostí. Mohol by vyzerať nasledovne (nastavené zakladanie nového súboru pre každý deň):

archiver history;
  owner = panel_2;
  position = 10, 15, 174, 28;
  file_type = relative;
  file_length = day;
  file_name = 'HIS';
  item
    name = 'POPIS';
    type = character;
    length = 40;
    dec_places = 0;
    expression = history_popis;
  end_item;
end_archiver;

 

Ak výstupom prvého sledovaného prístroja "switch" je stav boolean premennej "premenna1", potom použitie tohoto prístroja a jeho výstup zaarchivujeme programom "udalost_1", pričom tento program pridáme do "receivers" tohoto prístroja:

program udalost_1;
  begin
    if premenna1 then
      history_popis='Ovladač 1 - ON';
    else
      history_popis='Ovladač 1 - OFF';
    end;
    archiver.DoArchive();
  end;
end_program;

 

Ak výstupom druhého sledovaného prístroja "control" je stav reálnej premennej "premenna2", potom použitie tohoto prístroja a hodnotu jeho výstupu zaarchivujeme programom "udalost_2", pričom tento program pridáme do "receivers" tohoto prístroja:

program udalost_2;
  begin
    history_popis=concat(('Ovladač 2 - Nová hodnota: '), str(premenna2,10));
    archiver.DoArchive();
  end;
end_program;

 

Takýmto spôsobom môžme počas behu aplikácie archivovať históriu použitia akéhokoľvek ovládacieho prvku aplikácie (a nielen ovládacieho).
Archivácia histórie obsluhy môže byť vyžadovaná buď z technologických dôvodov, alebo môže byť užitočná len pre vás, ako autora systému. Verte, že fantázia obsluhy (i zaškolenej) je nekonečná a má snahu (tá obsluha) správať sa i neštandardne - čiže vyvolať nejaký neošetrený stav (nikto nie je dokonalý - viď. MajkroŠrot), ktorý vedie napr. k nekorektnému správaniu sa aplikácie. Pri odhalení takého stavu vám môže napomôcť práve archivovaná história obsluhy.

Ako to celé funguje (a či to vôbec funguje) sa môžte presvedčiť, ak si stiahnete demo aplikáciu.

download:
his-demo.zip - 2074 bytov