Współbieżna edycja dokumentów¶
Blokowanie edycji innym użytkownikom¶
Aby zablokować możliwość jednoczesnej edycji rekordu przez 2 użytkowników, należy podziedziczyć metode GetLockId().
W metodzie GetLockId należy zwracać unikalny dla danego rekordu ID.
public string GetLockId()
{
return $"WFACTIVITY{REF}";
}
Gdy metoda GetLockId zwraca niepusty identyfikator to sprawia, że blokada będzie automatycznie zakładana przy edycji i tworzeniu nowego rekordu, a zdejmowana przy zapisie.
GUI.SetLock:(NewRecord, EditRecord, DeleteRecord)
GUI.RemoveLock:(PostRecord, CancelRecord, DeleteRecord)
Jeżeli potrzebujemy założyć blokadę ręcznie należy do tego użyć metod GUI.SetLock() i GUI.RemoveLock().SetLock i RemoveLock przyjmują jako argument id blokady. Jako id blokady najlepiej jest przekazać wynik nadpisanej metody GetLockId().
Metoda SetLock i RemoveLock wywołują procedury SYS_SETLOCK i SYS_REMOVELOCK które odpowiadnio dodają bądź usuwają rekord z tabeli SYS_LOCKS. Gdy w tabeli SYS_LOCKS jest już blokada na konkretne id i inny użytkownik wywołuje SetLock na to samo id, wyświetli się komunikat o wyjątku i edycja będzie niemożliwa.
Przykład
Blokujemy edycje po otworzeniu okna z wyborem folderu.
public void MoveToFolder()
{
GUI.SetLock(this.GetLockId());
WFFOLDER.SelectNewFolderForDocument(_wfactivity.AsInteger,_folder.AsInteger);
}
Odblokowujemy po zamknięciu formy.
public void CloseForm(bool queryonly = true)
{
GUI.RemoveLock(GetLockId());
base.CloseForm(queryonly);
}