- Zestawienie powstaje bez pisania kodu — wystarczy zapytanie źródłowe i zestaw znaczników opisujących zachowanie siatki.
- Znaczniki z przedrostkiem
ACCEPTdecydują, czy dane wolno w tym widoku edytować, dopisywać i usuwać. - Filtry kontekstowe automatycznie zawężają dane do magazynu, oddziału i firmy zalogowanego użytkownika.
- Znaczniki z przedrostkiem
ALLOWsterują tym, co użytkownik może zrobić z wynikiem: filtrować, grupować, eksportować.
Do czego służy tabela [dbo].[x_zestawienia]
Każde wdrożenie potrzebuje zestawień, których nie ma w wersji podstawowej: raport braków dla konkretnego klienta, lista przesyłek za pobraniem, zestawienie palet w drodze. Tabela [dbo].[x_zestawienia] pozwala je zdefiniować bez pisania kodu — wystarczy zapytanie źródłowe i opis pożądanego zachowania siatki.
Definicja obejmuje cztery grupy ustawień. Źródło danych to zapytanie w kolumnie ZAPYTANIE wraz z ewentualnym wskazaniem tabeli do zapisu w INSUPDTABLE. Prawa edycji opisują cztery znaczniki z przedrostkiem ACCEPT. Możliwości użytkownika — kilkanaście znaczników ALLOW, od filtrowania po eksport. Zachowanie siatki — stronicowanie, wysokość wiersza, tryb zaznaczania i reakcja na dwukrotne kliknięcie.
Osobną i najbardziej praktyczną grupą są filtry kontekstowe: FILTRMAGAZYN, FILTRODDZIAL, FILTRFIRMA, FILTRUSER i pokrewne. Włączone sprawiają, że zestawienie automatycznie zawęża dane do kontekstu zalogowanego użytkownika. Dzięki temu jedna definicja obsługuje wszystkie magazyny, a każdy kierownik widzi wyłącznie swój — bez tworzenia osobnych widoków i bez ryzyka, że ktoś zobaczy cudze dane.
Filtry kontekstowe są tu najważniejsze: pozwalają jedną definicją obsłużyć wszystkie oddziały, bez ryzyka pokazania cudzych danych.
Budowa tabeli — wykaz kolumn
Sześćdziesiąt siedem kolumn układa się w pięć grup odpowiadających kolejnym decyzjom przy projektowaniu zestawienia.
| Kolumna | Typ | Wymagana | Znaczenie |
|---|---|---|---|
| Identyfikacja zestawienia | |||
ID_ZESTAWIENIE | int | tak | Unikalny identyfikator wiersza tabeli |
NAZWA | varchar(200) | nie | Nazwa zestawienia |
UNIQUEID | varchar(50) | tak | Unikalny identyfikator |
REFNO | varchar(50) | nie | Numer referencyjny zestawienia |
REFNO_POZ | bigint | nie | numer referencyjny pozycji |
PRX | varchar(3) | nie | Kod dla grupy zestawień, rola systemowa dlaktórej zostało dopisane zestawienie |
KOLEJNOSC | int | tak | Oznaczenie kolejności zestawienia do sortowania |
AKTYWNE | bit | tak | Oznaczenie czy dane zestawienie (widok) jest aktywny |
SYSTEMOWE | bit | tak | Oznaczenie czy dana pozycja zestawienia jest instalowana systemowo i podlega synchornizacji z bazą ROOT |
KONFIGURACJA | bit | tak | Oznaczenie wiersza czy dotyczy konfiguracji ROOT.Ppodczas synchronizacji z bazą ROOT dane wiersze zostaną przegrane z bazy wzorcowej do instalacji klienta |
KIEDY | datetime | nie | data i czas dopisania zestawienia do bazy |
LOGIN | varchar(50) | nie | Login użytkownika który dopisał zestawienie do bazy |
| Źródło danych i zapis | |||
ZAPYTANIE | varchar(max) | nie | Zapytanie SQL do bazy danych, którego wynikiem są dane w zestawieniu |
ZRODLO_DANYCH | varchar(200) | nie | Źródło danych skąd pobierane są dane do zestawienia |
INSUPDTABLE | varchar(250) | nie | Informacja zawierająca nazwę tabeli do transakcji INSERT i UPDATE |
HIDEPARAM | bit | tak | Oznaczenie czy użytkownik przeglądający zestawienie ukryte parametry |
| Prawa edycji | |||
ACCEPTINSERT | bit | tak | Informacja czy x_grid obsługuje dopisywanie danych |
ACCEPTEDIT | bit | tak | Informacja czy x_grid obsługuje edycję danych |
ACCEPTDELETE | bit | tak | Informacja czy x_grid obsługuje kasowanie danych |
ACCEPTBATCHEDIT | bit | tak | Informacja czy x_grid obsługuje multi edycję danych |
AUTO_SAVE | varchar(20) | nie | Tryb automatycznego zapisu edycji: „cell” - zapis po zakończeniu edycji komórki; „row” - po opuszczeniu wiersza; puste - auto-save wyłączony |
AUTO_SAVE_INTERVAL | decimal(18,0) | nie | Interwał (w sekundach) wysyłania automatycznego zapisu, gdy AUTO_SAVE ≠ puste. Wartość 0 lub NULL dezaktywuje licznik |
| Filtry kontekstowe i dostęp | |||
FILTRFIRMA | bit | tak | Oznaczenie czy dane w zestawieniu mają być automatycznie filtrowane wg firmy |
FILTRODDZIAL | bit | tak | Oznaczenie czy dane w zestawieniu mają być automatycznie filtrowane wg symbolu oddziału zalogowanego uzytkownika |
FILTRMAGAZYN | bit | tak | Oznaczenie czy dane w zestawieniu mają być automatycznie filtrowane wg symbolu magazynu zalogowanego uzytkownika |
FILTRKOMORKA | bit | tak | Oznaczenie czy dane w zestawieniu mają być automatycznie filtrowane wg symbolu komórki zalogowanego uzytkownika |
FILTRUSER | bit | tak | Oznaczenie czy dane w zestawieniu mają być automatycznie filtrowane wg loginu uzytkownika |
FILTRROLASYS | bit | tak | Parametr wymusza filtrowanie pozycji tabeli wg kolumny ROLASYS użytkownika danej roli |
FILTRDATA | bit | tak | Oznaczenie czy użytkownik przeglądający zestawienie ma dostęp filtrowania danych wg przedziału czasowego, warunek działa wyłącznie dla zapytań, które mają w danych kolumnę DDOWOD, PO KTÓREJ NASTĘPUJE ODFILTORWANIE DOKUMENTÓW |
FILTR_KOLUMNA | varchar(50) | nie | Oznaczenie wg jakiej kolumny dane mają być filtrowane |
FILTR_TYP | varchar(1) | nie | Rodzaj sposobu filtrowania |
ROLA | varchar(20) | nie | Nazwa roli do jakiej jest przypisany dana pozycja konfiguracji |
ROLASYS | varchar(3) | nie | Symbol roli systemowej pozwala filtrować pozycje wg danej roli |
USERNAME | varchar(100) | nie | Nazwa użytkownika - właściciela zestawienia, jeżeli wartość jest NULL to oznacza że jest to zestawienie ogólne dostępne dla wsyztskich użytkowników danej roli |
MPK | varchar(10) | nie | Kod PRX |
| Zachowanie siatki | |||
ALLOW_FILTR | bit | tak | Oznaczenie czy użytkownik przeglądający zestawienie ma dostęp do funkcji filtrowania danych |
ALLOW_SORT | bit | tak | Oznaczenie czy użytkownik przeglądający zestawienie ma dostęp do funkcji sortowania danych |
ALLOW_GROUP | bit | tak | Oznaczenie czy użytkownik przeglądający zestawienie ma dostęp do funkcji grupowania danych |
ALLOW_GROUP_VISIBLE | bit | tak | Oznaczenie czy grupa tabeli jest widoczna czy ukryta |
ALLOW_EXPORT | bit | tak | Oznaczenie czy użytkownik przeglądający zestawienie ma dostęp do funkcji eksportowania danych |
ALLOW_EXPORT_BTNS | varchar(max) | nie | Możliwość zdefiniowania własnych linków, które będą dostępne w toolbar rozwijanym pod poleceniem EXPORT XLS, np. polecenie eksportu do pliku XLS<li id=”tb_btnUwagi” sslink=”/role_sys/j_uwagi.aspx?delete=1&grupa=CON&refno=” dialogbox=”True” dialogboxtitle=”Edycja” dialogboxsize=”max” dialogboxrefresh=”False” showclosebutton=”True” role=”menuitem” ><span >Uwagi/notatki</span></li> |
ALLOW_CHART | bit | tak | Oznaczenie czy użytkownik przeglądający zestawienie ma dostęp do funkcji wykresów danych |
ALLOW_MENU | bit | tak | Oznaczenie czy użytkownik przeglądający zestawienie ma dostęp do menu kontekstowego, uruchamiana prawym przyciskiem myszki |
ALLOW_MENU_HEADER | bit | tak | 1 = włączony. Aktywuje menu kontekstowe nagłówka kolumn (PPM na pasku tytułów) umożliwiające sortowanie, ukrywanie lub kopiowanie kolumn; 0 = menu nagłówka wyłączone |
ALLOW_SELECTION | bit | nie | Parametr umożliwiający zaznaczanie tekstu w wybranej komórce grida |
ALLOW_CONTEXT_MENU | bit | tak | Zezwala na wygenerowanie kolumny z ikoną trzech kropek, która otwiera menu kontekstowe definiowane w polu TOOLBARMENU; umożliwia działania np. kopiuj-wklej, eksport fragmentu danych czy szybki filtr |
ALLOW_CONTEXT_MENU_COLUMN | bit | tak | 1 = włączony. Umożliwia dodanie w kolumnie specjalnej ikony „⋮”, która wywołuje menu kontekstowe zdefiniowane w tabeli _menu dla danego zestawienia; 0 = ikona i menu wyłączone |
SELECTIONMODE | varchar(25) | nie | Definicja sposobu zaznaczania wierszy w tabeli, domyślnie singlerow. Inne wartości: none, multiplerows, multiplerowsextended, singlecell, multiplecells, multiplecellsextended, multiplecellsadvanced, checkbox |
MULTI_ROW_SELECT | bit | nie | Oznaczenie czy w zestawienu jest dostępne zaznaczanie więcej niż jednego wiersza. Standardowo jest zaznaczany jeden wiersz tabeli |
SHOW_FILTER_ROW | bit | nie | Znacznik określający czy jest widoczny wiersz filtrowania |
PAGINGMODE | varchar(20) | tak | Sposób pobierania danych standardowo jest to VirtualLoad, ale może być ClassicPaging |
PAGINGSIZE | int | tak | Podział stron tabeli może pobiearać okreśłoną ilość wierszy (rekordów), standardowo 50 |
ROWHIGHT | int | tak | Określenie wysokości wiersza tabeli, domyślnie jest 25px, zalecane jest ustawienie więcej |
FLEX_DIRECTION | varchar(20) | nie | Określa kierunek układu kontrolek w trybie responsywnego formularza (Flex layout) otwieranego z grida: „row”, „row-reverse”, „column”, „column-reverse” |
FLAGROW | bit | tak | Informacja czy x_grid obsługuje priorytet wiersza |
PRIORITYROW | bit | tak | Informacja czy x_grid obsługuje priorytet wiersza indywidualnie dla każdego użytkownika |
READROW | bit | tak | Informacja czy x_grid obsługuje status odczytania wiersza indywidualnie dla każdego użytkownika |
DCLICK | bit | tak | czy grid ma odpalać transakcję przez double click |
DCLICK_LINK | bigint | nie | Określenie transakcji do uruchomienia. ID polecenia toolbarmenu, które ma zostać wywołanie po podwójnym kliknięciu |
DCLICK_TIME | int | tak | czas podany w milisekundach - dopuszczalna przerwa między kliknięciami |
COMBOFILTR | varchar(max) | nie | Specjalne filtrowanie typu COMBO dla j_grid |
COMBOFILTRCON | varchar(50) | nie | Nazwa połączenia do bazy danych (connectionstring) dla skorowidza używanego w kolumnie filtrowanej wg skorowidza |
COMBOFILTRKOL | varchar(50) | nie | Nazwa kolumny filtrowanej wg skorowidza |
TOOLBARMENU | bit | tak | Oznaczenie czy użytkownik przeglądający zestawienie ma dostęp do paska przycisków nad tabelą |
INSTRUKCJA_TYTUL | varchar(250) | nie | Tytuł opisu na potrzeby instrukcji |
INSTRUKCJA_OPIS | varchar(5000) | nie | Opis na potrzeby instrukcji |
INSTRUKCJA_IMG | varchar(250) | nie | Link do zdjęcia, zrzutu ekranu na potrzeby instrukcji, uwaga link powinien zaczynać się od https ! |
Kolumna INSUPDTABLE zasługuje na szczególną uwagę: wskazuje tabelę, do której trafiają zmiany wprowadzone w siatce. Bez niej znaczniki praw edycji nie mają skutku, bo system nie wie, gdzie zapisać dane.
Zestawienie edytowalne — kiedy ma sens, a kiedy szkodzi
Możliwość edycji danych wprost w siatce jest wygodna i bywa nadużywana. Warto rozróżnić przypadki, w których pomaga, od tych, w których omija mechanizmy kontrolne systemu.
| Rodzaj danych | Edycja w zestawieniu | Uzasadnienie |
|---|---|---|
| Dane opisowe kartotek | Wskazana | Poprawa nazwy czy uwag nie wymaga obiegu dokumentu |
| Parametry pomocnicze i słowniki | Wskazana | Szybsza niż otwieranie formularza dla każdej pozycji |
| Ilości i stany magazynowe | Odradzana | Zmiana stanu powinna wynikać z dokumentu, nie z wpisu w siatce |
| Dokumenty zatwierdzone | Wykluczona | Omija ślad rewizyjny i kontrolę uprawnień |
| Dane rozliczeniowe | Wykluczona | Wymagają uzasadnienia zapisanego w rejestrze zmian |
Reguła ogólna: edycja w siatce jest właściwa tam, gdzie zmiana nie musi zostawiać śladu, kto i dlaczego jej dokonał.
Warto też pamiętać o znaczniku edycji zbiorczej. Pozwala zmienić wiele wierszy jedną operacją, co przy porządkowaniu kartotek oszczędza godziny. Przy danych operacyjnych oznacza jednak, że pojedyncza pomyłka obejmie od razu setki rekordów — i to bez pytania o potwierdzenie, jeżeli włączony jest automatyczny zapis.
Jak korzystać z tabeli w praktyce
Przy definiowaniu zestawień warto trzymać się poniższych zasad:
- Włączaj filtry kontekstowe zamiast wpisywać ograniczenia do zapytania — jedna definicja obsłuży wtedy wszystkie oddziały.
- Ustaw stronicowanie przy zestawieniach mogących zwrócić dużo wierszy; siatka bez limitu potrafi zablokować przeglądarkę.
- Wyłączaj prawa edycji wszędzie, gdzie zmiana powinna wynikać z dokumentu, a nie z bezpośredniego wpisu.
- Ogranicz eksport tam, gdzie zestawienie zawiera dane osobowe albo handlowe — plik opuszcza kontrolę systemu bezpowrotnie.
- Wypełniaj kolumny
INSTRUKCJA_*; zestawienie bez opisu po roku bywa używane niezgodnie z przeznaczeniem. - Sprawdź czas wykonania zapytania przed udostępnieniem; zestawienie ładujące się minutę zostanie uznane za awarię systemu.
Przegląd zestawień wdrożeniowych pod kątem uprawnień do edycji i eksportu — punkt wyjścia do audytu dostępu do danych:
SELECT NAZWA,
PRX,
ROLA,
CASE WHEN ACCEPTEDIT = 1 OR ACCEPTINSERT = 1
OR ACCEPTDELETE = 1 THEN 'tak' ELSE 'nie' END AS EDYCJA,
CASE WHEN ACCEPTBATCHEDIT = 1 THEN 'tak' ELSE 'nie' END AS EDYCJA_ZBIORCZA,
CASE WHEN ALLOW_EXPORT = 1 THEN 'tak' ELSE 'nie' END AS EKSPORT,
CASE WHEN FILTRMAGAZYN = 1 OR FILTRODDZIAL = 1 THEN 'tak'
ELSE 'BRAK' END AS FILTR_KONTEKSTOWY
FROM dbo.x_zestawienia
WHERE AKTYWNE = 1
AND SYSTEMOWE = 0
ORDER BY EDYCJA DESC, EKSPORT DESC, NAZWA;
Wiersze z edycją zbiorczą i jednocześnie bez filtra kontekstowego zasługują na sprawdzenie w pierwszej kolejności — pozwalają zmienić wiele rekordów w danych, które nie zostały zawężone do kontekstu użytkownika.
Konfigurowalne zestawienia są jedną z mocniejszych stron systemu i jednocześnie miejscem, w którym najłatwiej obejść wszystkie zabudowane w nim mechanizmy kontrolne. Warto traktować definicję zestawienia edytowalnego jak zmianę w uprawnieniach, a nie jak ustawienie widoku — bo w praktyce właśnie tym jest.
Powiązane tabele i dokumentacja
Konfiguracja zestawień działa razem z definicjami kolumn i pozostałymi elementami interfejsu: