Skip to content

Pola ​

Moduł zarządzania polami stanowi fundament architektury Metadata-Driven w systemie Ammonly. Umożliwia pełną kontrolę nad strukturą danych, zachowaniem formularzy, tabelami DataGrid oraz regułami walidacji w poszczególnych modułach bez konieczności ingerencji w kod źródłowy.

Uwaga dotycząca typów pól

Niniejszy artykuł omawia mechanizmy architektoniczne, właściwości, organizację i walidację pól. Szczegółowy opis poszczególnych typów pól (UiType) znajduje się w dedykowanej kategorii modułu.


Spis treści ​


1. Istota architektury metadanych ​

W systemie Ammonly definicja pól nie jest zakorzeniona na sztywno w szablonach HTML ani w kontrolerach. Każde pole jest autonomicznym obiektem metadanych przechowywanym w rejestrze systemowym.

Kluczowe korzyści architektury metadanych: ​

  1. Pojedyncze źródło prawdy (Single Source of Truth): Zmiana etykiety, wymagalności lub reguły walidacji w metadanych automatycznie odzwierciedla się w interfejsie przeglądarkowym, API REST oraz logach.
  2. API-First & Zero Redundancy: Te same metadane sterują renderowaniem formularzy Twig/HTMX oraz walidacją zapytań POST, PUT i PATCH w REST API.
  3. Elastyczność i skalowalność: Administratorzy mogą rekonfigurować logikę pól w dowolnym momencie bez ryzyka destabilizacji kodu bazowego platformy.

2. Podstawowe właściwości pola ​

Każde pole w systemie opisane jest zestawem kluczowych atrybutów konfiguracyjnych:

WłaściwośćKlucz technicznyOpis i zastosowanie
EtykietalabelNazwa wyświetlana w interfejsie użytkownika, formularzach i nagłówkach tabel.
Klucz polafield_keyUnikalny identyfikator programistyczny w ramach danego modułu (np. start_date).
Wyrażenie SQLcolumn_expressionFizyczne mapowanie na kolumnę w tabeli (np. wt.start_date).
Wartość domyślnadefault_valueDomyślna wartość wstawiana przy tworzeniu nowego rekordu.
Wskazówka (Hint)placeholderTekst pomocniczy wyświetlany w pustym polu jako wskazówka.

3. Flagi zachowania i integralności ​

Flagi logiczne określają dostępność pola dla użytkownika oraz wymuszają reguły integralności danych zarówno na poziomie formularza, jak i bezpośrednio w silniku bazy danych.

Przegląd flag: ​

  • Wymagalność (is_mandatory): Oznacza pole jako bezwzględnie wymagane. Formularz nie zezwoli na zapis przy pustej wartości, a silnik API natychmiast zwróci błąd walidacji HTTP 422.
  • Unikalność (is_unique): Zapobiega duplikatom w obrębie tabeli modułu. Przy próbie zapisu system weryfikuje, czy rekord o takiej samej wartości już istnieje w bazie danych.
  • Tylko do odczytu (is_readonly): Wartość pola może być ustawiana wyłącznie automatycznie przez system, algorytmy obliczeniowe, importy lub przepływy pracy. Użytkownik nie może jej zmodyfikować w formularzu.
  • Pole systemowe (is_system): Chroni integralność silnika. Pola oznaczone tą flagą (np. identyfikatory, daty utworzenia, twórca rekordu) nie podlegają usunięciu ani niekontrolowanym zmianom konfiguracji.

4. Integracja z DataGrid i widokami ​

Pola definiują, w jaki sposób użytkownicy mogą wchodzić w interakcję z danymi na listach i w tabelach:

Sortowanie (is_sortable) ​

  • Włącza możliwość kliknięcia nagłówka kolumny DataGrid w celu posortowania danych rosnąco lub malejąco.
  • Wyrażenie kolumny jest bezpiecznie przekazywane do klauzuli ORDER BY w zapytaniu SQL.

Filtrowanie (is_filterable) ​

  • Udostępnia pole w pasku szybkiego wyszukiwania oraz w konstruktorze filtrów zaawansowanych.
  • W zależności od charakteru pola system automatycznie dobiera odpowiednie operatory porównania (np. równa się, zawiera, jest większe niż, w zakresie dat).

5. Organizacja w sekcjach formularza ​

Układ wizualny formularza edycji rekordu nie jest zdefiniowany statycznie, lecz wynika z relacji pól z sekcjami:

Mechanizm grupowania i pozycjonowania: ​

  1. Sekcja nadrzędna (section_id): Przypisuje pole do konkretnego bloku tematycznego w widoku rekordu.
  2. Kolejność wyświetlania (sort_order): Liczba całkowita determinująca pozycję pola wewnątrz danej sekcji. Mniejsza wartość oznacza wyższą pozycję na ekranie.
  3. Układ siatki Bootstrap/Tabler: Pola są automatycznie formatowane w responsywnych wierszach i kolumnach, zapewniając przejrzystość na monitorach desktopowych i urządzeniach mobilnych.

6. Deklaratywne reguły walidacji ​

Jednym z najbardziej zaawansowanych mechanizmów modułu pól jest kolumna validation_rules. Pozwala ona na deklarowanie reguł sprawdzających poprawność wprowadzanych danych w formacie JSON.

Standardowe reguły walidacji: ​

  • min / max: Wartości minimalne i maksymalne dla pól liczbowych.
  • min_length / max_length: Wymagana minimalna lub dopuszczalna maksymalna długość łańcucha znaków.
  • regex: Wzorzec wyrażenia regularnego (np. kod pocztowy, identyfikator podatkowy).
  • allowed_values: Zamknięta lista dopuszczalnych wartości tekstowych.

Zaawansowane reguły relacyjne (Cross-Field Validation): ​

Platforma Ammonly obsługuje dynamiczne reguły sprawdzające zależności pomiędzy polami w formularzu:

json
{
  "after_or_equal": "start_date",
  "max_duration_hours": 24
}
  • after_or_equal: Sprawdza, czy wartość daty lub czasu nie jest wcześniejsza niż data podana w innym polu (np. data zakończenia zadania w relacji do daty rozpoczęcia).
  • max_duration_hours: Wylicza różnicę w czasie pomiędzy polem bazowym a bieżącym, blokując wpisy przekraczające zdefiniowany limit godzin (np. maksymalnie 24 godziny ciągłego czasu pracy).

Dwuwarstwowa ochrona

Reguły zdefiniowane w metadanych są automatycznie przenoszone do atrybutów data-* formularza HTML, dzięki czemu użytkownik otrzymuje natychmiastową informację o błędzie w przeglądarce. Jednocześnie backendowy silnik walidacji bezwzględnie weryfikuje reguły przy każdym zapytaniu REST API.


7. Powiązania relacyjne i słownikowe ​

Pola w systemie Ammonly pełnią kluczową rolę w łączeniu rozproszonych encji w zintegrowany ekosystem:

Relacje między modułami: ​

  • Referencje 1:N: Przechowują klucz obcy do rekordu w innym module (np. przypisanie zadania do projektu).
  • Relacje polimorficzne: Umożliwiają dynamiczny wybór modułu docelowego, a następnie konkretnego rekordu (np. powiązanie wpisu czasu pracy zamiennie z Firmą, Partnerem lub Kontaktem).
  • Wyświetlanie złożone (relation_display): Określa, jak powiązany rekord jest prezentowany użytkownikowi (np. złożenie imienia i nazwiska lub numeru umowy z jej nazwą).

Słowniki wartości (Picklists): ​

  • Zamiast statycznych list wyboru, pole może być powiązane ze słownikiem systemowym (picklist_id).
  • Zmiana opcji, etykiet, kolorów i ikon w słowniku natychmiast aktualizuje wygląd we wszystkich modułach.

8. Bezpieczeństwo i ścieżka audytu ​

Bezpieczeństwo danych na poziomie pojedynczych atrybutów jest integralną częścią architektury Ammonly:

  1. Uprawnienia kontekstowe (Field-Level Security): Uprawnienia odczytu i zapisu mogą być precyzyjnie ograniczane na podstawie profilu i roli zalogowanego użytkownika.
  2. Rejestr historii zmian (Audit Trail): Każda modyfikacja wartości pola generuje wpis w audycie zawierający poprzednią wartość, nową wartość, identyfikator użytkownika oraz dokładny znacznik czasu.
  3. Ochrona przed wstrzykiwaniem danych: Wszystkie operacje zapisu i odczytu realizowane są wyłącznie za pomocą sparametryzowanych zapytań SQL (Prepared Statements).

Ammonly Documentation System