SQL Server w logistyce

Tabela _code_js w bazie danych SQL Server

Repozytorium bloków kodu JavaScript wykorzystywanych przez interfejs — przechowywanych w bazie, a nie w plikach aplikacji.

sql.server.net.pl/sql/
Uśmiechnięty analityk w garniturze przy szerokim monitorze
Uśmiechnięty analityk w garniturze przy szerokim monitorze
W skrócie
  • Kod JavaScript sterujący zachowaniem formularzy jest przechowywany w bazie danych, a nie w plikach aplikacji — dzięki temu zmiana nie wymaga ponownego wdrożenia.
  • Blok kodu jest identyfikowany numerem REFNO, do którego odwołuje się definicja formularza lub kontrolki.
  • Znaczniki SYSTEMOWE i KONFIGURACJA rozdzielają kod dostarczany z systemem od zmian wprowadzonych na konkretnym wdrożeniu.
  • Status ACH pozwala wycofać blok bez usuwania go z bazy, co ułatwia powrót do poprzedniej wersji.

Do czego służy tabela [dbo].[_code_js]

Aplikacje StudioSystem działają w przeglądarce, a zachowanie ich formularzy — walidacja pól, podpowiedzi, reakcja na skanowanie kodu — bywa różne w każdym wdrożeniu. Trzymanie tych reguł w plikach aplikacji oznaczałoby, że każda zmiana wymaga wgrania nowej wersji programu. Tabela [dbo].[_code_js] odwraca ten porządek: bloki kodu leżą w bazie i są pobierane w chwili wyświetlenia formularza.

Praktyczna konsekwencja jest taka, że modyfikacja zachowania ekranu sprowadza się do edycji jednego wiersza. Wdrożeniowiec może dostosować walidację do procesu klienta bez udziału zespołu programistycznego i bez przerwy w pracy systemu.

Ta sama swoboda wymaga jednak dyscypliny. Kod zapisany w bazie nie przechodzi przez kompilację ani przez proces przeglądu, dlatego błąd składniowy ujawni się dopiero u użytkownika. Stąd znaczenie statusu rekordu i znacznika wskazującego, czy blok pochodzi z instalacji standardowej.

Jak blok kodu trafia z bazy do przeglądarki użytkownika
Definicja ekranu Definicja ekranuFormularz wskazuje numer REFNO bloku, którego potrzebuje
Pobranie PobranieWarstwa aplikacji odczytuje z tabeli aktywny wiersz o tym numerze
Wykonanie WykonanieKod trafia do strony i steruje zachowaniem pól formularza
Zmiana ZmianaEdycja wiersza działa od następnego otwarcia ekranu, bez wdrożenia

Kod nie jest kompilowany — obowiązuje zasada testowania każdej zmiany na środowisku kopii przed przeniesieniem jej na produkcję.

Budowa tabeli — wykaz kolumn

Tabela ma prostą strukturę: właściwa treść kodu w jednej kolumnie, a wokół niej metryka pozwalająca ustalić pochodzenie, wersję i stan wpisu.

Wykaz kolumn tabeli
KolumnaTypWymaganaZnaczenie
ACHvarchar(1)
tekst do 1 znaków
nieStatus rekordu, 0 bufor, 1 zatwierdozmy, X usunięty
CODEvarchar(max)
tekst bez limitu długości
nieblok kodu js
ID_CODE_JSint
liczba całkowita
takIdentyfikator wiersza tabeli
KIEDYdatetime
data i godzina
nieData i czas dodania rekordu do bazy
KONFIGURACJAbit
wartość logiczna 0/1
nieCzy dany rekord jest altualizowany jako ustawienia konfiguracyjne SS
LOGINvarchar(50)
tekst do 50 znaków
nieLogin osoby dodającej rekord
REFNObigint
liczba całkowita 64-bitowa
nieIdentyfikator bloku kodu js
STAMPtimestamp
znacznik wersji wiersza
nieIdentyfikator czasu ostatniego zapisu
SYSTEMOWEbit
wartość logiczna 0/1
nieCzy dany rekordy jest systemowy?
TYTULvarchar(100)
tekst do 100 znaków
nieKrótki opis kodu

Kolumna CODE ma typ varchar(max), więc długość bloku nie jest praktycznie ograniczona. Nie zwalnia to jednak z dzielenia rozbudowanej logiki na mniejsze, opisane tytułem fragmenty.

Indeksy i wydajność zapytań

Indeksowanie jest tu skromne, bo tabela jest odczytywana punktowo — po numerze bloku, nie przeszukiwana zakresami.

Indeksy zdefiniowane na tabeli
IndeksKolumnyRodzaj
PK__code_jsID_CODE_JSklucz główny
REFNOREFNOzwykły

Indeks na kolumnie REFNO obsługuje podstawowy scenariusz odczytu przy budowaniu ekranu. Klucz główny na ID_CODE_JS zapewnia jednoznaczność wiersza.

Kod w bazie a kod w plikach aplikacji — co z tego wynika

Wybór miejsca przechowywania kodu interfejsu ma konsekwencje, które ujawniają się dopiero po kilku miesiącach eksploatacji. Poniższe zestawienie pokazuje, gdzie każde z podejść pomaga, a gdzie kosztuje.

Porównanie sposobów przechowywania kodu interfejsu
KryteriumKod w tabeli _code_jsKod w plikach aplikacji
Wprowadzenie zmianyEdycja wiersza, działa od następnego otwarcia ekranuWymaga wydania i wdrożenia nowej wersji
Różnice między wdrożeniamiNaturalne — każda baza ma własną zawartośćWymagają rozgałęzień lub przełączników konfiguracyjnych
Wykrywanie błędówDopiero przy otwarciu ekranu przez użytkownikaNa etapie budowania paczki wdrożeniowej
Historia zmianKolumny LOGIN i KIEDY oraz wiersze wycofane statusem XPełna historia w repozytorium kodu
Przenoszenie na produkcjęSkrypt kopiujący wiersze między bazamiStandardowy proces wydawniczy

Przechowywanie kodu w bazie opłaca się przy zmianach specyficznych dla jednego wdrożenia. Logika wspólna dla wszystkich klientów należy do plików aplikacji.

Praktyczny wniosek jest taki, że obu podejść używa się równolegle. Zachowania standardowe, identyczne u każdego klienta, pozostają w aplikacji i przechodzą przez normalny proces testów. W tabeli lądują wyłącznie odstępstwa wynikające z procesu konkretnej firmy — i właśnie dlatego znacznik SYSTEMOWE ma tu znaczenie porządkujące.

Jak korzystać z tabeli w praktyce

Przy pracy z blokami kodu przechowywanymi w bazie sprawdzają się następujące zasady:

  • Wypełniaj kolumnę TYTUL zrozumiałym opisem — po kilku miesiącach to jedyna wskazówka, do czego dany blok służy.
  • Nie modyfikuj wierszy oznaczonych jako SYSTEMOWE; zostaną nadpisane przy aktualizacji. Utwórz kopię z własnym numerem i podmień odwołanie w definicji formularza.
  • Przed zmianą zapisz poprzednią treść — najprościej dodając nowy wiersz i wycofując stary statusem X, zamiast nadpisywać kolumnę CODE.
  • Testuj każdą zmianę na kopii bazy. Błąd składniowy w JavaScripcie nie zostanie wykryty przy zapisie do tabeli, tylko przy otwarciu ekranu przez użytkownika.
  • Kolumny LOGIN i KIEDY pozwalają ustalić autora i datę zmiany — warto z nich korzystać przy ustalaniu przyczyny nagłej zmiany zachowania ekranu.
  • Nie umieszczaj w kodzie danych dostępowych ani adresów usług; te należą do tabeli parametrów konfiguracyjnych.

Zapytanie zestawiające aktywne bloki kodu wraz z datą ostatniej modyfikacji i informacją o pochodzeniu:

SELECT  REFNO,
        TYTUL,
        LOGIN,
        KIEDY,
        CASE SYSTEMOWE WHEN 1 THEN 'standardowy'
                       ELSE 'wdrożeniowy' END AS POCHODZENIE,
        LEN(CODE) AS DLUGOSC
FROM    dbo._code_js
WHERE   ISNULL(ACH, '1') <> 'X'
ORDER BY KIEDY DESC;

Warunek ISNULL(ACH, '1') jest tu potrzebny, bo kolumna statusu dopuszcza wartość pustą — wiersze bez ustawionego statusu traktujemy jako aktywne.

Bloki kodu w bazie danych to rozwiązanie wygodne we wdrożeniu i kłopotliwe w utrzymaniu, jeżeli nikt nie pilnuje porządku. Regularny przegląd wierszy nieużywanych od dłuższego czasu oszczędza sporo pracy przy późniejszej migracji.

Powiązane tabele i dokumentacja

Bloki kodu współpracują z definicjami zapytań i ekranów opisanymi w pozostałych tabelach konfiguracyjnych:

FAQ

Najczęściej zadawane pytania o tabelę _code_js

01

Dlaczego kod JavaScript jest trzymany w bazie, a nie w plikach?

Bo pozwala to zmienić zachowanie formularza bez wdrażania nowej wersji aplikacji. Wdrożeniowiec dostosowuje walidację czy podpowiedzi do procesu konkretnego klienta, edytując jeden wiersz tabeli. Zmiana obowiązuje od następnego otwarcia ekranu.

02

Co oznacza znacznik SYSTEMOWE?

Wskazuje wiersze pochodzące z instalacji standardowej, przenoszone z bazy wzorcowej przy ponownej instalacji lub aktualizacji. Modyfikacja takiego wiersza zostanie nadpisana. Własne zmiany należy zapisywać jako nowe wiersze z odrębnym numerem REFNO.

03

Jak wycofać zmianę w bloku kodu?

Zalecane podejście to nie nadpisywać kolumny CODE, tylko dodać nowy wiersz z poprawioną treścią, a poprzedni oznaczyć statusem X. Powrót do wcześniejszej wersji sprowadza się wtedy do zmiany statusów, a historia zmian pozostaje w bazie.

04

Czy błąd w kodzie zablokuje cały system?

Nie, ale zablokuje ekran, który z niego korzysta. Kod nie przechodzi kompilacji, więc błąd składniowy ujawni się dopiero przy otwarciu formularza przez użytkownika. Dlatego każdą zmianę należy sprawdzić na kopii bazy przed przeniesieniem na produkcję.

Słownik pojęć

Słownik pojęć

Pojęcia związane z konfigurowaniem interfejsu aplikacji po stronie bazy danych.

MMicrosoft SQL Server
Serwer relacyjnej bazy danych, na którym pracują aplikacje SoftwareStudio. Odpowiada za spójność danych, uprawnienia dostępu, kopie zapasowe i wydajność zapytań.
..NET / C#
Platforma i język, w których powstają aplikacje SoftwareStudio. Zapewniają integrację z SQL Server i pracę w przeglądarce bez instalacji na stanowisku.
PPraca w przeglądarce
Dostęp do systemu bez instalowania programu na komputerze użytkownika. Upraszcza aktualizacje i pozwala pracować zdalnie.
IIndeks bazodanowy
Struktura przyspieszająca wyszukiwanie wierszy w tabeli. Dobrze dobrane indeksy skracają czas zapytań, ale spowalniają zapisy i zajmują miejsce na dysku.
RRole i uprawnienia
Mechanizm przypisywania użytkownikom dostępu do funkcji i danych. Zamiast nadawać uprawnienia pojedynczo, przypisuje się je do roli odpowiadającej stanowisku.
AAktualizacja wersji
Wgranie nowego wydania oprogramowania wraz ze zmianami wynikającymi z przepisów. Wymaga testów na kopii bazy przed wdrożeniem produkcyjnym.
MMigracja danych
Przeniesienie kartotek i historii ze starego systemu do nowego. Etap, na którym najczęściej ujawnia się rzeczywista jakość danych w firmie.

Zobacz to w praktyce

Sprawdź, jak systemy SoftwareStudio oparte na MS SQL Server wspierają ten obszar Twojej firmy.