--- name: soneta-business-xml description: > Generator plików business.xml dla platform Soneta (enova365, Soneta Enterprise). Tworzy definicje obiektów biznesowych (tabel, kolumn, relacji, indeksów) zgodne ze schematem XSD. Używaj gdy użytkownik prosi o stworzenie nowego modułu biznesowego, zdefiniowanie obiektów lub encji do przechowywania w bazie danych, utworzenie relacji między obiektami, lub generowanie plików business.xml dla enova365/Soneta Enterprise. --- # Soneta Business XML Generator Skill do generowania plików `business.xml` dla platform firmy Soneta: - **enova365** - system ERP dla firm - **Soneta Enterprise** - platforma enterprise Pliki te definiują obiekty biznesowe (encje ORM), które platforma automatycznie mapuje na tabele w bazie danych i generuje klasy C#. ## Struktura pliku business.xml ```xml ../.. Soneta.Core ``` ## Atrybuty modułu | Atrybut | Wymagany | Opis | |---------|----------|------| | `name` | ✓ | Nazwa modułu (np. "Handel", "Kadry") | | `namespace` | ✓ | Namespace C# (np. "Soneta.Handel") | | `versionName` | ✓ | Zazwyczaj "soneta" | | `versionNumber` | | Numer wersji (int) | | `internal` | | true dla modułów wewnętrznych | ## Atrybuty table | Atrybut | Wymagany | Opis | |---------|----------|------| | `name` | ✓ | Nazwa klasy C# (PascalCase, l.poj.) | | `tablename` | ✓ | Nazwa tabeli w bazie danych (PascalCase, l.mn.) | | `guided` | | `Root` = główna tabela programu (dokument, kartoteka) | | `config` | | `true` = tabela konfiguracyjna (tworzona podczas wdrożenia) | | `caption` | | Etykieta pojedynczego rekordu | | `tablecaption` | | Etykieta listy rekordów | ### Rodzaje tabel **Tabele główne (`guided="Root"`):** - Główne obiekty biznesowe: dokumenty, kartoteki (towar, pracownik, kontrahent) - Dostępne z menu głównego programu - Stanowią bazę definicji obiektów biznesowych **Tabele eksportowalne (`guided="Exported"`):** - Jak `Root`, ale dodatkowo mogą być eksportowane do innych systemów - Najważniejsze tabele transakcyjne: DokumentHandlowy, Platnosc, DokEwidencja - Używaj dla dokumentów wymagających integracji z systemami zewnętrznymi **Tabele szczegółów (bez `guided`):** - Opisują szczegóły obiektów głównych: pozycje dokumentu, kody towaru, adresy - Muszą mieć dokładnie jedną relację z `relguided="inner"` wskazującą na obiekt główny **Tabele konfiguracyjne (`config="true"`):** - Określają sposób działania programu - Konfiguracja algorytmów, formularzy, wydruków, słowników - Dane tworzone podczas wdrożenia systemu - Przykłady: definicje dokumentów, jednostki miary, stawki VAT **Tabele operacyjne (bez `config`):** - Dane zbierane podczas codziennej pracy - Dokumenty, kartoteki, transakcje ## Elementy wewnętrzne ### 1. Import i using ```xml ../.. Soneta.Core Soneta.CRM ``` - **import** - ścieżka do katalogu z innymi plikami business.xml, do których można referować (np. typy z innych modułów) - **using** - namespace C# dla obiektów używanych w tym business.xml (potrzebne gdy referujesz typy z innych modułów) ### 2. Enum - definicja typu wyliczeniowego ```xml ``` Enum musi być zdefiniowany w osobnym pliku C# - tutaj tylko deklaracja. ### 3. Interface - relacje polimorficzne Interface może być implementowany przez wiele tabel. Deklaracja samego interfejsu (jego metody/właściwości) jest w kodzie C#. W business.xml deklarujemy tylko nazwę interfejsu, aby móc tworzyć **relacje interface'owe**. ```xml ``` **Relacja interface'owa** - kolumna typu interface może wskazywać na obiekt z dowolnej tabeli implementującej ten interface. W bazie danych zapisywana jest para: `(nazwa_tabeli, ID)`. ```xml ``` ### 4. Subrow - typ złożony (value object) Subrow to zagnieżdżony obiekt bez własnej tabeli - przechowywany jako kolumny w tabeli rodzica. ```xml ``` ### 5. Table - główna definicja obiektu biznesowego Pełna dokumentacja: [references/table-reference.md](references/table-reference.md) ```xml IElementSlownika
``` ## Typy danych kolumn ### Typy proste | Typ | Opis | Dodatkowe atrybuty | |-----|------|-------------------| | `string` | Tekst (wczytywany z rekordem) | `length` - wymagane, lub `"max"` dla nieograniczonego | | `text` | Długi tekst (wczytywany na żądanie, osobne SQL) | nie może być kluczem | | `binary` | Dane binarne | nie może być kluczem | | `int` | Liczba całkowita | - | | `double` | Liczba zmiennoprzecinkowa | - | | `decimal` | Liczba z dokładnością do 2 miejsc (kwota bez waluty) | - | | `currency` | Kwota z walutą (para: kwota + waluta) | - | | `doublecy` | Liczba z walutą (para: liczba + waluta) | - | | `percent` | Procent | - | | `boolean` | Tak/Nie | - | | `date` | Data | - | | `time` | Czas | - | | `datetime` | Data i czas | - | | `FromTo` | Okres dat (para: from + to) | - | | `guid` | Unikalny identyfikator | - | ### Typy relacyjne | Typ | Opis | Dodatkowe atrybuty | |-----|------|-------------------| | `NazwaTabeli` | Relacja do innej tabeli | `children`, `delete`, `relname`, `relguided` | | `NazwaInterface` | Relacja interface'owa (polimorficzna) | `children`, `delete`, `relname` | | `NazwaEnum` | Typ wyliczeniowy | - | | `NazwaSubrow` | Typ złożony (value object) | - | ### Uwagi do typów - **`string` vs `text`**: Używaj `string` dla krótszych tekstów (wczytywane z rekordem). Używaj `text` dla długich opisów (wczytywane osobnym zapytaniem SQL). - **`string length="max"`**: Tekst bez ograniczenia rozmiaru, ale wczytywany razem z rekordem. - **`text` i `binary`**: Nie mogą być używane jako klucze (`keyprimary`, `keyunique`). ## Workflow tworzenia business.xml 1. **Analiza wymagań** - określ jakie obiekty i relacje są potrzebne 2. **Zdefiniuj enumy** - typy wyliczeniowe używane w kolumnach 3. **Zdefiniuj interfejsy** - dla relacji polimorficznych (gdy kolumna może wskazywać na różne typy obiektów) 4. **Zdefiniuj subrow** - typy złożone (adresy, numery dokumentów) 5. **Zdefiniuj tabele** - główne obiekty biznesowe 6. **Dodaj relacje** - powiązania między tabelami (zwykłe i interface'owe) 7. **Dodaj indeksy** - klucze dla wyszukiwania 8. **Waliduj** - sprawdź zgodność ze schematem XSD ## Szczegółowa dokumentacja - **[references/modules-catalog.md](references/modules-catalog.md)** - katalog 34 modułów Soneta, tabele i interfejsy do relacji - **[references/table-reference.md](references/table-reference.md)** - kompletna dokumentacja atrybutów table i col - **[references/relations-guide.md](references/relations-guide.md)** - tworzenie relacji między obiektami - **[references/examples.md](references/examples.md)** - przykłady z rzeczywistych modułów Soneta ## Konwencje nazewnicze Soneta - **Nazwa tabeli (name)**: PascalCase, liczba pojedyncza (np. `Towar`, `DokumentHandlowy`) - **Nazwa w bazie (tablename)**: PascalCase, liczba mnoga (np. `Towary`, `DokHandlowe`) - **Nazwa kolumny**: PascalCase (np. `KodPocztowy`, `DataWystawienia`) - **Klucz**: `Wg` + nazwa kolumny (np. `WgKodu`, `WgNazwy`) - **Namespace**: `Soneta.NazwaModulu` ### Język nazewnictwa - **Obiekty biznesowe** (domenowe) - język **polski**: `Towar`, `Faktura`, `Kontrahent`, `Pracownik` - **Obiekty systemowe** (techniczne) - język **angielski**: `Session`, `Config`, `Cache`, `Runtime` ## Typowe wzorce ### Słownik (tabela konfiguracyjna) Tabele `config="true"` zawierają dane konfiguracyjne tworzone podczas wdrożenia. ```xml
``` ### Dokument z pozycjami (master-detail) Tabela szczegółów (bez `guided`) musi mieć dokładnie jedną relację `relguided="inner"`. ```xml
``` ### Historia zmian (wersjonowanie) Typ `FromTo` przechowuje okres dat (from + to). ```xml
```