Skocz do zawartości

Blokada dokumentu - jak sprawdzić w SFERA/SQL?

Polecane posty

Piszę aplikację w oparciu o rozszerzenie SFERA do Subiekt GT, która zmienia opis dokumentów. Chciałbym przed wykonaniem głównej operacji sprawdzić, czy dokumenty są zablokowane (czy, któryś z dokumentów jest aktualnie otwarty na komputerze klienckim) i ostrzec użytkownika, że trzeba zamknąć te dokumenty. Niestety nie znalazłem w dokumentacji SFERY odpowiedniej informacji jak to sprawdzić. Jedyne co mi przychodzi do głowy to otwarcie każdego dokumentu i zrobienie symulacji zapisu ale to będzie bardzo długo trwało dla długiej listy dokumentów. Chciałbym za jednym razem sprawdzić czy w danej liście dokumentów istnieje jakiś, który ma blokadę (czyli ktoś aktualnie ma go otwartego w programie Subiekt GT).
Sprawdzałem też bazę danych i tabelę ins_blokada ale tam jak pojawiają się wpisy związane z danym dokumentem to nie znikają gdy dokument się zamknie (odblokuje). Nie wiem jak interpretować wpisy z tej bazy.

Przykładowo wywołuje takie zapytanie:

select * from ins_blokada where obid = 8213373 and obtype = 11

gdzie 8213373 to dok_id mojego dokumentu aktualnie otwartego, dostaje taki wynik:

obid    obextra    obtype    workstation    username    locktime    counter
8213373    0    11    MAMUT-PC    Mamut Maniek    2024-03-05 09:52:04.037    4

a jak zamknę ten dokument to ten wpis nie znika tylko zmienia się counter z 4 na 3

 

no tylko to chyba nie po tym się sprawdza blokadę? po counter bo dla innych dokumentów te wartości są inne np. 1

 

Proszę o jakieś wskazówki i z góry dziękuję.

Link to postu
29 minut temu, Mamut Maniek napisał:

Niestety nie znalazłem w dokumentacji SFERY odpowiedniej informacji jak to sprawdzić.

29 minut temu, Mamut Maniek napisał:

Proszę o jakieś wskazówki i z góry dziękuję.

Proszę korzystać ze Sfery i pomocy do niej, niektóre tematy pomocy powinny zostać przeczytane w całości przed rozpoczęciem korzystania ze Sfery, jak na przykład "Pierwsze kroki->FAQ", który odpowiada na Pana pytanie:

 

Cytat

 

FAQ

W tym dokumencie prezentujemy odpowiedzi na najczęściej zadawane pytania dotyczące Sfery. Znajdziecie tu Państwo także rozwiązania niektórych problemów związanych ze Sferą dla systemu InsERT GT.

 

 

Cytat

 

Blokowanie obiektów

Pytanie
Czy zmiana obiektów za pomocą Sfery powoduje ich zablokowanie?
Odpowiedź
W Sferze istnieje mechanizm blokowania obiektu do edycji w czasie edytowania go za pomocą Sfery. Blokada jest otwierana w momencie jakiejkolwiek zmiany obiektu (zmiany któregokolwiek z atrybutów, bądź wywołanie którejkolwiek metody). Polega to na tym, że podczas ustawiania jakiejkolwiek właściwości lub wykonywania metody, obiekt jest blokowany do edycji dla aplikacji systemu GT i innych aplikacji korzystających ze Sfery. Oczywiście jest to sygnalizowane wyjątkiem:

INS_E_CANNOTLOCKOBJECT (0x80040F19).

 

Jak widać nie trzeba symulować zapisu dokumentu, aby założyć blokadę i sprawdzić, czy się uda.

Link to postu
19 minut temu, Daniel Kozłowski napisał:

Proszę korzystać ze Sfery i pomocy do niej, niektóre tematy pomocy powinny zostać przeczytane w całości przed rozpoczęciem korzystania ze Sfery, jak na przykład "Pierwsze kroki->FAQ", który odpowiada na Pana pytanie:

Korzystam ze Sfery i pomocy do niej cały czas. Też użyłem opcji szukaj i trafiłem na ten wpis z FAQ ale to praktycznie ta sama analogia do symulacji zapisu czyli obsługa wyjątków po otwarciu dokumentu i próbie zapisu a tutaj nie o to chodzi.

Chodzi o rozpoznanie blokady przed otwarciem/edycją dokumentu dla np. 1000 dokumentów zbiorczo w sposób szybki (np. przez odczytanie odpowiedniego pola w bazie danych serwera SQL)

 

Link to postu
11 minut temu, Mamut Maniek napisał:

Korzystam ze Sfery i pomocy do niej cały czas. Też użyłem opcji szukaj i trafiłem na ten wpis z FAQ ale to praktycznie ta sama analogia do symulacji zapisu czyli obsługa wyjątków po otwarciu dokumentu i próbie zapisu

Analogia tak, ale zupełnie inna wydajność.

 

12 minut temu, Mamut Maniek napisał:

a tutaj nie o to chodzi.

Chodzi o rozpoznanie blokady przed otwarciem/edycją dokumentu dla np. 1000 dokumentów zbiorczo w sposób szybki (np. przez odczytanie odpowiedniego pola w bazie danych serwera SQL)

W mojej ocenie to bezsensowna strata czasu, nawet jeśli wykona Pan szybkie sprawdzenie, to w trakcie przetwarzania dokumentów i tak dokumenty mogą zostać zablokowane i/lub zmienione... Jeśli jednak chce Pan zrobić po swojemu to proszę poznać bliżej działanie programu i mechanizmów serwera SQL, które wykorzystuje, tutaj nic nie jest tajemnicą, potrzeba tylko odpowiednią ilość czasu, aby to zrobić, ja nie miałem takiej potrzeby.

 

Co mogę dodać...

Godzinę temu, Mamut Maniek napisał:

no tylko to chyba nie po tym się sprawdza blokadę?

Jak pisałem wyżej i wcześniej, działanie programu nie jest tajemnicą, można zobaczyć jakie operacje są wykonywane na bazie danych, widać, że program sprawdza blokadę poprzez próbę jej założenia, jak też widać w ins_blokada pozostają wpisy niepowiązane z otwartymi obiektami, więc samo sprawdzenie zawartości tabeli ins_blokada nie wystarczy.

Link to postu
11 minut temu, Daniel Kozłowski napisał:

Analogia tak, ale zupełnie inna wydajność.

Nie widzę różnicy. Jedno i drugie zakłada blokadę przy edycji i trzeba sprawdzić wyjątek.

 

12 minut temu, Daniel Kozłowski napisał:

Jeśli jednak chce Pan zrobić po swojemu to proszę poznać bliżej działanie programu i mechanizmów serwera SQL, które wykorzystuje, tutaj nic nie jest tajemnicą, potrzeba tylko odpowiednią ilość czasu, aby to zrobić, ja nie miałem takiej potrzeby.

No właśnie na tyle na ile potrafię to przybliżyłem sobie działanie programu sprawdzając po kolei każde zapytanie profilerem.

 

17 minut temu, Daniel Kozłowski napisał:

Jak pisałem wyżej i wcześniej, działanie programu nie jest tajemnicą, można zobaczyć jakie operacje są wykonywane na bazie danych, widać, że program sprawdza blokadę poprzez próbę jej założenia, jak też widać w ins_blokada pozostają wpisy niepowiązane z otwartymi obiektami, więc samo sprawdzenie zawartości tabeli ins_blokada nie wystarczy.

No tak to też już wiem. Napisałem to wcześniej.

 

Na forum napisałem z myślą, że ktoś temat rozgryzł i wie jak działa dokładnie mechanizm nakładania blokady na dokumenty i sprawdzanie tej blokady czy aktualnie jest czy jej nie ma. Komentarze typu "sprawdź sobie sam" nic nie wnoszą do wątku.

Link to postu
9 minut temu, Mamut Maniek napisał:
31 minut temu, Daniel Kozłowski napisał:

Analogia tak, ale zupełnie inna wydajność.

Nie widzę różnicy. Jedno i drugie zakłada blokadę przy edycji i trzeba sprawdzić wyjątek.

Co według Pana robi symulacja zapisu dokumentu ?

 

10 minut temu, Mamut Maniek napisał:
32 minuty temu, Daniel Kozłowski napisał:

Jeśli jednak chce Pan zrobić po swojemu to proszę poznać bliżej działanie programu i mechanizmów serwera SQL, które wykorzystuje, tutaj nic nie jest tajemnicą, potrzeba tylko odpowiednią ilość czasu, aby to zrobić, ja nie miałem takiej potrzeby.

No właśnie na tyle na ile potrafię to przybliżyłem sobie działanie programu sprawdzając po kolei każde zapytanie profilerem.

Jak już sugerowałem - proszę pogłębić te umiejętności, to kwestia chęci i poświęconego czasu.

 

12 minut temu, Mamut Maniek napisał:

Na forum napisałem z myślą, że ktoś temat rozgryzł i wie jak działa dokładnie mechanizm nakładania blokady na dokumenty i sprawdzanie tej blokady czy aktualnie jest czy jej nie ma.

Przecież to wyjaśniłem i opisałem w poprzedniej odpowiedzi, nie wiem czy Pan nie przeczytał, czy nie zrozumiał mojej odpowiedzi, czy oczekuje czegoś innego, gdyż się Pan do niej nie odniósł.

 

15 minut temu, Mamut Maniek napisał:

Komentarze typu "sprawdź sobie sam" nic nie wnoszą do wątku.

Poprosił Pan o wskazówki, udzieliłem ich, nie spróbował Pan ich zastosować w praktyce... Jeśli Pan tego nie zauważył i według Pana to nic nie wnosi to przepraszam, nie mam potrzeby, aby to próbować zmienić.

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