Inwentaryzacja Świata E
W przypadku wielu operacji na dokumentach jest wykorzystywany Świat E, każdy programista w firmie INT na pewno słyszał tą magiczną nazwę, ale nie do końca wie co się pod nią kryje i jak to właściwie działa, także postaram się trochę o tym opowiedzieć i przedstawić konkretny przykład zastosowania.
Zacznijmy od rysunku:
Jak widać z powyższego szkicu Świat E jest tymczasowym środowiskiem pracy, przypisanym do konkretnego użytkownika.
- Użytkownik otwiera dokument w celu edycji -> Następuje sprawdzenie czy dokument nie jest blokowany (otwarty) przez innego użytkownika, jeśli nie to system nakłada blokadę na dokument (Wpis do tabeli locks), a następnie kopiuje dokument do Świata E z GUID'em danego użytkownika (Tylko on ma dostęp do tego dokumentu w Świecie E). Jeśli dokument byłby zablokowany, to użytkownik otrzyma komunikat z informacja kto edytuje dany dokument i nie będzie mógł kontynuować
- Wszystkie zmiany w dokumencie wykonywane przez użytkownika są zapisywane w kopii utworzonej w Świecie E. Oryginalny dokument pozostaje nie naruszony, aż do momentu, gdy użytkownik nie kliknie opcji zapisz i wyjdź, wówczas oryginalny dokument zostaje zastąpiony zmienioną wersją ze Świata E. Po udanej zmianie dokument jest odblokowywany, a kopia ze Świata E jest usuwana. Gdy użytkownik NIE zdecyduję się na zapis zmian (kliknie Anuluj), następuje wyczyszczenie Świata E i odblokowanie dokumentu.
Korzystanie ze Świata E na przykładzie tworzenia/edycji zamówienia
Sprawdzenie czy dokument nie jest zablokowany
CALL _ng_e_rec_init('Check.before.handle', _FROM, _Key, _UserGUID, , );
CALL _ng_e_rec_msg_select(, _Key, 'handle.init', );
gdzie:
_FROM = context (np. ZM - zamowenia, OP - operacje), _Key - GUID dokumentu, _UserGUID - GUID użytkownika
Jeśli dokument nie jest przez nikogo blokowany nie otrzymamy żadnego rekordu, natomiast w przypadku istnienia blokadu otrzymamy rekord zwrotny z komunikatem, typem komunikatu oraz efektem.
Np.
Inicjacja Świata E
Kontekst = 'ZM'
CALL zmng_E_init('EDIT', _Key, _UserGUID, , );
CALL zmng_E_Run('before.run', _Key, , , );
CALL zmng_E_Run(, _Key, , , );
CALL zmng_E_Run('after.run', _Key, , , );\
Kontekst = 'OP'
CALL opng_E_init('EDIT', _Key, _Param_A, , );
CALL opng_E_Run('before.run', _Key, , , );
CALL opng_E_Run(, _Key, , , );
CALL opng_E_Run('after.run', _Key, , , );
gdzie:
_Key - GUID dokumentu, _UserGUID - GUID użytkownika