--- name: soneta-form-xml description: "Specjalistyczna wiedza o WŁASNOŚCIOWYM formacie plików form.xml platformy enova365/Soneta — bez tego skilla Claude generuje błędne XML z nieistniejącymi elementami. ZAWSZE używaj tego skilla gdy użytkownik: (1) prosi o utworzenie lub modyfikację pliku pageform.xml, viewform.xml, form.xml, lookupform.xml lub gridform.xml dla enova365/Soneta; (2) pyta o elementy DataForm, Page, Group, Grid, Field, Row, Stack, Flow, Command, Include, Appearance, GroupBy w enova365; (3) pyta o składnię EditValue, DataContext, Visibility, RowCondition, Renderable, CaptionHtml, Footer, Class lub układ UI formularzy enova365; (4) pokazuje istniejący plik form.xml/pageform.xml/viewform.xml i pyta o jego strukturę lub chce go rozszerzyć; (5) pyta o warunkową widoczność, formatowanie warunkowe (Appearance), bindowanie danych lub wzorce UI w Soneta/enova365." --- # Soneta Form XML - Formularze UI ## Typy plików formularzy | Typ pliku | Wzorzec nazwy | Przeznaczenie | |-----------|---------------|---------------| | **pageform.xml** | `{DataType}.{PageName}.pageform.xml` | Zakładka formularza edycji obiektu | | **viewform.xml** | `{NazwaWidoku}.viewform.xml` | Widok listy zarejestrowanej jako folder (listy główne) | | **gridform.xml** | `{IdentyfikatorListy}.gridform.xml` | Indywidualne ustawienia listy na formularzu | | **lookupform.xml** | `{NazwaPodpowiedzi}.lookupform.xml` | Lista wyboru (lookup) | | **form.xml** | `{Nazwa}.form.xml` | Współdzielony fragment UI (include) | **Przykłady pageform.xml:** `Towar.Ogolne.pageform.xml`, `Kontrahent.Adresy.pageform.xml` ## Struktura dokumentu Każdy plik formularza zaczyna się od deklaracji XML i elementu `DataForm`: ```xml ``` ### Atrybuty DataForm | Atrybut | Opis | |---------|------| | `Priority` | Kolejność zakładek (domyślnie 100, niższa = wcześniej) | | `RightName` | Opcjonalny. Nazwa uprawnienia do zakładki | | `Contexts` | Warunki licencyjne, np. `"Licence.HAN \| Licence.FA"` | | `ViewType` | Typ widoku: `None`, `Dialog`, `Form`, `Folder` | | `Mode` | Tryb: `None`, `Form`, `Folder`, `Wizard`, `Modal`, `Popup`, `Frame` | | `DataType` | Opcjonalny. Pełna nazwa typu gdy nie wynika z nazwy pliku | ## Wspólne atrybuty elementów | Atrybut | Opis | |---------|------| | `Name` | Identyfikator elementu (dostępny w kodzie C#) | | `Class` | Klasy stylów (lista wartości oddzielonych spacją) | | `DataContext` | Zmienia kontekst danych dla elementu i elementów podrzędnych | | `Visibility` | Warunek widoczności (bindowalne): `true`/`false`/`{wyrażenie}` | | `Renderable` | Czy element ma być dostępny — liczone **raz** przy logowaniu | | `Width` | Szerokość w znakach lub px; `"*"` = wypełnij | | `Height` | Wysokość w wierszach lub px; `"*"` = wypełnij | ### Atrybut CaptionHtml - Tekst etykiety (w formacie HTML) - Wyrażenia bindowane: `{Właściwość}` → wartość automatycznie kodowana do HTML - Wyrażenia HTML: `{WłaściwośćHtml}` → sufiks `Html` wyłącza kodowanie - Podwójne klamry dla literałów: `{{` → `{` - Alternatywa: `CaptionMarkdown` dla Markdown **Specjalne przypadki w `Field`:** - Brak atrybutu → automatyczna etykieta wyliczana na podstawie danych - `CaptionHtml=" "` (spacja) → pusta etykieta (miejsce zachowane) - `CaptionHtml=""` (pusty) → brak etykiety i miejsca ## Elementy kontenerowe ### Page - Zakładka ```xml ``` | Atrybut | Opis | |---------|------| | `CaptionHtml` | Tytuł; może zawierać `/` do grupowania (np. `"Dokumenty/Faktury"`) | | `DataContext` | Źródło danych; `{DataSource}` = obiekt edytowany | | `Visibility` | Wyrażenie warunkowe widoczności (bindowalne) | | `Renderable` | Liczone raz przy logowaniu — dla warunków licencji/środowiska | | `Key` | Skrót klawiaturowy | ### Group - Grupa pól ```xml ``` `LabelWidth` ustawia szerokość etykiet dla wszystkich pól w grupie. ### Stack, Row, Flow - Układ elementów ```xml ``` **Układ dwukolumnowy:** `` zawierający dwa ``. ### Zasada budowania zakładki ```xml ``` ## Elementy pól i kontrolek ### Field - Pole edycyjne Jest generowany **dynamicznie** — typ właściwości decyduje o kontrolce (int → liczba, bool → checkbox, typ Sonety → lookup). ```xml ``` | Atrybut | Opis | |---------|------| | `EditValue` | **Wymagany**. Binding do właściwości: `{Właściwość}` lub `{new Ext.Właściwość}` | | `CaptionHtml` | Etykieta pola | | `Width` | Szerokość pola (`*` = wypełnij) | | `Height` | Wysokość (dla pól wieloliniowych) | | `Important` | `true` — pole oznaczone jako ważne (wyróżnione w widoku) | | `IsReadOnly` | Warunek tylko do odczytu (bindowalne) | | `Format` | Formatowanie w standardzie .NET: `N2`, `d`, `C` | | `Footer` | Agregacja w stopce listy: `Sum`, `Count`, `Average`, `Min`, `Max` | | `CheckedValue` | Wartość dla RadioButton | | `Class` | Klasy stylów | **RadioButton** — pola z tym samym `EditValue` i różnymi `CheckedValue`: ```xml ``` ### Label, Gap, Command, Include ```xml