Zamykání (příklad - spisová služba) |
Top Previous Next |
Seznam témat: 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
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] ';
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 |