10.05.2023 07:53

Co se děje ? Jak se pracuje v jazyce vzorců ? (2)
21.04.2023 14:15

Co se starou dokumentací k R3, R4, ...?
05.04.2023 14:41

Událost, při neexistenci přílohy. (2)
05.04.2023 11:51

Jak zjistit vložení přílohy. (4)
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

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: