Attribute (Attributes)
Zweck
Attribute definiert ein wiederverwendbares Custom-Feld in SpeamCore. Pro Attribut wird Typ (text, textarea, number, dropdown, checkbox, ...), Position innerhalb der AttributeGroup und — bei type = dropdown — die Modell-Bindung gepflegt. Über AttributeParent werden Attribute an Domain-Entitaeten (Customer, Product, Workorder, ...) zugeordnet; über AttributeValue werden konkrete Werte pro Entitaets-Instanz gespeichert.
System-Attribute (systemAttribute = true) sind durch SpeamCore vorgegeben — Name und isTranslatable sind nicht editierbar.
Voraussetzungen
Berechtigungen (CASL)
| Action | Subject | Wirkung | Keycloak-Rolle |
|---|---|---|---|
view | FE_Attribute, Attribute | Liste/Detail aufrufbar | — |
create/update/delete | Attribute | Pflegen | APP_SPEAMCORE_CREATE/UPDATE/DELETE_ATTRIBUTE |
view | AttributeModel | Sub-Liste „Modell-Bindungen" | APP_SPEAMCORE_VIEW_ATTRIBUTE_MODEL |
view | AttributeParent | Sub-Liste „Verwendung" pro Entitaet | APP_SPEAMCORE_VIEW_ATTRIBUTE_PARENT |
Schritt-für-Schritt-Anleitung
- Attribute (
/attributes) → + Neu. typewählen (text,textarea,number,dropdown,checkbox,date, ...). Type ist nach Anlage immutable.namepflegen (System-Attribute sind disabled — Name kommt austranslationKey).positionsetzen — Sortierung innerhalb der Gruppe.- Bei
type = dropdown:modelsetzen (z. B.Unit,Country,Supplier,Manufacturer,Employee,TaxationType,PaymentTarget,CostCenter,Product,ProductComponent,ServiceAssignment). - Bei
type = textodertextarea: optionalisTranslatable = trueaktivieren (mehrsprachige Erfassung).
Sub-Listen am Detail
- Modelle (
/attributes/:id/models) — Auswahl-Optionen bei dropdown-Typen, falls nicht übermodelaufgeloest. - Parents (
/attributes/:id/parents) — pro Entitaets-Typ (Customer,Product, ...) wird zugeordnet, ob das Attribut dort sichtbar ist.

Toolbar (Detail-Seite)
Schlanke Toolbar oben rechts:
| Icon | Aktion (aria-label) | CASL | Wirkung |
|---|---|---|---|
| ← | Zurückgehen | — | Zurück zur Liste. |
| 🏠 | Zur Startseite gehen | — | Springt auf das Dashboard / /. |
| ⏮/◀/▶/⏭ | Pagination | — | Navigation durch die gefilterte Liste — Massen-Bearbeitung ohne Liste-Sprung. |
Globale Floating-Drawer (links)
Wie auf jeder Detail-Seite verfuegbar — siehe Floating-Quickbar:
- KAL. (Mini-Kalender)
- ZEIT (Persoenliche Wochen-Arbeitszeit)
- ARBEIT (Eigene bevorstehende Aufträge)
Felder und Eingaben
| Feldname | Pflicht | Datentyp | Wirkung beim Ausfuellen | Voraussetzung |
|---|---|---|---|---|
type | ja (read-only) | ENUM | Bestimmt Eingabe- und Render-Logik. | — |
name | ja (disabled bei System-Attribut) | String | Anzeigename. Bei systemAttribute = true wird über translationKey aus i18n geholt. | — |
position | nein | Integer | Reihenfolge innerhalb der AttributeGroup. | — |
isTranslatable | nein | Boolean | Aktiviert mehrsprachige Eingabe (nur bei text/textarea). | type ist text oder textarea. |
model | nein | ENUM (s. unten) | Bestimmt das Quelldaten-Modell für dropdown-Auswahl. | type = dropdown. |
systemAttribute | nein (read-only) | Boolean | true: vom System gepflegt, nicht loeschbar. | — |
translationKey | nein (read-only bei System) | String | i18n-Schlüssel für den Namen. | — |
Unterstuetzte Modelle (bei type = dropdown)
Unit, Country, Supplier, Manufacturer, Employee, TaxationType, PaymentTarget, CostCenter, Product, ProductComponent, ServiceAssignment.
Wiederverwendbare Konzepte
- Custom-Fields und AttributeFields — Pattern für Custom-Fields.
- Standardwerte und AttributeFelder — Pflege von Default-Werten.
- Polymorpher Parent-Pattern —
AttributeParent.parentType/parentId. - Berechtigungen verstehen (CASL)
Verknuepfungen zu anderen Modulen
- AttributeGroups — Pflicht-Container.
- Produkte, Kunden, Komponenten — typische
AttributeParent-Einträge. - Einheiten, Lieferanten, Hersteller, Mitarbeiter — Quelle für dropdown-Modelle.
Häufige Fehler und Lösungen
| Fehler | Lösung |
|---|---|
name ist disabled | System-Attribut. Name bzw. Übersetzung wird über translationKey aus i18n gepflegt. |
| Dropdown-Werte fehlen | model ist nicht gesetzt oder das referenzierte Modell hat keine Einträge. |
| Attribut erscheint nicht an Entitaet | AttributeParent fehlt — pro Entitaets-Typ muss explizit zugeordnet werden. |
API/Schnittstellen
| Methode | Endpoint | Zweck | CASL |
|---|---|---|---|
GET | /api/attributes | Liste | view Attribute |
POST | /api/attributes | Anlegen | create Attribute |
GET | /api/attributes/:id | Detail | view Attribute |
PATCH | /api/attributes/:id | Ändern | update Attribute |
DELETE | /api/attributes/:id | Soft-Delete | delete Attribute |
GET | /api/attribute-models?filter[attributeId] | Sub-Liste Modell-Bindungen | view AttributeModel |
GET | /api/attribute-parents?filter[attributeId] | Sub-Liste Parents | view AttributeParent |
Versionshinweise
- 2026-04-30: Initiale Veroeffentlichung.