Wie lasse ich etwas berechnen?
Wenn Sie beispielsweise zwei Zahleneingaben "Länge" und "Breite" haben und demm Nutzern die darauf resultierende Fläche anzeigen wollen (und die Fläche z.B. auch in Regeln verwenden wollen), dann legen Sie zunächst die beiden Zahleneingaben an und gehen dann wie folgt vor:
Berechnete Zahl anlegen
- Legen Sie eine Zahleneingabe an
- Klicken Sie auf Loading....
- Setzen Sie den Haken bei Berechnet und klicken Sie auf Loading....
- Es öffnet sich ein Formel-Editor. Darin geben Sie nun die Formel "Länge * Breite" ein. Die Variablen werdenb Ihnen vorgeschlagen.
- Klicken Sie auf Loading....
- Und noch einmal auf Loading...(oderLoading..., falls noch nicht geschehen).
- Es erscheint eine berechnete Variable, erkennbar an dem "=" im Eingabefeld.
Mit der Eingabe von z.B. "Länge" fügen sie also den Wert ein, den das Merkmal "Länge" aktuell hat. Falls das Merkmal einen key gesetzt hat (nur möglich, wenn Entwickler-Modus an), wird dieser statt des Merkmalnamens in der Formel verwendet.
Muss der berechnete Wert angezeigt werden?
Natürlich nicht. Aktivieren Sie einfach den Haken Versteckt in den
Welche Berechnungen kann ich ausführen?
Grundsätzlich kann nur mit Zahlen gerechnet werden.
Als Eingabe stehen alle Merkmale zur Verfügung, einfach indem Sie den Namen des Merkmals angeben: "Länge * Breite"
Sie können auch Wert-Eigenschaften nutzen – die Produktdaten, die Sie an den Werten einer Auswahl abgelegt haben (in Formeln auch Attribute genannt). Wenn ausser der Zahleneingabe "Länge" z.B. eine Auswahl "Form" existiert, bei deren Werten Sie eine Wert-Eigenschaft "Breite" erfasst haben, dann können Sie schreiben: "Länge * Form.Breite" (die Wert-Eigenschaft muss dafür den Typ Zahl haben).
Ihnen stehen die Grundrechenarten zur Verfügung, sowie eine Reihe mathematischer Funktionen, wie etwa
- sin, cos, tan
- pow: Potenz: pow(2,4)=2^4
- sqrt: Wurzel
- round: Runden
- ceil: Nächstgrößere Ganzzahl
- floor: Nächstkleinere Ganzzahl
Wenn Sie Produktkomponenten verwenden, gibt es dafür noch einige spezielle Funktionen:
- sum
- sumPrevious
- average
- product
- map
- filter
- reduce
- instanceIndex
Konkrete Anwendungsfälle
Einfache mathematische Berechnungen
Flächenberechnung
Länge * Breite;
Volumenberechnung mit Attributen
Länge * Breite * Form.Höhe;
Hier ist Form.Höhe ein Attribut des Auswahlwerts "Form"
Bedingte Berechnungen
Material == 23 ? Fläche * 150 : Fläche * 100;
Berechnungen mit Produktkomponenten
Produktkomponenten eröffnen völlig neue Möglichkeiten für intelligente Berechnungen. Hier sind die wichtigsten Anwendungsfälle:
Anzahl von Bauteilen berechnen
Math.ceil(Länge / 2.5); // Anzahl Balken bei 2,5m Abstand
Gesamtwerte aller Komponenten
sum(map(Ausstattung.instances, (c) => c.Gewicht));
Summiert das Gewicht aller Ausstattungskomponenten
Positionsberechnungen für 3D-Darstellung
Einfache Position basierend auf Index
Teilelemente.Ausstattung.instanceIndex * 0.5;
Jede Ausstattung wird um 50cm versetzt
Kumulative Positionsberechnung mit sumPrevious
Eine der häufigsten Anfragen ist die korrekte Positionierung von Komponenten basierend auf den vorherigen Elementen, z.B. deren Höhe. Die sumPrevious-Funktion macht kumulative Berechnungen sehr einfach:
Variante 1 - Einzelner Wert:
sumPrevious(Teilelemente.Ausstattung, "Hoehe") / 100;
Summiert automatisch die Höhe aller vorherigen Ausstattungselemente und rechnet in Meter um.
Variante 2 - Mit Berechnung:
sumPrevious(Teilelemente.Ausstattung, (e) => e.Hoehe / 100);
Summiert die Höhe aller vorherigen Elemente und rechnet sie direkt in Meter um.
Die String-Variante ("Hoehe") funktioniert nur für einzelne Merkmale – keine Berechnungen im String!
❌ Falsch:
sumPrevious(Elemente, "Innenbreite + Plattenstärke"); // Geht nicht!
✅ Richtig:
sumPrevious(Elemente, (e) => e.Innenbreite + Plattenstärke);
Erstellen Sie ein verstecktes berechnetes Feld "positionY" in der Ausstattung mit dieser Expression. Dann können Sie in anderen Berechnungen einfach Teilelemente.Ausstattung.positionY verwenden, anstatt die Formel zu wiederholen.
Hierarchien und Kontext verstehen
Die Komponenten-Hierarchie
Bei der Arbeit mit Produktkomponenten ist das Verständnis der Hierarchie entscheidend:
Hauptprodukt
├── Teilelemente (Komponentenliste)
│ ├── Ausstattung (Unterkomponentenliste)
│ │ ├── instanceIndex (Position in der Liste)
│ │ ├── Höhe (Attribut)
│ │ └── Breite (Attribut)
│ └── andere Merkmale
└── andere Merkmale
Zugriff auf verschiedene Ebenen
Zugriff auf übergeordnete Ebene:
Teilelemente.Ausstattung.instanceIndex; // Index der Ausstattung
Zugriff auf alle Instanzen:
map(Teilelemente.Ausstattung.instances, (c) => c.Gewicht);
Zugriff auf spezifische Instanz:
Teilelemente.Ausstattung[0].Gewicht; // Erste Ausstattung
Häufige Fehler und Lösungen
Fehler: "InstanceIndex funktioniert nicht"
Stellen Sie sicher, dass Sie sich in der richtigen Hierarchie-Ebene befinden. Der instanceIndex bezieht sich immer auf die aktuelle Komponente.
Fehler: "Division durch Null"
❌ Gefährlich:
Gesamtpreis / Gesamtanzahl;
✅ Sicher:
Gesamtanzahl > 0 ? Gesamtpreis / Gesamtanzahl : 0;
Verfügbare Funktionen im Detail
Mathematische Funktionen
sin,cos,tan- Trigonometrische Funktionensqrt- Quadratwurzelpow(basis, exponent)- Potenzabs- Absolutwertmin,max- Minimum/Maximumclamp(wert, min, max)- Wert in Bereich begrenzenround,ceil,floor- Rundungsfunktionen
Array-Funktionen (für Komponenten)
map(array, funktion)- Transformation jedes Elementsfilter(array, bedingung)- Filtern nach Bedingungreduce(array, funktion, startwert)- Reduzierung auf einen Wertfind(array, bedingung)- Erstes Element findenfirst(array),last(array)- Erstes/letztes Elementsum(array)- Summe aller ZahlensumPrevious(komponente, "attribut")odersumPrevious(komponente, e => berechnung)- Summiert Werte aller vorherigen Elemente einer Gruppe (vereinfacht kumulative Berechnungen)count(array)- Anzahl Elementeaverage(array)- Durchschnittproduct(array)- Produkt aller Zahlen
Logische Operatoren
&&- UND||- ODER!- NICHT==,!=- Gleich/Ungleich<,>,<=,>=- Vergleichebedingung ? wertWennWahr : wertWennFalsch- Ternärer Operator
Praxisbeispiele für verschiedene Branchen
Terrassendächer
// Anzahl Pfosten basierend auf Breite
Breite <= 400 ? 2 : Math.ceil(Breite / 250);
// Anzahl Seitenelemente vorne
Pfostenanzahl -
// Position der Seitenelemente
(Gesamtbreite / (Pfostenanzahl - 1)) * instanceIndex;
Geländer
// Anzahl Füllungen
Math.floor(Gesamtlänge / Maximalbreite);
// Position der Pfosten
(Gesamtlänge / Pfostenanzahl) * instanceIndex;
Möbel/Schränke
// Anzahl Regalböden
Math.floor((Höhe - 40) / Fachtiefe);
// Höhe der Regalböden
instanceIndex * Fachtiefe + 20;
Best Practices
1. Strukturiert vorgehen
- Beginnen Sie mit einfachen Expressions
- Testen Sie jeden Schritt einzeln
- Erweitern Sie schrittweise
2. Wiederverwendbarkeit
- Nutzen Sie versteckte berechnete Felder für komplexe Zwischenergebnisse
- Definieren Sie häufig gebrauchte Berechnungen nur einmal
- Zahlen, die in vielen Formeln vorkommen, legen Sie als Parameter ab, statt sie in die Formeln zu schreiben
3. Performance optimieren
- Vermeiden Sie redundante Berechnungen
- Nutzen Sie Zwischenergebnisse in versteckten Feldern
4. Debugging
Wenn eine Expression nicht funktioniert:
- Prüfen Sie die Syntax (Klammern, Operatoren)
- Stellen Sie sicher, dass alle Variablen existieren
- Testen Sie Teilausdrücke einzeln
- Prüfen Sie die Hierarchie-Ebene bei Komponenten
Erweiterte Anwendungen
Dynamische Preisgestaltung
Berechnen Sie die benötigte Menge eines Verbrauchsartikels, z.B. die Fläche:
// Fläche in qm
((Breite / 100) * Tiefe) / 100;
Legen Sie den Verbrauchsartikel mit dem Preis für die Einheit an, hier qm. Geben Sie beim Zusteuern des Artikels zur Stückliste als dessen Menge die berechnete Fläche an.
Validierung und Constraints
// Technische Grenzen
clamp(BenutzerEingabe, MinWert, MaxWert);
// Abhängige Werte
Typ == 100 ? BerechnetWert : ManuellerWert;
3D-Positionierung
// Intelligente Verteilung
(Gesamtbreite / count(Komponenten)) * instanceIndex - Gesamtbreite / 2;
// Spiralförmige Anordnung
Math.cos(instanceIndex * 0.5) * Radius;
Die Expression Engine ist sehr mächtig, aber bei komplexen hierarchischen Berechnungen sollten Sie schrittweise vorgehen und jede Teilberechnung einzeln testen. Bei Fragen zur Implementierung wenden Sie sich an Ihren Umsetzungspartner.
Fazit
Die Expression Engine ermöglicht es, von einfachen Berechnungen bis hin zu komplexen hierarchischen Kalkulationen alles umzusetzen. Besonders die Arbeit mit instanceIndex und Array-Funktionen bei Produktkomponenten eröffnet völlig neue Möglichkeiten für intelligente Produktkonfiguration.
Mit den hier gezeigten Techniken können Sie dynamische Preiskalkulationen, intelligente 3D-Positionierung und komplexe Mengenberechnungen realisieren - und damit Ihren Kunden eine intuitive und mächtige Konfigurationsoberfläche bieten.