světNotes.cz

Zamykání dokumentů v Lotus Notes
OpenSource
20.11.2003 - David Bulejčík

Většina firem však ještě pořád používá R5 a to je i náš případ. Nedávno jsem dostal za úkol vyřešit zamykání dokumentu právě pro verzi R5. První co mě napadlo, bylo podívat se na Internet a najít něco pro inspiraci. K mému velkému překvapení jsem ale našel jen řešení, za která bych sám nedal ani groš (zamykání pomocí profilového dokumentu apod.). Proto jsem se rozhodl zveřejnit algoritmus, který jsem vytvořil, jako alternativu k tomu, co jsem našel.

Základem mého řešení je databáze zámků. Je to databáze, do které si budeme vytvářet dokumenty - tzv. zámky. Představte si, že máte aplikační databázi, která obsahuje dokument. Zámek pak bude dokument v databázi zámků se stejným universalid jako dokument v aplikační databázi. Otázkou však je, jak zabránit vzniku replikačních konfliktů u dokumentu zámku. A tady by se hodilo úsloví - v jednoduchosti je krása ..:). Necháme to jednoduše na serveru.

Základním indexem dokumentu v každé databázi je právě universalid - alespoň to tak vypadá. Proto nelze v jedné databázi vytvořit více dokumentů se stejným unidem. A z toho budeme vycházet. Dále je pro nás důležité, aby si algoritmus udržoval konstantní výkon. Z toho důvodu po přepnutí dokumentu do režimu čtení zámek jednoduše smažeme. To znamená, že v okamžiku přepínání dokumentu z režimu čtení vytváříme a ukládáme dokument zámku. Pokud však před námi někdo přepnul dokument do editačního režimu - vytvořil dokument zámku - náš dokument se neuloží, neboť má stejný universalid a algoritmus nám vrátí chybu.

Samozřejmě také musíme pamatovat na situaci, že uživateli může v průběhu editace dokumentu "kleknout" počítač. Stává se to výjimečně, ale tento stav musíme ošetřit. K tomu nám poslouží třída notestimer. Po přepnutí dokumentu do režimu editace budeme v určeném intervalu (já jsem si dal dvě minuty) ukládat dokumenty zámků. Do databáze zámků si pak umístíme agenta, který se bude spouštět každých pět minut. Pokud tam nalezne dokumenty needitované déle než tři minuty, smaže je.

Tohle všechno jsem vložil do třídy locker, ve které jsem zveřejnil metody, aby bylo možné ji implementovat do stávajících formulářů. V příloze najdete databáze zámku (lockersdb.nsf) a příklad implementace na formulář aplikační databáze (appdb.nsf). A hurá na zamykání... :)

lockersdb.zip appdb.zip