Text Templates
Text Templates zijn tekstsjablonen die in Ultimo worden gebruikt voor automatische e-mails, notificaties en meldingen. Ze bevatten expressies (placeholders) die dynamisch worden gevuld met gegevens uit de database, waardoor berichten gepersonaliseerd en contextafhankelijk zijn.
Gerelateerd: messages, ../concepts/contexten, application-element-tree, process-settings
Wat zijn Text Templates?bewerken
Een Text Template bestaat uit: - Subject — het onderwerp (gebruikt in e-mails) - Body — de inhoud, in HTML-formaat (BodyType 1) of platte tekst (BodyType 0) - Taalversies — vertalingen per taalcode (NL, EN, DE, FR, etc.)
Templates worden aangemaakt en beheerd via:
UCT > User Interface > Text Templates
De lijstweergave toont circa 75 standaard templates met kolommen voor sjabloonnummer, data-mapping, afkorting en beschrijving.
Belangrijk: Text Templates worden aangeroepen vanuit workflows (Business Rules). De workflow bepaalt welke template wordt gebruikt en levert de variabelen aan die in de template worden ingevuld.
Template syntaxbewerken
Placeholders (variabelen)bewerken
Placeholders verwijzen naar entiteitsvelden en worden omsloten door ${}:
${Job.Id} → Job-nummer
${Job.Description} → Job-omschrijving
${Employee.Description} → Naam medewerker
${Equipment.Id} → Installatienummer
${Contract.Id} → Contractnummer
${DomainObject.Id} → Generiek: ID van het huidige record
${DomainObject.Description} → Generiek: omschrijving van het huidige record
Je kunt ook gerelateerde velden opvragen via punt-notatie:
${Job.WorkOrder.Id} → PO-modelnummer van de job
${Job.BackOffice.Description} → Naam van het backoffice
${ReservationOccurrence.Id.Reservation.Id} → Reserveringsnummer via occurrence
De ?-operator maakt een veld optioneel (geen fout als het veld niet bestaat):
${Addressee.Description?} → Geeft leeg terug als Addressee niet beschikbaar is
Conditionele logica (#if / #elseif / #else / #end)bewerken
Gebruik #if om delen van de template voorwaardelijk te tonen:
#if(${Employee} != Empty)
Beste ${Employee.Description},
#else
Beste lezer,
#end
Complexer voorbeeld met meerdere condities:
#if(${Job.Status} == 4)
is gemeld.
#elseif(${Job.Status} == 16)
is gereedgemeld.
#else
heeft een statusupdate.
#end
Combineer condities met && (EN) en || (OF):
#if(${ProgressStatusHistory} != Empty && ${ProgressStatusHistory.RemarkText} != Empty)
Omschrijving van de werkzaamheden:
${ProgressStatusHistory.RemarkText}
#end
Ingebouwde functiesbewerken
| Functie | Beschrijving | Voorbeeld |
|---|---|---|
#contextdescription() |
Contextbeschrijving van een record (kleine letters) | #contextdescription(${Job}) → "werkorder" |
#contextdescription_capital() |
Contextbeschrijving met hoofdletter | #contextdescription_capital(${Job}) → "Werkorder" |
#statusdescription() |
Statusbeschrijving van een record | #statusdescription(${Reservation}) → "Goedgekeurd" |
#geturl() |
URL naar een specifiek scherm genereren | #geturl(${DomainObject} job101) → link naar job-scherm |
#moduleenabled() |
Controleer of een module is ingeschakeld | #moduleenabled('MultiTimeZone') |
Omgevingsvariabelenbewerken
#{Environment.CurrentTimeZone.Name} → Naam van de actieve tijdzone
#{UltimoSettings.XXX} → Applicatie-instellingen
Veelgebruikte standaard templatesbewerken
Statuswijziging notificatiesbewerken
| Template ID | Beschrijving | Gebruikt voor |
|---|---|---|
| 00000000012 | Wijziging voortgangsstatus | E-mail bij voortgangsstatuswijziging van jobs/meldingen |
| 00000000013 | Record toegekend | Notificatie bij toekenning van een job |
| 00000000062 | Wijziging voortgangsstatus (variant) | Alternatieve voortgangsstatusnotificatie |
| 00000000040 | Job gemeld/gereedgemeld/statusupdate | Selfservice-notificatie voor melders |
Periodiek onderhoudbewerken
| Template ID | Beschrijving | Gebruikt voor |
|---|---|---|
| 00000000029 | PO-job met externe start over 2 weken | Vroegtijdige notificatie voor periodiek onderhoud |
| 00000000059 | Resultaat automatisch genereren PO-jobs | Foutmeldingen bij PO-generatie |
| 00000009000 | PO-model notificatie | Contextbeschrijving PO-model |
| 00000009001 | Overzicht PO-modellen | Rapport met PO-model overzicht |
SLA en doorlooptijdbewerken
| Template ID | Beschrijving | Gebruikt voor |
|---|---|---|
| 00000000032-35 | Percentage doorlooptijd bereikt | SLA-waarschuwingen (bijv. 70%, 90%) |
| 00000000036-39 | Percentage responstijd verstreken | Responstijd-waarschuwingen |
| 00000000028 | 70% van Resolution Deadline bereikt | ITSM SLA-escalatie |
Inkoop en contractenbewerken
| Template ID | Beschrijving | Gebruikt voor |
|---|---|---|
| 00000000014 | Opzegtermijn contract | Waarschuwing naderende opzegtermijn |
| 00000000027 | Opzegtermijn contract (variant) | Contractnotificatie met ID |
| 00000000053 | Status bestelaanvraag gewijzigd | Purchase request statuswijziging |
Selfservice en meldingenbewerken
| Template ID | Beschrijving | Gebruikt voor |
|---|---|---|
| 00000010000 | Bevestigen melding | Bevestigingsmail voor selfservice-melder |
| 00000010001 | Melding gereedgemeld | Gereedmelding naar melder |
| 00000000066 | Beoordeling/reactie gevraagd | Klanttevredenheidsenquete |
| 00000000067 | Melding gereedgemeld (variant) | Gereedmelding met details |
Import/Export connectorsbewerken
| Template ID | Beschrijving | Gebruikt voor |
|---|---|---|
| 00000000048 | FAILED: Export | Foutmelding bij export |
| 00000000049 | SUCCESS: Export | Succesmelding bij export |
| 00000000050 | FAILED: Import | Foutmelding bij import |
| 00000000051 | SUCCESS (WITH ERRORS): Import | Succesmelding import (met fouten) |
HSE en veiligheidbewerken
| Template ID | Beschrijving | Gebruikt voor |
|---|---|---|
| 00000000055 | Veiligheidsincident gemeld | Notificatie bij nieuw HSE-incident |
| 00000000056 | Veiligheidsincident gereedgemeld | Notificatie bij afhandeling incident |
| 00000000094 | Field Safety Notice | Notificatie bij field safety notices (instrumenten) |
Goedkeuringen (Approvals)bewerken
| Template ID | Beschrijving | Gebruikt voor |
|---|---|---|
| 00000000096 | Nieuwe goedkeuring toegekend | Notificatie bij nieuwe goedkeuringsaanvraag |
| 00000000097 | Goedkeuring goedgekeurd | Bevestiging goedkeuring |
| 00000000098 | Goedkeuring afgewezen | Notificatie bij afwijzing |
Voorbeeld: complete e-mailtemplatebewerken
Dit is een vereenvoudigd voorbeeld van template 00000000012 (voortgangsstatuswijziging):
<style type="text/css">
.body { font-family: Noto Sans Regular, Verdana, Arial, Helvetica; font-size: 15px; }
.button { background-color: #0173D1; border-radius: 2px; padding: 8px 48px; text-align: center; }
.button a:link { color: white; text-decoration: none; }
.footer { font-size: 12px; font-style: italic; }
</style>
<table class="table" align="center">
<tr><td>
<img src="https://www.ultimo.com/storage/ultimo-purplebackground_dark-x150px.png" width="130">
</td></tr>
<tr><td>
<span class="body">
Beste#if(${Addressee.Description?} != Empty) ${Addressee.Description}#else lezer#end,<br><br>
Hierbij willen wij melden dat de voortgangsstatus van
#contextdescription(${DomainObject}) ${DomainObject.Id}
#if(${DomainObject.Description} != Empty) - ${DomainObject.Description}#end
is gewijzigd
#if(${OldProgressStatus} != Empty) van ${OldProgressStatus.Description}#end
naar ${NewProgressStatus.Description}.<br><br>
#if(${ProgressStatusHistory} != Empty && ${ProgressStatusHistory.RemarkText} != Empty)
Omschrijving van de werkzaamheden:<br>
${ProgressStatusHistory.RemarkText}<br>
#end
</span>
</td></tr>
<tr><td>
<table class="button">
<tr><td>
<a href="#geturl(${DomainObject} job101)" target="_blank">Ga naar de melding</a>
</td></tr>
</table>
</td></tr>
<tr><td>
<span class="footer">
Dit is een automatisch gegenereerde e-mail.
Het is niet mogelijk dit bericht te beantwoorden.
#if(#moduleenabled('MultiTimeZone'))
De tijden vermeld in deze e-mail zijn op basis van tijdzone
#{Environment.CurrentTimeZone.Name}.
#end
</span>
</td></tr>
</table>
Bewerkbare secties (Editable Content)bewerken
Sinds recente versies kunnen application managers bepalen welke delen van een e-mailtemplate de gebruiker mag bewerken bij het versturen. Gebruik de volgende tags:
<EDITABLE_CONTENT_SECTION_START>
Hier kan de gebruiker tekst aanpassen voordat de e-mail wordt verstuurd.
<EDITABLE_CONTENT_SECTION_END>
De gebruiker ziet een preview van de e-mail met alleen de bewerkbare secties als invoervelden.
Meertaligheidbewerken
Elke template heeft een standaard body en subject, plus vertaalde versies per taalcode:
| Taalcode | Taal |
|---|---|
| NL | Nederlands |
| EN | Engels |
| EN-US | Engels (VS) |
| DE | Duits |
| FR | Frans |
| ES | Spaans |
| IT | Italiaans |
| PL | Pools |
| TR | Turks |
| NB | Noors |
| SV | Zweeds |
| DA | Deens |
| FI | Fins |
| SK | Slowaaks |
| PT-BR | Portugees (Brazilie) |
| HU | Hongaars |
| ZH | Chinees |
| EL | Grieks |
| SL | Sloveens |
De taal die wordt gebruikt hangt af van de taalinstelling van de ontvanger (medewerker/gebruiker).
Templates aanpassen via UCTbewerken
Een bestaande template wijzigenbewerken
- Ga naar
UCT > User Interface > Text Templates - Selecteer de template in de lijst
- Pas de body aan in het Basic-tabblad
- Voeg taalversies toe of wijzig bestaande vertalingen
- Test de template met realistische data
Een nieuwe template aanmakenbewerken
- Maak een nieuwe template aan via de lijst
- Geef een uniek template ID en beschrijving op
- Kies het BodyType (0 = platte tekst, 1 = HTML)
- Voeg de body toe met placeholders
- Voeg taalversies toe
- Koppel de template aan een workflow via de
<Email>instructie
Template gebruiken in een workflowbewerken
In een workflow verwijs je naar een template via het template ID:
<Email TextTemplateId="00000000012"
To="${Addressee.Email}"
Subject="${TextTemplate.Subject}">
</Email>
Waar worden Text Templates gebruikt?bewerken
Met de "Used in"-functionaliteit in UCT kun je opzoeken waar een specifieke template wordt gebruikt:
- Progress statuses — templates gekoppeld aan voortgangsstatusovergangen
- Workflows — templates aangeroepen via de
<Email>instructie - Screen files — templates gebruikt in schermacties (bijv. e-mail versturen vanuit een scherm)
Best practicesbewerken
- Test altijd met realistische data — een verkeerde veldnaam resulteert in lege of foutieve waarden
- Gebruik #if voor optionele velden — voorkom dat lege velden zichtbaar worden
- Houd templates onderhoudbaar — gebruik CSS-klassen voor styling i.p.v. inline styles
- Consistente naamgeving — geef templates een beschrijvende naam die het doel aangeeft
- Taalversies bijhouden — bij wijzigingen aan de NL-versie, update ook de andere talen
- Gebruik de ?-operator — voor velden die niet altijd beschikbaar zijn:
${Veld?} - Standaard templates niet verwijderen — pas ze aan, maar verwijder ze niet (workflows verwijzen ernaar)
Zie ookbewerken
- messages — Systeemberichten en message codes
- application-element-tree — AET-autorisatie en instellingen
- process-settings — Process settings per context
- ../concepts/contexten — Contexten en modules
- ../concepts/uct-overzicht — UCT configuratie overzicht