Einführungen
Modulare Elemente, Vorlagen-Gruppen und Validierungen
Erstellen Sie wiederverwendbare Module die automatisch ausgewählt werden können
Hierarchien modularer Elemente
Output.Rocks bietet verschiedene Elemente für den modularen Aufbau von Dokumenten. Die Elemente sind in folgender Hierarchie organisiert (von oben nach unten):
Die Hierarchie der Elemente ist entscheidend, da Elemente nur auf darunterliegende Elemente zugreifen können.
So können die Elemente miteinander in einem .docx Dokument verwendet werden:
Kundenvertrag.docx
Sehr geehrte(r) <<payload.kunde.name>>,
<<refLookup:template.sub_standardvertrag>>
Mit freundlichen Grüßen,
<<standard.ceoName>> – <<standard.kundenservice>>
Die Stamm-Vorlage kann auf alle anderen Elemente zugreifen und stellt die Haupt-Vorlage dar, die gerendert wird. Sie kann Teil‑Vorlagen, Komponenten und Standardwerte einbinden.
Verarbeitungsprozess
- Das System stellt zuerst alle Standardwerte im Objekt
<<standard>>bereit, zusammen mit allen im Backend hinterlegten Bildpfaden und Ihrem Daten-Payload (ohne übergeordnetes Objekt). - Anschließend werden alle Komponenten in einem virtuellen Word-Dokument vorgerendert. Sie werden geparst den bestehenden Daten hinzugefügt im
<<component>>-Objekt. - Erst dann wird die Stamm-Vorlage gerendert, wobei alle eingebundenen Teil‑Vorlagen aus dem
<<template>>-Objekt beachtet werden.
Die sich daraus ergebende Hierarchie folgt also dem Schema:
Stamm-Vorlage (Template) → Teil‑Vorlage → Komponente → Standardwert
Alle Elemente sind in darüber liegenden Hierarchie-Ebenen als <<ELEMENTOBJEKT.IDENTIFIER>> referenzierbar, wobei ELEMENTOBJEKT das Objekt mit allen Elementen der Ebene und IDENTIFIER der im Backend hinterlegte Identifier des individuellen Elements ist.
Identifier und Gruppen-Identifier
Jedes Element in Output.Rocks hat einen eindeutigen Identifier, der von Ihnen beim Anlegen vergeben wird. Dieser ist eine feste System-Bezeichnung. Unterschiedliche Elementtypen (z. B. Vorlagen, Bilder und Standardwerte) und getrennte Mandanten haben eigene Namensräume; dieselbe Zeichenkette als Identifier ist dort parallel möglich, da das System nur deren Kontext sieht.
Mehrere Vorlagen oder Elemente mit demselben Identifier in einem Namensraum schließen sich gegenseitig von der Nutzung aus! Von solchen Duplikaten wird immer nur eines automatisch genutzt. Ausgewählt vom System wird dieses anhand des activeFrom / Aktiv ab-Wertes: Das Element mit dem neuesten, nicht in der Zukunft liegenden Wert ist dann der Adressat des Systems.
activeFrom bzw Aktiv ab können damit auch als eine zeitgesteuerte Versionierung dienen. Mehrere Versionen des Dokuments können mit einem identifier parallel angelegt werden, verwendet wird aber nur die letzte aktive Version — die mit dem spätesten Aktiv-ab-Datum unter allen zur Anfragezeit gültigen, aktiven Einträgen. Erstell- und Änderungsdatum steuern diese Auswahl nicht, eine eigenständige Versionsverwaltung ist für eine spätere Ausbaustufe vorgesehen.
Beispiel: gleicher Identifier, verschiedenes Aktiv ab
Drei sehr ähnliche docx-Vorlagen teilen sich den Identifier kundenanschreiben. Eine Render-Anfrage nutzt nur diesen Namen — welche .docx-Datei tatsächlich gerendert wird, hängt jetzt von Aktiv ab und dem Zeitpunkt der Anfrage ab (nicht von Erstell- oder Änderungsdatum):
| Element (Version) | Identifier | Aktiv ab | Aktiv | Bemerkung |
|---|---|---|---|---|
| A | kundenanschreiben | 01.01.2024 | Ja | ältere Version |
| B | kundenanschreiben | 01.03.2025 | Ja | wird am 15.06.2025 genutzt |
| C | kundenanschreiben | 01.12.2025 | Ja | Aktiv-ab liegt am 15.06.2025 noch in der Zukunft |
Für sehr ähnliche Vorlagen sollten besser Vorlagen-Gruppen genutzt werden, um sie logisch zusammenzufassen. Diese nutzen ein zusätzliches Feld, welches Sie beim Anlegen vergeben, den sogenannten Gruppen-Identifier. Sie können dann die Elemente über Gruppenbedingungen auswählen lassen, um die jeweilige Vorlage auszuwählen.
Unübersichtlich wird es, wenn mehrere Elemente einer Art in einem Mandanten-Kontext gleichzeitig aktiv sind und dabei denselben Identifier haben. Dann muss man auf den Aktiv-ab-Stichtag achten, und ob diese Pausiert/Aktiv sind!
Besser: Denselben Gruppen-Identifier aus Vorlagen-Gruppen nutzen, aber ihren eigenen Identifier eindeutig benennen, bzw. die Elemente über Gruppenbedingungen auswählen lassen.
Identifier nutzen u. a.: Dokument-Vorlagen, E-Mail-Vorlagen, Vorlagenkomponenten, Standardwerte, Bilder, QR-Codes, Diagramme, Validierungen, E-Mail-Anhänge, Webhooks, Zugangsdaten, API-Token, Testdatensätze — für Referenzen in Vorlagen, Lookups und API.
Vorlagen und Teil‑Vorlagen
Stamm-Vorlagen und ihre Teil‑Vorlagen bilden die Grundlage für die Erstellung modularer Dokumente.
Eine Stamm-Vorlage kann nicht von anderen Templates verwendet werden und muss stets als "Haupt"-Template gerendert werden.
Eine Stamm-Vorlage (Main-Template) ist das zentrale .docx Template für eine bestimmte Dokumentenart. Es definiert typischerweise die Struktur und die grundlegenden Inhalte eines Dokumentes, inklusive Header und Footer.
Stamm-Vorlagen werden einfach im Backend unter Vorlagen-Management -> Vorlagen hinterlegt und mit einem eindeutigen Identifier versehen.
Teil‑Vorlagen
Teil‑Vorlagen (manchmal auch Sub-Templates genannt) werden in einer Vorlage mit der Syntax <<refLookup:template.IDENTIFIER>> eingebunden.
Im Gegensatz zu Stamm-Vorlagen sind Teil‑Vorlagen spezialisierte .docx Vorlagen, die je nach Grad der Modularisierung innerhalb einer oder mehrerer Stamm‑Vorlagen Platzhalter für die verschiedenen Abschnitte des Dokumentes darstellen. Dabei können sie auch auf Komponenten zugreifen, Low‑Code‑Logik ausführen und Daten aus dem Daten‑Payload lesen.
Teil‑Vorlagen werden im Backend unter Vorlagen-Management -> Vorlagen hinterlegt und mit einem eindeutigen Identifier versehen.
Technisch gesehen unterscheiden sich Vorlagen und Teil‑Vorlagen nicht. Beide sind .docx‑Dateien, die im Backend unter Vorlagen-Management -> Vorlagen gespeichert und mit einem eindeutigen Identifier versehen werden.
Es wird empfohlen, Identifier und Namen so zu wählen, dass sie eine klare Unterscheidung ermöglichen.
Teil‑Vorlagen unterscheiden sich von Stamm‑Vorlagen:
- durch fehlende Header und Footer
- durch die Überschreibbarkeit von bestimmten Formatierungen
- v.a. globale Fonts und Farben
Sie unterscheiden sich außerdem von Komponenten indem:
- sie nicht vorgerendert, sondern mit der Stamm-Vorlage zusammengeführt bearbeitet werden
- sie komplexe Formatieren enthalten können, wie z.B.
- formatierte Absätze
- lokale Fonts und Farben
- Grafiken und Bilder
- Tabellen und Diagramme
- sie globale Variablen enthalten können, die für die gesamte Stamm-Vorlage gelten
Teil‑Vorlagen logisch verwenden
Teil‑Vorlagen können basierend auf Parametern dynamisch ausgewählt werden. Diese Technik ist besonders nützlich für daten‑spezifische Inhalte.
Mit bedingter Logik können Sie dynamisch das passende Template basierend auf Datenwerten auswählen. Im folgenden Beispiel wird anhand des Werts vertragsart das entsprechende Rahmenwerk-Template ausgewählt.
<<cs_{vertragsart='standard'}>>
<<$ausgewaehltes_template=template.standardvertrag>>
<<else_{vertragsart='premium'}>>
<<$ausgewaehltes_template=template.premiumvertrag>>
<<es_>>
<<$ausgewaehltes_template>>Die Komponente prüft den Wert von vertragsart und weist der Variable $ausgewaehltes_template den passenden Template-Pfad aus dem Objekt template mit dem spezifischen Identifier zu.
Die letzte Zeile gibt den Pfad aus, damit das Template eingebunden werden kann.
In dem Beispiel wird von der Komponente nicht der Identifier, sondern der Pfad der Teil‑Vorlage an refLookup übergeben. Deshalb referenziert schon dessen Variable das globale Objekt template.
Komponenten
Vorlagenkomponenten werden in Templates mit der Syntax <<component.IDENTIFIER>> eingebunden.
Komponenten sind wiederverwendbare und funktionale Textbausteine, die im App-Backend unter Vorlagen-Management -> Vorlagenkomponenten definiert und mit einem eindeutigen Identifier versehen werden.
Komponenten können Standardwerte enthalten, können Output.Rocks low-code Logik ausführen und sie sind in der Lage, Daten aus dem Daten-Payload zu lesen. Daher eignen sich Komponenten vor allem für die Verwaltung von zentralen aber komplexeren Informationen wie z.B.
- Impressum-Blöcken
- Kontakt- und Ansprechpartner-Informationen
- Berechnungen von Preisen oder anderen Werten
Komponenten eignen sich auch hervorragend, um zentrale Logik auszuführen, die in verschiedenen Stamm‑Vorlagen und Teil‑Vorlagen verwendet werden soll. Das erleichtert nicht nur deren Pflege, sondern sorgt auch für sauberere und übersichtlichere Templates.
Komponenten respektieren Zeilenumbrüche.
Innerhalb von Logik Sektionen sollte aber auf Zeilenumbrüche verzichtet werden, um die Integrität eingebetteter Objekte (z.B. Bilder) zu gewährleisten.
Variablen in Komponenten sind nur innerhalb des Kontextes dieser Komponente gültig, da Komponenten vorgerendert werden.
Andere Elemente und die Stamm-Vorlage können solche Variablen nicht referenzieren, was bei Nicht-Beachtung zu Fehlern führt.
Standardwerte
Standardwerte werden in Templates mit der Syntax <<standard.IDENTIFIER>> referenziert.
Standardwerte sind einfache Text- oder Zahlenwerte, die im App-Backend unter Vorlagen-Management -> Standardwerte definiert und mit einem eindeutigen Identifier versehen werden.
Sie eignen sich vor allem für die Verwaltung von Konstanten Ihrer Organisation wie z.B. Namen, Daten oder Zahlen, die in verschiedenen Stamm‑Vorlagen, Teil‑Vorlagen und Komponenten verwendet werden sollen. So können schnell und zentral Änderungen über Ihre gesamte Dokumentenstruktur hinweg vorgenommen werden. Typische Beispiele für Standardwerte sind:
- Zentrale Namen wie Markennamen, CEO oder Geschäftsführer, etc.
- Adressen wie z.B. Firmensitz, Postfach oder Anschrift
- Bankverbindungen wie IBAN und BIC
- Kontaktdaten wie Telefonnummern und E-Mail-Adressen
- URLs wie z.B. Social-Media-Kanäle, Webseiten oder Kampagnen-URLs
- zentrale Kennzahlen wie Kontaktzeiten, Bearbeitungstage, etc.
Standardwerte sollten kleinteilig und nicht zu komplex sein, um eine einfache Verwaltung und Wiederverwendung zu gewährleisten. Für komplexere Anwendungsfälle sollten Sie stattdessen Komponenten verwenden, in denen Standardwerte auch zusammengeführt werden können.
Validierungen und Automatisierungen
Sie können Ihre eingehenden Daten überprüfen und entsprechende Templates und Emails anschließend automatisch generieren.
Dafür gibt es zwei verschiedene Möglichkeiten:
- Vorlagen-Gruppen werden genutzt, um ähnliche Vorlagen zu gruppieren und dynamisch auszuwählen.
- Validierungen werden genutzt, um Daten vor der Generierung von Dokumenten zu überprüfen und eventuell das Rendering zu verhindern.
Zusätzlich können Sie Terminierungen von Elementen definieren, um z.B. neue Templates koordiniert zu wechseln oder bestimmte Regeln nur temporär zu aktivieren.
Conditional Syntax
Für die Bedingungen in Vorlagen-Gruppen und Validierungen verwendet Output.Rocks die Symfony Expression Language. Diese leistungsstarke Syntax ermöglicht es Ihnen, komplexe Bedingungen auf Basis Ihrer Daten zu formulieren.
| Operator | Beschreibung | Beispiel |
|---|---|---|
== | Gleichheit | kunde.typ == 'premium' |
!= | Ungleichheit | kunde.status != 'inaktiv' |
>, < | Größer/kleiner als | rechnung.betrag > 1000 |
>=, <= | Größer/kleiner gleich | vertrag.laufzeit >= 24 |
and | Logisches UND | kunde.typ == 'premium' and kunde.alter >= 18 |
or | Logisches ODER | kunde.typ == 'premium' or kunde.rabatt > 0 |
not | Logische Negation | not (kunde.status == 'inaktiv') |
Diese Syntax kann für sehr spezifische Auswahlkriterien genutzt werden. Komplexe Bedingungen lassen sich durch Verschachtelung mit Klammern strukturieren.
Alle Ausdrücke müssen gültigen Symfony Expression Language Syntax verwenden. Die vollständige Referenz finden Sie in der Symfony Dokumentation.
Vorlagen-Gruppen
Vorlagen-Gruppen werden im Backend für jede Vorlage unter Vorlagen-Management -> Vorlagen definiert und ermöglichen die dynamische Auswahl von Templates basierend auf Bedingungen.
Vorlagen-Gruppen mit ihrem Group Identifier und dann einzelnen Group Conditions eignen sich hervorragend für Vorlagen, die funktionell ähnlich sind, sich aber in mehr Details unterscheiden, als über Teil‑Vorlagen und Komponenten hinaus komfortabel zu handhaben wäre. Das betrifft häufig mandanten‑ oder marken‑spezifische Vorlagen, die zwar dieselbe Kundenstory bedienen, aber visuell komplett unterschiedlich auftreten.
Bei System-Events wie dem Empfang neuer Daten oder der Anforderung eines Dokuments wird normalerweise nach dem exakten Identifier einer Vorlage gesucht. Wenn das System keinen exakten Identifier findet, kommen die sogenannten Group Identifier ins Spiel, die Templates zugewiesen werden können.
Tipp: Group Conditions können auch als Standardwerte verwaltet werden. Verwenden Sie zum Beispiel <<standard.premiumBedingung>> als Group Condition. Dies macht die Verwaltung von Bedingungen für viele Templates deutlich einfacher und zentralisierter.
Falls keine der Group Conditions erfüllt ist, wird kein Template generiert. Stellen Sie sicher, dass Ihre Bedingungen so formuliert sind, dass mindestens eine immer zutrifft, oder erstellen Sie ein Fallback-Template mit einer allgemeinen Bedingung wie true.
Validierungen
Validierungen werden im Backend unter Vorlagen-Management -> Validierungen definiert und ermöglichen die Überprüfung von Datenformaten vor dem Rendering.
Output.Rocks bietet ein flexibles Validierungskonzept, um sicherzustellen, dass E-Mails und Dokumente nur bei gültigen Daten gerendert werden. Sie können beliebig viele Datenvalidierungsbedingungen definieren und diese Dokument- und E-Mail-Vorlagen zuweisen (n:n-Beziehung).
Erweiterte Datenverarbeitung: Für erfahrene Nutzer: Datenmapping-Regeln ermöglichen die automatische Transformation von Rendering-Daten vor der Template-Auswahl (z.B. Brand-ID-Extraktion, dynamisches Template-Routing).
Validierungsregeln erlauben dabei eine zentral verwaltete Überprüfung von Datenformaten für Ihre Templates. Sie sind template-unabhängig und verhindern das Rendering eines Requests bei ungültigen Daten.
Sie können Validierungsregeln auf zwei Wegen mit Templates verknüpfen:
- Über den Reiter "Vorlagen" oder "E-Mail-Vorlagen" in der Validierungskonfiguration
- Über den Reiter "Validierung" in der Templatekonfiguration
Durch die zentrale Verwaltung von Validierungsregeln können Sie Datenqualitätsstandards organisationsweit durchsetzen und somit die Qualität Ihrer Dokumente sicherstellen.
Ungültige Prozesse verwalten
E-Mail- und Dokumentprozesse im Status "ungültig" können von berechtigten Benutzern erneut validiert, erzwungen oder gelöscht werden. Ein Link zu ungültigen Prozessen wird im Dashboard angezeigt, sobald welche vorhanden sind.
Wenn Validierungsbedingungen fehlschlagen, wird der Rendering-Prozess im Status "ungültig" gestoppt. Diese ungültigen Prozesse können Sie über das Dashboard verwalten:
- Erneut validieren: Überprüfung der Daten mit den aktuellen Validierungsregeln
- Erzwingen: Rendering trotz fehlgeschlagener Validierung durchführen
- Löschen: Ungültige Prozesse aus dem System entfernen
Die Fehlermeldungen aus den Validierungsregeln werden auch in Webhooks für ungültige Prozesse verwendet, um Validierungsfehler an Drittsysteme zu übermitteln.
Achten Sie bei komplexen Validierungen auf die Umschaltlogik: Der Schalter "Ungültig, wenn die definierte Bedingung 'true' zurückgibt" bestimmt, ob die Validierung fehlschlägt, wenn die Bedingung erfüllt (true) oder nicht erfüllt (false) ist.
Terminierungen von Elementen
Output.Rocks ermöglicht die zeitgesteuerte Aktivierung und Deaktivierung nahezu aller Elemente über entsprechende Terminierungsfelder.
Mit Terminierungen können Sie präzise steuern, wann bestimmte Elemente im System aktiv sind. Dies ist besonders nützlich für:
- Zeitlich begrenzte Aktionen wie Kampagnen oder saisonale Angebote
- Koordinierte Releases neuer Vorlagen oder Komponenten
- Geplante Aktualisierungen ohne manuelle Eingriffe
In den Backend-Einstellungen steht für fast alle Elemente ein Terminierungsfeld zur Verfügung:
Startdatum des Elements. Elemente werden erst ab diesem Datum beim Rendern beachtet.
Die Aktiv-Checkbox ermöglicht eine sofortige De-/Aktivierung unabhängig vom Datum.
Vor-Terminierung: Mit diesem Feld können Elemente vor-terminiert werden. Setzen Sie ein zukünftiges Datum, um das Element automatisch ab diesem Zeitpunkt zu aktivieren.
Mehrere Elemente mit gleichem Identifier: unterschiedliches 'Aktiv ab' staffelt die Version; bei einer Anfrage gilt das aktive Element mit dem spätesten Aktiv ab (nicht Erstell- oder Änderungsdatum).
Diese Funktion kann auf eine breite Palette von Elementen angewendet werden:
- Vorlagen und Teil‑Vorlagen – Für den koordinierten Wechsel zu neuen Dokumentversionen
- Komponenten – Für schrittweise Updates von wiederverwendbaren Bausteinen
- Standardwerte – Für die Aktualisierung zentraler Informationen zu einem bestimmten Zeitpunkt
- Validierungen – Für temporäre oder neue Prüfregeln
- Medien-Elemente – Bilder, QR-Codes, Anhänge und Grafiken können zeitgesteuert ausgetauscht werden
- Formulare – Für die Aktualisierung von Eingabefeldern oder -strukturen
Mit Terminierungen lassen sich komplexe Release-Strategien umsetzen, bei denen mehrere miteinander verbundene Elemente zu einem bestimmten Zeitpunkt koordiniert aktualisiert werden.
Wenn Sie ein Element deaktivieren, auf das andere Elemente angewiesen sind, kann dies zu Rendering-Fehlern führen. Stellen Sie sicher, dass alle Abhängigkeiten berücksichtigt werden.