21.03.2023 11:14

Rámec nebo okno ? (10)
22.02.2023 10:14

Vylepseni designera 9.01 (3)
02.02.2023 20:27

Jak resit casove narocneho agent na frontendu (13)
25.01.2023 19:15

Mizející nátev template (2)
19.01.2023 15:58

profile
09.01.2023 13:18

Více kategorií klíčů (1)
28.11.2022 12:53

Příliš mnoho textu ve vzorcích pohledu (11)
03.11.2022 15:51

Zamykání dokumentů (zabránění editace jednoho dokumentu více uživatelům) bylo a je předmětem mnoha diskusí v programátorském světě lotusáků. Server ve verzi R6 má integrované zamykání, ale ne vždy je toto řešení dostatečné. Navíc obsahuje drobné chyby.
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í... :)
Autor: David Bulejčík
Datum: 20.11.2003
Sdílet článek Seznam komentářů
Související články: