Skocz do zawartości

[Sfera] Sprawdzenie zablokowania dokumentu


Zobacz rozwiązanie Rozwiązane przez Wojciech Szopiński,

Polecane posty

Wiem, że mogę Sobie w bazie danych sprawdzić, czy na dany dokument nie ma blokady edycji, ale może jest też taka możliwość Sferycznie? Przykładowo, edytuję dokument i zanim zapiszę, chciałbym sprawdzić, czy przypadkiem jakiś delikwent nie otworzył go Sobie w Subiekcie i wtedy ja ewentualnie odpuszczę zapisywanie.

Link to postu
  • Rozwiązanie

Można oczywiście wyłapywać wyjątki pojawiające się przy próbie edycji zablokowanego obiektu:

                    using (IDokumentSprzedazy dokumentSprzedazy = dokumentySprzedazy.Znajdz(dokument))
                    {
                        try
                        {
                            dokumentSprzedazy.Dane.Uwagi = "zmieniam uwagi!!!";
                        }
                        catch (InsERT.Mox.Locking.AppLockNotAcquiredException e)
                        {
                            Console.WriteLine($"Dokument {dokumentSprzedazy.Dane.NumerWewnetrzny.PelnaSygnatura} " +
                                $"zablokowany na stacji {e.OwningWorkstationName} " +
                                $"przez użytkownika o Id: {e.OwningUserId}");
                        }
                    }

Ale we wszystkich obiektach biznesowych istnieje też metoda Zablokuj(), która nakłada blokadę aplikacyjną na dany obiekt i jeśli się to nie uda (czyli obiekt został zablokowany na innym stanowisku) - zwraca false:

                    using (IDokumentSprzedazy dokumentSprzedazy = dokumentySprzedazy.Znajdz(dokument))
                    {
                        if (dokumentSprzedazy.Zablokuj())
                        {
                            Console.WriteLine("Zablokowano - możemy działać.");
                        }
                        else
                        {
                            Console.WriteLine("Nie zablokowano - trzeba poczekać.");
                        }
                    }

 

Link to postu
3 godziny temu, Wojciech Szopiński napisał:

Można oczywiście wyłapywać wyjątki pojawiające się przy próbie edycji zablokowanego obiektu

No to był plan B :P

3 godziny temu, Wojciech Szopiński napisał:

Ale we wszystkich obiektach biznesowych istnieje też metoda Zablokuj()

Czyli tak, no to ok, zdecydowanie lepsza droga. Czyli zablokowanie powinienem zweryfikować zaraz po otwarciu obiektu do edycji, czy ewentualnie mogę to zrobić przed samym wywołaniem metody Zapisz()? Domyślam się, że pewnie nie, bo wywali błąd po drodze.

 

Generalnie w dokumentacji, widziałem jeszcze znacznik Zablokowany, do DokumentDane, do którego nie udało mi się dotrzeć, i myślałem, że tedy droga będzie szła, tylko gdzieś jest ukryty ;)

Link to postu
47 minut temu, Radomił Ząbik napisał:

No to był plan B :P

Wbrew pozorom ma swoje zalety - dzięki takiemu podejściu można z wyjątku wyczytać kto i na jakim stanowisku dany obiekt zablokował więc można przekazać użytkownikowi istotne informacje. Sami tak robimy w nexo dzięki czemu nexo zamiast informować o tym, że "Nie można zablokować podanego zasobu" pokazuje informację o tym, że "Obiekt został zablokowany na stacji X przez operatora Y".

49 minut temu, Radomił Ząbik napisał:

Czyli zablokowanie powinienem zweryfikować zaraz po otwarciu obiektu do edycji, czy ewentualnie mogę to zrobić przed samym wywołaniem metody Zapisz()? Domyślam się, że pewnie nie, bo wywali błąd po drodze.

Wywołanie Zablokuj() musi wystąpić przed pierwszą edycją czegokolwiek na obiekcie gdyż modyfikacja jakiegokolwiek pola będzie próbowała tę blokadę nałożyć co skończy się wyjątkiem.

50 minut temu, Radomił Ząbik napisał:

Generalnie w dokumentacji, widziałem jeszcze znacznik Zablokowany, do DokumentDane, do którego nie udało mi się dotrzeć

Cytat z dokumentacji:

Cytat

DokumentDane Class

Dokument z biblioteki dokumentów.

Pole Zablokowany tej encji określa, że dokument jest zablokowany przed edycją. To w ogóle nie ma związku z blokadami aplikacyjnymi.

  • Lubię to 1
Link to postu
×
×
  • Dodaj nową pozycję...