Zamykání (příklad - spisová služba)

Top  Previous  Next

Seznam témat:

řešení

Řešení

Tento příklad je určen administrátorům systému.

 

Někdy chcete zajistit, aby program zamknul proti editaci ty dokumenty, které jsou v určitém stavu.

Zadání příkladu:

Například potřebujete zajistit, aby program umožnil uživateli editovat dokument dokud je ve stavu „Rozpracovaný“, ale jakmile uživatel změní stav na „Platný“, tak potřebujete zamknout celý dialog.

V tomto příkladu si ukážeme obecný postup, jak zamknout kteroukoliv část dialogu.

 

Tyto možnosti má pouze administrátor systému.

Standardní dialog uživateli obvykle umožňuje editovat všechna pole

 

Vy ale potřebujete zajistit dokument proti nechtěným zásahům. Program umožňuje tento požadavek vyřešit tak, že vytvoříte vlastní programový kód (script), který program zavolá těsně před otevřením dialogu. V tomto kódu nejdříve zjistíte, v jakém stavu dokument je („Rozpracováno“, „Vyřízeno“, „Platná smlouva“ atd. podle toho jaké stavy jste si vytvořili v řadách a jaké používáte) a potom zavoláte funkci, které předáte seznam polí, která mají být „zadýmená“. Program potom dialog otevře tak jak potřebujete.

Postup

1.Zjistěte nejdříve názvy polí, které chcete zamykat. To lze udělat tak, že otevřete formulář dokumentu, zmáčknete kombinaci kláves Ctrl+F12 (otevře se seznam vlastností objektů), spolu se zmáčknutou klávesou Ctrl ukážete myší na pole jehož jméno hledáte – například pro pole název zjistíte, že jeho „FieldName“ = nazev. To je hledaná hodnota.

Seznam vlastností formuláře

 

Zde je soupis všech používaných hodnot ve formě PASCAL skriptu uložených do proměnné „lockflds“:

 

lockflds:= 'nazev, doklad, datum,pracovnik,ico_id, multi_id, autor, referent, tdoc_id, garant, dobaprezkm,platiod,platido, popis, stav, verze, dokumenty';

lockflds:=lockflds + ', DBGridPlusParams[1+2+4], DBGridUkoly[2], GridZmeny[2] ';

 

2.Spusťte prohlížeč  „Evidence dokumentů“ a poklepejte na plochu prohlížeče pravým tlačítkem myši. Zvolte funkci „Přizpůsobit“. Otevře se dialog přizpůsobení.

 

 

Zvolte „Skripty - OnCreateDialog“ a vložte následující kód

 

var

 id_zaznam,data_id: integer;

 Lock: Variant;

 Stav: string;

 Memo: TBrowserRtfMemo;

 lockflds:string;

begin

 // nastavení seznamu polí, který potřebuji při otevření zadýmit

 lockflds:= 'nazev, doklad, datum,pracovnik,ico_id, multi_id, autor, referent, tdoc_id, garant, dobaprezkm,platiod,platido, popis, stav, verze, dokumenty';

 // přidám ještě i některé doprovodné detaily

 lockflds:=lockflds + ', DBGridPlusParams[1+2+4], DBGridUkoly[2], GridZmeny[2] ';

 

// vše dělám je při znvutotevření dokumentu, nikoliv pro nový dokument

 if BrowserCommand = cmUpdate then begin

   id_zaznam := BrowserData.FieldByName('id_zaznam').AsInteger;

   data_id := BrowserData.FieldByName('data_id').AsInteger;

   Stav := Query('select stav from dba.gzaznamy where id_zaznam=:id_zaznam and data_id=:data_id', [id_zaznam, data_id]);

 

//když je dokument ve stavu "platný dokument" tak se zamče

   if Stav = 'Platný dokument'

      then begin DisableDialogFields(BrowserDialog, Lockflds); end

      else begin DisableDialogFields(BrowserDialog, '');       end;

 end;

 

// základní nastavení zámku po insertu

 if BrowserCommand = cmInsert

     then begin DisableDialogFields(BrowserDialog,'stav'); end;

end.

 

Kód uložte a vyzkoušejte si funkci. Program otevře každý dokument, který je ve stavu „Platný dokument“ se zamčenými položkami.

Formulář s již zamčenými položkami

 

Je zřejmé, že tímto způsobem můžete řídit zamykání a odemykání ne jen podle stavů, ale i podle přihlášeného uživatele a dalších parametrů. Databázová struktura dokonce obsahuje sloupec  „FldsLock“ typu string. Do kterého pomocí výše uvedeného skriptu můžete ukládat seznam polí, které mají být uzamčeny a potom nemusíte zamykání vázat na stav dokumentu ale na jakékoliv jiné akce (vytištění  dokumentu a podobně).

Související témata

Zamykání polí na editačním dialogu

Řízení dokumentů