StudioSystem

Rewizja zmian danych (audyt) - skorowidz RVZN

Mechanizm automatycznego audytu: skorowidz RVZN wskazuje, które tabele są śledzone, a każda zmiana pola trafia do tabeli _revision razem ze starą i nową wartością, datą i loginem.

studiosystem.softwarestudio.com.pl/transakcje/
Menu modułu Administrator w StudioSystem z pozycją Skorowidze
Menu modułu Administrator w StudioSystem z pozycją Skorowidze
W skrócie

Rewizja zmian danych to mechanizm audytowy platformy StudioSystem, który dla tabel oznaczonych w skorowidzu RVZN automatycznie zapisuje historię zmian pól w tabeli _revision - ze starą i nową wartością, datą zapisu oraz loginem osoby, która dokonała zmiany. Uruchamia się przy każdej edycji przez standardowe transakcje takie jak j_insert_update.

Jak działa rewizja zmian

Zmiany danych w StudioSystem najczęściej zapisywane są przez uniwersalne transakcje edycji j_insert_update i h_insert_update, wspólne dla wielu formularzy platformy. Rewizja nie jest osobnym modułem obok nich - jest dodatkowym krokiem wykonywanym w tle w momencie zapisu, o ile tabela docelowa została do tego wyznaczona.

Przy każdym zapisie program sprawdza, czy edytowana tabela znajduje się na liście tabel podlegających audytowi. Jeśli tak, uruchamiana jest automatyczna funkcja zapisująca historię zmian - bez udziału programisty i bez modyfikacji formularza, z którego korzysta użytkownik. Włączenie audytu dla kolejnej tabeli sprowadza się więc do zmiany konfiguracji, a nie do zmiany kodu.

To rozróżnienie ma znaczenie praktyczne przy wdrożeniu. Zespół wdrożeniowy nie musi przewidywać z góry, które tabele w przyszłości będą wymagały śledzenia zmian - decyzję można podjąć później, w dowolnym momencie eksploatacji systemu, bez ryzyka związanego z modyfikacją działającego kodu formularzy. Jedynym warunkiem jest to, aby zmiana danych przechodziła przez standardową transakcję edycji, a nie na przykład przez bezpośredni import danych z pominięciem warstwy aplikacji.

Konfiguracja - skorowidz RVZN

Decyzję o tym, które tabele mają być śledzone, podejmuje się w skorowidzu RVZN, dostępnym z poziomu pozycji Skorowidze w module administratora. Dodanie aktywnej pozycji ze wskazaniem nazwy tabeli włącza dla niej rewizję - bez dodatkowych ustawień po stronie samej tabeli.

Przykładowo, aby kontrolować zmiany zapisywane w tabeli KNKON, przechowującej kartoteki kontrahentów, wystarczy dodać w skorowidzu RVZN definicję wskazującą tę tabelę. Od tego momentu każda zmiana wprowadzona przez transakcję insert_update w rekordach KNKON zostanie automatycznie odnotowana.

Wyłączenie audytu przebiega równie prosto - dezaktywacja pozycji w skorowidzu RVZN zatrzymuje zapisywanie nowych wpisów, nie usuwając przy tym historii już zgromadzonej w tabeli _revision.

StudioSystem

Konfiguracja bez zmian w kodzie

Włączenie audytu dla kolejnej tabeli to jedna pozycja w skorowidzu, nie zmiana w formularzu ani w bazie danych.

Struktura tabeli _revision

Każda odnotowana zmiana pola trafia do tabeli _revision jako osobny wiersz. Rewizja zapisuje komplet informacji potrzebnych do odtworzenia, co się zmieniło, kto to zrobił i kiedy:

KolumnaZnaczenie
NRIDREVUnikalny identyfikator rewizji
TABELANazwa tabeli bazy SQL, która była poddawana rewizji
REFNOIdentyfikator wiersza (rekordu) w tabeli, wskazuje edytowaną pozycję
REVCOLUMNNazwa kolumny bazy danych, która była zmieniana
OVALUEDotychczasowa (stara) wartość - przed zmianą
NVALUENowa wartość zapisana po zmianie
KIEDYData i czas wykonania zapisu zmian
LOGINLogin użytkownika, który dokonał zmiany
BAZANazwa połączenia do bazy, w której wykonano zapis
CAPTIONEtykieta pola formularza powiązana ze zmienioną kolumną

Warto zwrócić uwagę na ziarnistość zapisu: rewizja nie kopiuje całego rekordu przed i po zmianie, tylko odnotowuje pojedyncze zmienione pole. Przy edycji kilku pól naraz w tabeli _revision pojawi się tyle wierszy, ile pól zostało faktycznie zmienionych - wszystkie ze wspólnym numerem NRIDREV, co pozwala je później zgrupować jako jedną operację edycji.

Przykład - zmiana danych kontrahenta

Załóżmy, że w skorowidzu RVZN aktywowano audyt dla tabeli KNKON. Operator otwiera kartotekę kontrahenta i zmienia dwa pola: nazwę pełną na KLIENT B2B oraz NIP na 7791010701, po czym zapisuje formularz przyciskiem ZAPISZ.

Program sprawdza skorowidz, stwierdza, że tabela KNKON podlega rewizji, i zapisuje w tabeli _revision historię wyłącznie tych dwóch pól, które faktycznie się zmieniły:

REVCOLUMNOVALUENVALUEKIEDYCAPTION
NAZWAKLIENT B1KLIENT B2B2016-07-01 13:25:41Nazwa pełna
NIP465465656477910107012016-07-01 13:25:41NIP

Oba wiersze dzielą ten sam numer rewizji NRIDREV i ten sam REFNO, wskazujący edytowany rekord kontrahenta. Zestawienie takie jak powyższe wystarczy do udzielenia odpowiedzi na klasyczne pytanie kontrolne: kto, kiedy i na jaką wartość zmienił dany zapis.

Rewizja przy wielu bazach danych

Wdrożenia korzystające z więcej niż jednej bazy danych SQL Server - na przykład osobnej bazy dla danych niestandardowych klienta - też są objęte mechanizmem. Służy do tego kolumna BAZA, zapisująca nazwę połączenia, z którego pochodziła zmiana: domyślnie SoftwareStudioConnectionString, a w razie potrzeby dodatkowe CustomConnectionString.

Dzięki temu jedna wspólna tabela _revision może gromadzić historię zmian z kilku źródeł danych jednocześnie, bez ryzyka pomylenia, z której bazy pochodzi dany wpis - kolumna BAZA jednoznacznie to rozstrzyga przy każdym zapytaniu raportowym.

Praktyczne zastosowania

Najczęstszym powodem włączania rewizji jest potrzeba wyjaśnienia spornej zmiany danych - na przykład rozbieżności w danych kontrahenta, które ktoś zauważa dopiero tygodnie po fakcie. Zamiast pytać po kolei każdego, kto mógł mieć dostęp do formularza, wystarczy jedno zapytanie do tabeli _revision filtrujące po TABELA i REFNO.

  • Kartoteki podstawowe - kontrahenci, towary i inne słowniki, gdzie błędna zmiana wpływa na wiele powiązanych dokumentów.
  • Dane cennikowe - śledzenie, kto i kiedy zmienił warunki handlowe zapisane w bazie.
  • Zgodność i kontrola wewnętrzna - gotowy ślad audytowy bez konieczności budowania własnego mechanizmu logowania.
  • Diagnostyka błędów zgłaszanych przez użytkowników - szybkie ustalenie, czy problem wynika ze zmiany danych, czy z błędu aplikacji.

Decyzja, które tabele objąć rewizją, warto podejmować selektywnie. Włączenie audytu dla każdej tabeli w systemie generuje dużą liczbę wpisów w _revision i utrudnia znalezienie w niej tego, co rzeczywiście istotne - w praktyce sprawdza się ograniczenie mechanizmu do kartotek podstawowych i danych o największym znaczeniu biznesowym, których strukturę opisano szerzej w materiale o dokumentacji struktury bazy danych.

Typowy scenariusz wygląda tak: dział księgowości zgłasza, że warunki płatności zapisane przy kontrahencie różnią się od ustaleń handlowych sprzed miesiąca. Bez rewizji jedyną drogą jest przepytanie kolejnych osób, które mogły mieć dostęp do kartoteki, co przy większym zespole handlowym potrafi zająć więcej czasu niż samo wyjaśnienie sprawy. Z włączoną rewizją administrator uruchamia jedno zapytanie do tabeli _revision filtrujące po numerze kontrahenta i od razu widzi, kto, kiedy i na jaką wartość zmienił dane pole - łącznie z ewentualną serią kolejnych korekt, jeśli wartość była poprawiana kilkukrotnie.

Czego rewizja nie rejestruje

Mechanizm ma jasno określony zakres, o którym warto wiedzieć przed założeniem, że zastąpi on pełny audyt bazy danych. Rewizja obejmuje wyłącznie zmiany wartości pól wykonane standardowymi transakcjami edycji - dodanie nowego rekordu ani jego usunięcie nie generują wpisu w tabeli _revision. Nie są też rejestrowane zmiany wykonane bezpośrednio na bazie danych, z pominięciem warstwy aplikacji, na przykład ręcznym zapytaniem UPDATE uruchomionym z poziomu narzędzia administracyjnego.

Dla większości scenariuszy biznesowych - wyjaśnienia spornej zmiany wartości pola przez użytkownika - ten zakres jest wystarczający. Tam, gdzie potrzebny jest pełny ślad również dla operacji dodawania i usuwania rekordów, warto rozważyć uzupełnienie rewizji o dodatkowe mechanizmy na poziomie samej bazy danych.

Warto też pamiętać o praktycznej konsekwencji włączenia audytu dla tabeli o bardzo wysokiej częstotliwości zapisów, na przykład stanów magazynowych aktualizowanych przy każdej transakcji. Tabela _revision rośnie wtedy szybko, a przeszukiwanie jej historii staje się wolniejsze. Z tego powodu rewizję warto włączać świadomie - dla kartotek zmienianych relatywnie rzadko, gdzie liczy się możliwość wyjaśnienia pojedynczej zmiany, a nie dla tabel transakcyjnych zmienianych setki razy dziennie.

Podsumowanie

Rewizja zmian danych to lekki, konfigurowalny mechanizm audytowy: włączenie sprowadza się do jednej pozycji w skorowidzu RVZN, a każda kolejna zmiana pola w oznaczonej tabeli trafia automatycznie do tabeli _revision ze starą i nową wartością, datą, loginem i czytelną etykietą pola.

To rozwiązanie sprawdza się przy wyjaśnianiu spornych zmian w kartotekach podstawowych i danych cennikowych, natomiast nie zastępuje pełnego audytu operacji dodawania i usuwania rekordów ani zmian wykonanych z pominięciem standardowych transakcji edycji.

Słownik pojęć

Podstawowe pojęcia - rewizja zmian danych

Terminologia przydatna przy konfigurowaniu audytu zmian.

RRewizja zmian danych
Mechanizm automatycznie rejestrujący historię zmian wartości pól w tabelach oznaczonych jako podlegające audytowi.
SSkorowidz RVZN
Słownik definiujący, które tabele bazy danych podlegają rewizji zmian.
TTabela _revision
Tabela systemowa, w której zapisywana jest historia zmian - jeden wiersz na każde zmienione pole.
RREVCOLUMN
Kolumna tabeli _revision przechowująca nazwę kolumny bazy danych, której dotyczyła zmiana.
Jj_insert_update
Uniwersalna transakcja edycji rekordów, przy której uruchamiany jest mechanizm rewizji dla oznaczonych tabel.
CCAPTION
Kolumna tabeli _revision z czytelną etykietą pola formularza, powiązaną z edytowaną kolumną bazy danych.
FAQ

Najczęściej zadawane pytania

01

Jak włączyć rewizję zmian dla wybranej tabeli?

Wystarczy dodać w skorowidzu RVZN aktywną pozycję ze wskazaniem nazwy tabeli. Od tego momentu każda zmiana zapisana przez standardową transakcję edycji w tej tabeli zostanie automatycznie odnotowana w tabeli _revision.

02

Co dokładnie zapisuje rewizja - cały rekord czy tylko zmienione pola?

Rewizja zapisuje wyłącznie zmienione pola, po jednym wierszu w tabeli _revision na każdą zmienioną kolumnę. Jeśli użytkownik zmieni dwa pola w jednym zapisie, w historii pojawią się dwa osobne wpisy z tym samym numerem rewizji.

03

Czy rewizja rejestruje też dodawanie i usuwanie rekordów?

Nie. Mechanizm opisany tutaj obejmuje zmiany wartości pól wykonywane standardowymi transakcjami edycji, takimi jak j_insert_update czy h_insert_update. Dodanie nowego rekordu lub jego usunięcie nie generuje wpisu w tabeli _revision.

04

Czym jest kolumna CAPTION w tabeli _revision?

To czytelna etykieta pola formularza powiązana z edytowaną kolumną bazy danych, na przykład Nazwa pełna zamiast surowej nazwy kolumny NAZWA. Ułatwia to przygotowanie zrozumiałego raportu zmian dla osób spoza działu IT.

05

Czy rewizja obsługuje więcej niż jedną bazę danych?

Tak. Kolumna BAZA w tabeli _revision wskazuje, z którego połączenia pochodziła zmiana - domyślnego SoftwareStudioConnectionString albo dodatkowego CustomConnectionString, jeśli wdrożenie korzysta z więcej niż jednej bazy danych.

06

Kto ma dostęp do historii zmian?

Dane z tabeli _revision odczytuje się standardowym zapytaniem SQL, podobnie jak każdą inną tabelę platformy. W praktyce dostęp do takiego zestawienia ogranicza się do osób z uprawnieniami administracyjnymi lub audytowymi.

Warto przeczytać

Powiązane materiały o audycie i danych

Kolejne kroki, jeśli konfigurujesz kontrolę zmian danych w systemie.

Transakcje

j_insert_update.aspx

Uniwersalna transakcja edycji, przy której uruchamia się mechanizm rewizji. Warto poznać ją jako punkt wspólny wielu formularzy platformy.

Czytaj dalej
Konfiguracja

Skorowidze w StudioSystem

Ogólny mechanizm słowników konfiguracyjnych platformy, którego częścią jest skorowidz RVZN sterujący rewizją zmian.

Czytaj dalej
Dane

Baza danych i widoki SQL

Warstwa danych, na której działa mechanizm rewizji, w tym obsługa wielu połączeń rozróżnianych kolumną BAZA.

Czytaj dalej
Administracja

Moduł administratora

Miejsce, z którego konfiguruje się skorowidze, w tym RVZN, oraz zarządza kontami użytkowników pojawiającymi się w kolumnie LOGIN.

Czytaj dalej
Struktura

Dokumentacja struktury bazy danych

Konwencje nazewnictwa tabel i widoków platformy, pomocne przy identyfikacji, które kartoteki warto objąć audytem.

Czytaj dalej

Chcesz zobaczyć platformę w działaniu?

Uruchom demo modułów StudioSystem i sprawdź platformę na żywo.