Przejdź do treści

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);
}