Platzhalter in Dokumenten
Bitte beachten Sie, dass sich die Abläufe und Funktionen in während der weiteren Entwicklung ändern können.
Einzelne Dokumente können als Vorlagen erstellt werden. Diese Vorlagen können genutzt werden, um automatische Reports zu erstellen.
Um das Ausfüllen mit Daten aus Ihrer Software zu ermöglichen, muss das Schlagwort _dynamicContent verknüpft werden.
Platzhalter werden gefunden, in dem die Variable in {{variable}} in doppelt geschweiften Klammern verwendet wird.
Für Beispiele zur Anwendung werfen Sie einen Blick in unsere Vorlagen und hier insbesondere in das Dokument Managementbewertung.
Das Ersetzen von Platzhaltern nutzt die Handlebars Templating Sprache. Somit können auch komplexe Aufgaben, wie das rendern von Listen umgesetzt werden.
Wenn Sie ein Dokument, das mit dem entsprechenden Schlagwort versehen ist, bearbeiten, werden Ihnen Vorschläge zur Autovervollständigung angezeigt, sobald Sie "{" tippen.
Die Werte der Platzhalter werden immer in drei Namensräumen geladen.
- "Current": Aktueller Zeitraum
- "Comapre": Vergleichszeitraum
- Statische Daten (Namen der Organisationen etc.), die nicht keinen Bezug zu einem Zeitraum haben.
Der Aufbau innerhalb dieser beiden Bereiche ist identisch. Der Zeitraum bezieht sich dabei, sofern möglich, auf die Erstellungsdaten der jeweiligen Objekte.
Beispiele für Platzhalter
Folgende Platzhalter können verwendet und ersetzt werden:
| Platzhalter | Ursprung |
|---|---|
| organisation | Firma aus Admin Startseite |
{{organisation.title}} | Name der Firma |
{{organisation.addresses.[0].line1}} | Erste Zeile der Anschrift der Firma |
| managingDirector | Geschäftsführer aus Admin Startseite Typ: Person |
{{managingDirector.fullName}} | Vor- und Nachname GF |
{{managingDirector.email}} | E-Mail GF |
{{today}} | Aktuelles Datum |
| dataProtectionOfficer | Datenschutzbeauftragter aus Admin Startseite Typ:Person |
{{dataProtectionOfficer.fullName}} | Vor- und Nachname DSB |
{{dataProtectionOfficer.email}} | E-Mail DSB |
Organisationen und Personen verfügen zusätzlich noch über Listen von verknüpften Adressen. Im einfachsten Fall ist es einfach die primäre Adresse. Um die erste Adresse einer Liste (Array) von verknüpften Adressen zu erhalten wird diese Notation benötigt organisation.addresses.[0].[addressproperty]
Eigenschaften
In der folgenden Übersicht finden Sie weitere Eigenschaften der zur Verfügung stehenden Objekte.
- Personen
- Adressen
- Weitere Platzhalter
interface Person {
firstName: string;
lastName: string;
fullName: string;
telephones: Telephone[];
addresses: Address[];
}
interface Telephone {
number: string;
}
| Eigenschaft | Beispiel |
|---|---|
| line1 | Feldstraße 61-63 |
| line2 | Postfach xy |
| line3 | Hinterhaus |
| zipCode | 44141 |
| city | Dortmund |
| country | Deutschland |
Hier finden Sie eine weitere (unvollständige) Liste der vorhanden Platzhalter.
[
"organisation",
"organisation.externalId",
"organisation.contacts",
"organisation.contacts.length",
"organisation.responsible",
"organisation.addresses",
"organisation.addresses.length",
"organisation.telephones",
"organisation.telephones.length",
"organisation.emails",
"organisation.emails.length",
"organisation.tags",
"organisation.tags.length",
"organisation.isProductOwner",
"organisation.isCustomer",
"organisation.isSupplier",
"organisation.description",
"organisation.url",
"organisation.primaryAddress",
"organisation.primaryTelephone",
"organisation.customFields",
"organisation.customFields.length",
"organisation.title",
"organisation.capabilities",
"organisation.status",
"organisation.lastUpdatedBy",
"organisation.lastUpdatedAt",
"organisation.isDeleted",
"organisation.isDeletedBy",
"organisation.isDeletedAt",
"organisation.createdAt",
"organisation.createdBy",
"organisation.links",
"organisation.links.length",
"organisation.id",
"current.reportFrom",
"current.reportTo",
"current.queryParametersAsString",
"current.costs",
"current.costs.length",
"current.costSums",
"current.costSums.length",
"current.toDos",
"current.toDos.total",
"current.toDos.total.length",
"current.toDos.errorMessages",
"current.toDos.errorMessages.length",
"current.toDos.open",
"current.toDos.open.length",
"current.toDos.inProgress",
"current.toDos.inProgress.length",
"current.toDos.completed",
"current.toDos.completed.length",
"current.toDos.notCompleted",
"current.toDos.notCompleted.length",
"current.toDos.notCompletedDelayed",
"current.toDos.notCompletedDelayed.length",
"current.toDos.tags",
"current.toDos.tags.length",
"current.toDos.totalProcessingTimeDur",
"current.toDos.totalProcessingTime",
"current.toDos.totalProcessingTimeFormattedAsDays",
"current.toDos.costs",
"current.toDos.costs.length",
"current.toDos.costSums",
"current.toDos.costSums.length",
"current.toDos.timeCostsDuration",
"current.toDos.costAsHours",
"current.toDos.costAsHoursFormatted",
"current.toDos.totalUrl",
"current.audits",
"current.audits.total",
"current.audits.total.length",
"current.audits.errorMessages",
"current.audits.errorMessages.length",
"current.audits.open",
"current.audits.open.length",
"current.audits.inProgress",
"current.audits.inProgress.length",
"current.audits.completed",
"current.audits.completed.length",
"current.audits.notCompleted",
"current.audits.notCompleted.length",
"current.audits.notCompletedDelayed",
"current.audits.notCompletedDelayed.length",
"current.audits.tags",
"current.audits.tags.length",
"current.audits.totalProcessingTimeDur",
"current.audits.totalProcessingTime",
"current.audits.totalProcessingTimeFormattedAsDays",
"current.audits.costs",
"current.audits.costs.length",
"current.audits.costSums",
"current.audits.costSums.length",
"current.audits.timeCostsDuration",
"current.audits.costAsHours",
"current.audits.costAsHoursFormatted",
"current.audits.totalUrl",
"current.audits.connectedTodos",
"current.goals",
"current.goals.total",
"current.goals.total.length",
"current.goals.errorMessages",
"current.goals.errorMessages.length",
"current.goals.open",
"current.goals.open.length",
"current.goals.inProgress",
"current.goals.inProgress.length",
"current.goals.completed",
"current.goals.completed.length",
"current.goals.notCompleted",
"current.goals.notCompleted.length",
"current.goals.notCompletedDelayed",
"current.goals.notCompletedDelayed.length",
"current.goals.tags",
"current.goals.tags.length",
"current.goals.totalProcessingTimeDur",
"current.goals.totalProcessingTime",
"current.goals.totalProcessingTimeFormattedAsDays",
"current.goals.costs",
"current.goals.costs.length",
"current.goals.costSums",
"current.goals.costSums.length",
"current.goals.timeCostsDuration",
"current.goals.costAsHours",
"current.goals.costAsHoursFormatted",
"current.goals.totalUrl",
"current.goals.connectedTodos",
"current.goals.progresses",
"current.goals.progresses.length",
"current.trainings",
"current.trainings.total",
"current.trainings.total.length",
"current.trainings.errorMessages",
"current.trainings.errorMessages.length",
"current.trainings.open",
"current.trainings.open.length",
"current.trainings.inProgress",
"current.trainings.inProgress.length",
"current.trainings.completed",
"current.trainings.completed.length",
"current.trainings.notCompleted",
"current.trainings.notCompleted.length",
"current.trainings.notCompletedDelayed",
"current.trainings.notCompletedDelayed.length",
"current.trainings.tags",
"current.trainings.tags.length",
"current.trainings.totalProcessingTimeDur",
"current.trainings.totalProcessingTime",
"current.trainings.totalProcessingTimeFormattedAsDays",
"current.trainings.costs",
"current.trainings.costs.length",
"current.trainings.costSums",
"current.trainings.costSums.length",
"current.trainings.timeCostsDuration",
"current.trainings.costAsHours",
"current.trainings.costAsHoursFormatted",
"current.trainings.totalUrl",
"current.trainings.connectedTodos",
"current.claims",
"current.claims.total",
"current.claims.total.length",
"current.claims.errorMessages",
"current.claims.errorMessages.length",
"current.claims.open",
"current.claims.open.length",
"current.claims.inProgress",
"current.claims.inProgress.length",
"current.claims.completed",
"current.claims.completed.length",
"current.claims.notCompleted",
"current.claims.notCompleted.length",
"current.claims.notCompletedDelayed",
"current.claims.notCompletedDelayed.length",
"current.claims.tags",
"current.claims.tags.length",
"current.claims.totalProcessingTimeDur",
"current.claims.totalProcessingTime",
"current.claims.totalProcessingTimeFormattedAsDays",
"current.claims.costs",
"current.claims.costs.length",
"current.claims.costSums",
"current.claims.costSums.length",
"current.claims.timeCostsDuration",
"current.claims.costAsHours",
"current.claims.costAsHoursFormatted",
"current.claims.totalUrl",
"current.claims.intern",
"current.claims.customer",
"current.claims.supplier",
"current.claims.connectedTodos",
"current.opportunities",
"current.opportunities.total",
"current.opportunities.total.length",
"current.opportunities.errorMessages",
"current.opportunities.errorMessages.length",
"current.opportunities.open",
"current.opportunities.open.length",
"current.opportunities.inProgress",
"current.opportunities.inProgress.length",
"current.opportunities.completed",
"current.opportunities.completed.length",
"current.opportunities.notCompleted",
"current.opportunities.notCompleted.length",
"current.opportunities.notCompletedDelayed",
"current.opportunities.notCompletedDelayed.length",
"current.opportunities.tags",
"current.opportunities.tags.length",
"current.opportunities.totalProcessingTimeDur",
"current.opportunities.totalProcessingTime",
"current.opportunities.totalProcessingTimeFormattedAsDays",
"current.opportunities.costs",
"current.opportunities.costs.length",
"current.opportunities.costSums",
"current.opportunities.costSums.length",
"current.opportunities.timeCostsDuration",
"current.opportunities.costAsHours",
"current.opportunities.costAsHoursFormatted",
"current.opportunities.totalUrl",
"current.opportunities.connectedTodos",
"current.opportunities.evaluations",
"current.opportunities.evaluations.length",
"current.ideas",
"current.ideas.total",
"current.ideas.total.length",
"current.ideas.errorMessages",
"current.ideas.errorMessages.length",
"current.ideas.open",
"current.ideas.open.length",
"current.ideas.inProgress",
"current.ideas.inProgress.length",
"current.ideas.completed",
"current.ideas.completed.length",
"current.ideas.notCompleted",
"current.ideas.notCompleted.length",
"current.ideas.notCompletedDelayed",
"current.ideas.notCompletedDelayed.length",
"current.ideas.tags",
"current.ideas.tags.length",
"current.ideas.totalProcessingTimeDur",
"current.ideas.totalProcessingTime",
"current.ideas.totalProcessingTimeFormattedAsDays",
"current.ideas.costs",
"current.ideas.costs.length",
"current.ideas.costSums",
"current.ideas.costSums.length",
"current.ideas.timeCostsDuration",
"current.ideas.costAsHours",
"current.ideas.costAsHoursFormatted",
"current.ideas.totalUrl",
"current.ratings",
"current.ratings.total",
"current.ratings.total.length",
"current.ratings.customer",
"current.ratings.supplier",
"current.ratings.averageRating",
"current.ratings.averageRatingFormatted",
"current.ratings.latestRating",
"current.employees",
"current.employees.total",
"current.employees.total.length",
"current.employees.totalUrl",
"current.inventoryItems",
"current.inventoryItems.totalUrl",
"current.inventoryItems.all",
"current.inventoryItems.all.length",
"current.inventoryItems.allExcluded",
"current.inventoryItems.allExcluded.length",
"current.inventoryItems.validInspection",
"current.inventoryItems.validInspection.length",
"current.inventoryItems.partOfItemsWithValidInspection",
"current.inventoryItems.partOfItemsWithValidInspectionFormatted",
"current.inventoryItems.inventoryInspectionsDone",
"current.inventoryItems.inventoryInspectionsDone.length",
"compare.reportFrom",
"compare.reportTo",
"compare.queryParametersAsString",
"compare.costs",
"compare.costs.length",
"compare.costSums",
"compare.costSums.length",
"compare.toDos",
"compare.toDos.total",
"compare.toDos.total.length",
"compare.toDos.errorMessages",
"compare.toDos.errorMessages.length",
"compare.toDos.open",
"compare.toDos.open.length",
"compare.toDos.inProgress",
"compare.toDos.inProgress.length",
"compare.toDos.completed",
"compare.toDos.completed.length",
"compare.toDos.notCompleted",
"compare.toDos.notCompleted.length",
"compare.toDos.notCompletedDelayed",
"compare.toDos.notCompletedDelayed.length",
"compare.toDos.tags",
"compare.toDos.tags.length",
"compare.toDos.totalProcessingTimeDur",
"compare.toDos.totalProcessingTime",
"compare.toDos.totalProcessingTimeFormattedAsDays",
"compare.toDos.costs",
"compare.toDos.costs.length",
"compare.toDos.costSums",
"compare.toDos.costSums.length",
"compare.toDos.timeCostsDuration",
"compare.toDos.costAsHours",
"compare.toDos.costAsHoursFormatted",
"compare.toDos.totalUrl",
"compare.audits",
"compare.audits.total",
"compare.audits.total.length",
"compare.audits.errorMessages",
"compare.audits.errorMessages.length",
"compare.audits.open",
"compare.audits.open.length",
"compare.audits.inProgress",
"compare.audits.inProgress.length",
"compare.audits.completed",
"compare.audits.completed.length",
"compare.audits.notCompleted",
"compare.audits.notCompleted.length",
"compare.audits.notCompletedDelayed",
"compare.audits.notCompletedDelayed.length",
"compare.audits.tags",
"compare.audits.tags.length",
"compare.audits.totalProcessingTimeDur",
"compare.audits.totalProcessingTime",
"compare.audits.totalProcessingTimeFormattedAsDays",
"compare.audits.costs",
"compare.audits.costs.length",
"compare.audits.costSums",
"compare.audits.costSums.length",
"compare.audits.timeCostsDuration",
"compare.audits.costAsHours",
"compare.audits.costAsHoursFormatted",
"compare.audits.totalUrl",
"compare.audits.connectedTodos",
"compare.goals",
"compare.goals.total",
"compare.goals.total.length",
"compare.goals.errorMessages",
"compare.goals.errorMessages.length",
"compare.goals.open",
"compare.goals.open.length",
"compare.goals.inProgress",
"compare.goals.inProgress.length",
"compare.goals.completed",
"compare.goals.completed.length",
"compare.goals.notCompleted",
"compare.goals.notCompleted.length",
"compare.goals.notCompletedDelayed",
"compare.goals.notCompletedDelayed.length",
"compare.goals.tags",
"compare.goals.tags.length",
"compare.goals.totalProcessingTimeDur",
"compare.goals.totalProcessingTime",
"compare.goals.totalProcessingTimeFormattedAsDays",
"compare.goals.costs",
"compare.goals.costs.length",
"compare.goals.costSums",
"compare.goals.costSums.length",
"compare.goals.timeCostsDuration",
"compare.goals.costAsHours",
"compare.goals.costAsHoursFormatted",
"compare.goals.totalUrl",
"compare.goals.connectedTodos",
"compare.goals.progresses",
"compare.goals.progresses.length",
"compare.trainings",
"compare.trainings.total",
"compare.trainings.total.length",
"compare.trainings.errorMessages",
"compare.trainings.errorMessages.length",
"compare.trainings.open",
"compare.trainings.open.length",
"compare.trainings.inProgress",
"compare.trainings.inProgress.length",
"compare.trainings.completed",
"compare.trainings.completed.length",
"compare.trainings.notCompleted",
"compare.trainings.notCompleted.length",
"compare.trainings.notCompletedDelayed",
"compare.trainings.notCompletedDelayed.length",
"compare.trainings.tags",
"compare.trainings.tags.length",
"compare.trainings.totalProcessingTimeDur",
"compare.trainings.totalProcessingTime",
"compare.trainings.totalProcessingTimeFormattedAsDays",
"compare.trainings.costs",
"compare.trainings.costs.length",
"compare.trainings.costSums",
"compare.trainings.costSums.length",
"compare.trainings.timeCostsDuration",
"compare.trainings.costAsHours",
"compare.trainings.costAsHoursFormatted",
"compare.trainings.totalUrl",
"compare.trainings.connectedTodos",
"compare.claims",
"compare.claims.total",
"compare.claims.total.length",
"compare.claims.errorMessages",
"compare.claims.errorMessages.length",
"compare.claims.open",
"compare.claims.open.length",
"compare.claims.inProgress",
"compare.claims.inProgress.length",
"compare.claims.completed",
"compare.claims.completed.length",
"compare.claims.notCompleted",
"compare.claims.notCompleted.length",
"compare.claims.notCompletedDelayed",
"compare.claims.notCompletedDelayed.length",
"compare.claims.tags",
"compare.claims.tags.length",
"compare.claims.totalProcessingTimeDur",
"compare.claims.totalProcessingTime",
"compare.claims.totalProcessingTimeFormattedAsDays",
"compare.claims.costs",
"compare.claims.costs.length",
"compare.claims.costSums",
"compare.claims.costSums.length",
"compare.claims.timeCostsDuration",
"compare.claims.costAsHours",
"compare.claims.costAsHoursFormatted",
"compare.claims.totalUrl",
"compare.claims.intern",
"compare.claims.customer",
"compare.claims.supplier",
"compare.claims.connectedTodos",
"compare.opportunities",
"compare.opportunities.total",
"compare.opportunities.total.length",
"compare.opportunities.errorMessages",
"compare.opportunities.errorMessages.length",
"compare.opportunities.open",
"compare.opportunities.open.length",
"compare.opportunities.inProgress",
"compare.opportunities.inProgress.length",
"compare.opportunities.completed",
"compare.opportunities.completed.length",
"compare.opportunities.notCompleted",
"compare.opportunities.notCompleted.length",
"compare.opportunities.notCompletedDelayed",
"compare.opportunities.notCompletedDelayed.length",
"compare.opportunities.tags",
"compare.opportunities.tags.length",
"compare.opportunities.totalProcessingTimeDur",
"compare.opportunities.totalProcessingTime",
"compare.opportunities.totalProcessingTimeFormattedAsDays",
"compare.opportunities.costs",
"compare.opportunities.costs.length",
"compare.opportunities.costSums",
"compare.opportunities.costSums.length",
"compare.opportunities.timeCostsDuration",
"compare.opportunities.costAsHours",
"compare.opportunities.costAsHoursFormatted",
"compare.opportunities.totalUrl",
"compare.opportunities.connectedTodos",
"compare.opportunities.evaluations",
"compare.opportunities.evaluations.length",
"compare.ideas",
"compare.ideas.total",
"compare.ideas.total.length",
"compare.ideas.errorMessages",
"compare.ideas.errorMessages.length",
"compare.ideas.open",
"compare.ideas.open.length",
"compare.ideas.inProgress",
"compare.ideas.inProgress.length",
"compare.ideas.completed",
"compare.ideas.completed.length",
"compare.ideas.notCompleted",
"compare.ideas.notCompleted.length",
"compare.ideas.notCompletedDelayed",
"compare.ideas.notCompletedDelayed.length",
"compare.ideas.tags",
"compare.ideas.tags.length",
"compare.ideas.totalProcessingTimeDur",
"compare.ideas.totalProcessingTime",
"compare.ideas.totalProcessingTimeFormattedAsDays",
"compare.ideas.costs",
"compare.ideas.costs.length",
"compare.ideas.costSums",
"compare.ideas.costSums.length",
"compare.ideas.timeCostsDuration",
"compare.ideas.costAsHours",
"compare.ideas.costAsHoursFormatted",
"compare.ideas.totalUrl",
"compare.ratings",
"compare.ratings.total",
"compare.ratings.total.length",
"compare.ratings.customer",
"compare.ratings.supplier",
"compare.ratings.averageRating",
"compare.ratings.averageRatingFormatted",
"compare.ratings.latestRating",
"compare.employees",
"compare.employees.total",
"compare.employees.total.length",
"compare.employees.totalUrl",
"compare.inventoryItems",
"compare.inventoryItems.totalUrl",
"compare.inventoryItems.all",
"compare.inventoryItems.all.length",
"compare.inventoryItems.allExcluded",
"compare.inventoryItems.allExcluded.length",
"compare.inventoryItems.validInspection",
"compare.inventoryItems.validInspection.length",
"compare.inventoryItems.partOfItemsWithValidInspection",
"compare.inventoryItems.partOfItemsWithValidInspectionFormatted",
"compare.inventoryItems.inventoryInspectionsDone",
"compare.inventoryItems.inventoryInspectionsDone.length",
];
Hilfen zur Formatierung
Werte, die nicht nur einfache Textinformationen (z.B. Titel einer Maßnahme) sind, können formatiert werden. Die Datentypen und möglichen Formatierungen sehen finden Sie in der folgenden Tabelle.
| Datentype | Befehl zur Formatierung | Weitere Optionen |
|---|---|---|
| Datum/Zeit | {{formatDate order.createdAt "datetime"}} | Option: "datetime" oder "date". |
| Dezimal → Prozent | {{formatDecimalToPercentage product.discountRate}} | Erwartet Float (z. B. 0.25). |
| Dauer (Stunden → Einheit) | {{formatHoursToDays task.durationHours}} {{formatHoursToDays task.durationHours "hours"}} | Einheiten: years, quarters, months, weeks, days, hours, minutes, seconds, milliseconds. Default: days. |
| String (Trenner einfügen) | {{ addSeparator user.name ", " }} | 2 Argument ist der Separator (String). |
| Array-Objekt (find by id) | {{#findById products "1234"}} <div> Product found: {{name}} (ID: {{id}}) </div> {{/findById}} | Sucht Objekt mit id in products und rendert den Block im gefundenen Kontext. id-Vergleich als String. |
| Bild/URL | {{{image product.imageUrl }}} | Achtung: drei geschweifte Klammern, damit HTML nicht escaped wird. |
Erstellung automatischer Berichte für einzelne Objekte
Es ist hilfreich für einzelne Objekte wie Reklamationen oder Audits automatisch Berichte über das Objekt selbst und die damit verknüpften Informationen erstellen zu können. Diese Vorlagen können im Dokumentenmanagement vordefiniert und dann in den einzelnen Apps verwendet werden (bisher nur Auditmanagement und Reklamationsmanagement). In der Ansicht zum Ausfüllen des Berichts gibt es unter dem Tab Data eine Übersicht aller zur Verfügung stehenden Daten, die abgefragt werden können. Im folgenden bieten wir einige Beispiele für gängige Informationen:
Abfrage von Informationen aus dem Objekt selbst:
| Platzhalter | Beschreibung der Abfrage |
|---|---|
{{id}} | ID |
{{title}} | Titel |
{{description}} | Beschreibung |
{{responsible.fullName}} | Verantwortlicher |
{{formatDate deadline "date"}} | Frist |
{{#findById customFields "myCfId"}} {{value}} {{/findById}} | Abfrage eines Custom Fields anhand der ID |
{{#each customFields}} {{value}} {{/each}} | Abfrage aller ausgefüllten Custom Fields |
Abfrage von mit dem Objekte verknüpften Informationen
Die Anzahl der verknüpften Informationen (z.B. Anzahl der Maßnahmen) kann variieren, daher ist es notwendig eine Schleife zu definieren, die alle Informationen eines Typs (z.B. Maßnahmen) abfragt. Es bietet sich an, diese Schleife in einer Tabelle aufzubauen:
| ID | Titel | Frist | Verantwortlich |
|---|---|---|---|
{{#each todos}} | |||
{{id}} | {{title}} | {{formatDate deadline "date"}} | {{responsible.fullName}} |
{{/each}} |
bezeichnet dem Beginn der Schleife. Der Bestandteil todos gibt dabei an, dass die Schleife die verknüpften Maßnahmen abfragt. {{ #each todos }} bezeichnet das Ende der Schleife.{{/each}}
Die Parameter innerhalb der Schleife fragen zu jeder Maßnahme die Informationen gemäß der Tabellenüberschrift ab.