Categorie: workflows Bijgewerkt: 2026-04-05 expressions functies formules berekeningen syntax

Expressions

Expressions zijn formules en functies die in Ultimo workflows, schermen, templates en berichten worden gebruikt. Ze maken het mogelijk om waarden te berekenen, te vergelijken, te formatteren en te transformeren. Dit artikel documenteert alle operators en functies. Zie workflow-engine voor de context waarin expressions worden gebruikt.

Syntaxbewerken

Property referencesbewerken

Waarden worden benaderd via ${...} syntax:

${Job.Description}              - Property van een domain object
${Job.Equipment.Description}    - Geneste property
${Jobs[0].Description}          - Element uit een lijst (zero-based index)
${Counter}                      - Interne workflow property

Environment variabelenbewerken

Systeemwaarden via #{...} syntax:

#{Environment.CurrentDate}      - Huidige datum
#{Environment.CurrentDateTime}  - Huidige datum+tijd
#{User}                         - Huidige gebruiker
#{Settings.EmailSender}         - Applicatie-instelling
#{UltimoSettings.StockLevelPerSite} - Ultimo setting

Expressies als waardebewerken

Expressies worden geactiveerd met het = prefix:

<Assign Name="..." Property="${Job.Deadline}" Value="=#adddays(#{Environment.CurrentDate}, 7)" />

Strings en quotesbewerken

Letterlijke strings worden omsloten door dubbele aanhalingstekens ("). Een aanhalingsteken in een string escape je met backslash (\"). Een backslash zelf met dubbele backslash (\\).

Keyword Emptybewerken

Gebruik Empty om te controleren of een waarde leeg is:

${Job.Description} != Empty     - Beschrijving is ingevuld
${Equipment} == Empty           - Equipment is niet gezet
${Equipment.Jobs} == Empty      - Equipment heeft geen jobs (lege lijst)

Operatorsbewerken

Logische operatorsbewerken

Operator Beschrijving XML-variant Voorbeeld
&& Logische AND &amp;&amp; ${A} == True &amp;&amp; ${B} == True
\|\| Logische OR ${A} == True \|\| ${B} == True
! Logische NOT !${IsActive}

Let op: In XML moet && worden geschreven als &amp;&amp;.

Vergelijkingsoperatorsbewerken

Operator Beschrijving XML-variant
== Gelijk aan Equals
!= Niet gelijk aan NotEquals
> Groter dan GreaterThan of &gt;
>= Groter dan of gelijk GreaterThanOrEqual of &gt;=
< Kleiner dan SmallerThan of &lt;
<= Kleiner dan of gelijk SmallerThanOrEqual of &lt;=

Let op: In XML-condities moet je &lt; en &gt; gebruiken in plaats van < en >.

Rekenkundige operatorsbewerken

Operator Beschrijving Voorbeeld
+ Optellen ${A} + ${B}
- Aftrekken ${A} - ${B}
* Vermenigvuldigen ${A} * ${B}
/ Delen ${A} / ${B}

Bitwise operatorsbewerken

Operator Beschrijving
& Bitwise AND
\| Bitwise OR

Haakjesbewerken

Haakjes worden ondersteund voor groepering:

(${A} > 3) && (${B} < 9)

Niet ondersteunde operatorsbewerken

Operator Status
= Niet ondersteund (gebruik ==)
% Niet ondersteund

String functiesbewerken

#substring(str, start [, len])bewerken

Retourneert een deel van een string. Start is zero-based. Zonder len wordt de rest van de string teruggegeven.

#substring("building", 3, 4)  -->  "ldin"
#substring(${DocumentFile}, 0, #length(${Equipment.Id}))

Beschikbaar in: Screen, Workflow, Message, Template


#length(str)bewerken

Retourneert de lengte van een string.

#length("Battery")  -->  7

Beschikbaar in: Screen, Workflow, Message, Template


#replace(str, needle, replacement)bewerken

Vervang alle voorkomens van needle door replacement.

#replace("basically", "ally", "")  -->  "basic"

Beschikbaar in: Workflow, Message, Template


#concat(str, str [, str ...])bewerken

Voeg meerdere strings samen.

#concat(${FirstName}, " ", ${LastName})  -->  "John Smith"

Beschikbaar in: Workflow, Message, Template


#contains(str, needle)bewerken

Retourneert true als de string de zoekterm bevat.

#contains("ABBABAAA", "AB")  -->  True
#contains("ABBABAAA", "AC")  -->  False

Beschikbaar in: Workflow, Message, Template


#startswith(str, searchstring)bewerken

Retourneert true als de string begint met de zoekterm.

#startswith("fileserver", "file")  -->  True
#startswith("fileserver", "cer")   -->  False

Beschikbaar in: Screen, Workflow, Message, Template


#endswith(str, searchstring)bewerken

Retourneert true als de string eindigt met de zoekterm.

#endswith("readme.docx", ".docx")  -->  True

Beschikbaar in: Screen, Workflow, Message, Template


#upper(str) / #lower(str)bewerken

Converteer naar hoofd- of kleine letters.

#upper("text")  -->  "TEXT"
#lower("TEXT")  -->  "text"

Beschikbaar in: Screen, Workflow, Message, Template


#trim(str)bewerken

Verwijder witruimte aan het begin en einde van een string.

#trim("  This is a test  ")  -->  "This is a test"

Beschikbaar in: Screen, Workflow, Message, Template


#split(str [, delimiter [, removeEmpty]])bewerken

Splits een string in een lijst op basis van een scheidingsteken.

#split("aaa bbb ccc")                        -->  ['aaa', 'bbb', 'ccc']
#split("a;b;c", ";")                         -->  ['a', 'b', 'c']
#split("a;;b;;c", ";", True)                 -->  ['a', 'b', 'c']
#split("a;b,c", #createlist(";", ","))        -->  ['a', 'b', 'c']

Beschikbaar in: Workflow, Message, Template


#fillstart(input, fill, length)bewerken

Vul een string aan het begin tot de gewenste lengte.

#fillstart("a", "0", 5)  -->  "0000a"
#fillstart("42", "0", 6) -->  "000042"

Beschikbaar in: Workflow, Message, Template


#format(object, formatstr)bewerken

Formatteer een decimale waarde.

#format(${DecimalProperty}, ".000")  -->  "200.000"

Beschikbaar in: Workflow, Message, Template


#guid([format])bewerken

Genereer een uniek GUID.

#guid()     -->  "0b81b4e32b6943a39e6ce19e7782a88c"
#guid("D")  -->  "0b81b4e3-2b69-43a3-9e6c-e19e7782a88c"

Beschikbaar in: Workflow, Message, Template


#getextension(str) / #getfilename(str)bewerken

Haal extensie of bestandsnaam op.

#getextension("readme.docx")        -->  ".docx"
#getfilename("temp\readme.docx")    -->  "readme.docx"

Beschikbaar in: Workflow, Message, Template


#htmltoplain(str) / #plaintohtml(str)bewerken

Converteer tussen HTML en platte tekst.

#htmltoplain(${Job.ReportText})
#plaintohtml(${Job.ReportText})

Beschikbaar in: Workflow, Message, Template


#sanitizehtml(str)bewerken

Verwijder onveilige HTML-tags. Gebruik ook voor conversie van RawHtml naar FormattedText.

#sanitizehtml(${Job.ReportText})

Beschikbaar in: Workflow


#uriescape(str)bewerken

Percent-escape een string voor gebruik in URI's.

#uriescape("http://ultimo.com/research & development")
-->  "http%3A%2Fultimo.com%2Fresearch%20%26%20development"

Beschikbaar in: Workflow, Message, Template


#getlanguagevalue(string, languageCode)bewerken

Haal de waarde van een specifieke taal op uit een meertalige string.

#getlanguagevalue(${Site.Description}, "EN")  -->  "Nunspeet Office"

Beschikbaar in: Workflow


#tomultilingual(string [, languageCode])bewerken

Converteer een string naar een meertalige string. Zonder taalcode wordt de gebruikerstaal gebruikt.

#tomultilingual(${Job.Description})
#tomultilingual(${Job.Description}, "NL")

Beschikbaar in: Workflow


#toneutral(string)bewerken

Converteer een string naar een neutrale (taalonafhankelijke) string.

Beschikbaar in: Workflow


#createmultilingual(lang, val [, lang, val]*)bewerken

Maak een meertalige string aan met opgegeven taal/waarde-paren.

#createmultilingual("NL", "Installatie", "EN", "Equipment", "DE", "Anlagen")

Beschikbaar in: Template


#parsedatetimestring(str)bewerken

Parseer een datum/tijd string.

#parsedatetimestring("2018-07-26 22:08:05")

Beschikbaar in: Workflow


Datum functiesbewerken

Huidige datum/tijdbewerken

#{Environment.CurrentDate}      - Huidige datum
#{Environment.CurrentDateTime}  - Huidige datum+tijd
#gettoday()                     - Huidige datum/tijd

Datum toevoegen/aftrekkenbewerken

Functie Beschrijving Voorbeeld
#adddays(date, n) Dagen toevoegen #adddays(${Job.Date}, 5)
#addhours(datetime, n) Uren toevoegen #addhours(${Time}, 2)
#addminutes(datetime, n) Minuten toevoegen #addminutes(${Time}, 30)
#addseconds(datetime, n) Seconden toevoegen #addseconds(${Time}, 10)
#addmonths(date, n) Maanden toevoegen #addmonths(${Date}, 3)
#addyears(date, n) Jaren toevoegen #addyears(${Date}, 1)

Gebruik negatieve waarden om af te trekken:

=#addyears(#{Environment.CurrentDateTime}, -1)   - Een jaar geleden
=#adddays(${Job.Deadline}, -7)                     - Een week voor deadline

Beschikbaar in: Screen, Workflow, Message, Template


#dateadd(datepart, number, date)bewerken

Generieke functie om een waarde toe te voegen aan een datumonderdeel.

Datepart Beschrijving
y Jaren
m Maanden
d Dagen
h Uren
n Minuten
s Seconden
#dateadd("d", 5, ${Date})   -->  10-9-2018 -> 15-9-2018
#dateadd("y", 2, ${Date})   -->  10-9-2018 -> 10-9-2020

Beschikbaar in: Screen, Workflow, Message, Template


Datum onderdelen ophalenbewerken

Functie Retourneert Voorbeeld
#getday(date) Dagnummer #getday(${Date}) --> 8
#getdayofweek(date) Engelse dagnaam #getdayofweek(${Date}) --> "Saturday"
#getdayofweekname(date) Engelse dagnaam Zelfde als getdayofweek
#getmonth(date) Maandnummer #getmonth(${Date}) --> 4
#getyear(date) Jaar #getyear(${Date}) --> 2017
#gethours(date) Uren #gethours(${Date}) --> 12
#getminutes(date) Minuten #getminutes(${Date}) --> 13
#getseconds(date) Seconden #getseconds(${Date}) --> 33

Beschikbaar in: (Screen), Workflow, Message, Template


#getdatedifference(datepart, startdate, enddate [, bool])bewerken

Bereken het verschil tussen twee datums. Resultaat is negatief als enddate voor startdate ligt.

#getdatedifference("d", ${Job.RecordCreateDate}, ${Job.ScheduledStartDate})  -->  8 (dagen)

Dateparts: y (jaren), m (maanden), d (dagen), h (uren), n (minuten), s (seconden)

Als de boolean op false staat wordt de long-waarde teruggegeven (hogere precisie).

Beschikbaar in: Screen, Workflow, Message, Template


Datum constructiebewerken

Functie Beschrijving Voorbeeld
#getdate(year, month, day) Maak een datum #getdate(2020, 10, 5)
#setdatetime(y, m, d, h, min [, s]) Maak een datum+tijd #setdatetime(2018, 5, 1, 23, 0)
#settime(hours, minutes) Maak een tijd #settime(8, 30) --> 08:30:00
#startofday(date) Begin van de dag #startofday(${Date}) --> 00:00:00

#formatdate(date, formatstr, bool)bewerken

Formatteer een datum als string. De boolean bepaalt of het resultaat met hoofdletter begint.

#formatdate(#{Environment.CurrentDate}, "d", false)   -->  "5/16/2018"
#formatdate(#{Environment.CurrentDateTime}, "f", false)  -->  "Wednesday, May 16, 2018 2:42 PM"

Formatstrings volgen de .NET standaard datum/tijd formaat specificatie.

Beschikbaar in: Workflow, Message, Template


Unix timebewerken

#fromunixtime(1714903932)          - Unix timestamp naar DateTime
#tounixtime(${Job.RecordCreateDate})  - DateTime naar Unix timestamp

Beschikbaar in: Workflow


Numerieke functiesbewerken

#abs(number)bewerken

Absolute waarde.

#abs(-1)    -->  1
#abs(-1.5)  -->  1.5

Beschikbaar in: Screen, Workflow, Message, Template


#round(number [, precision])bewerken

Afronden op een opgegeven aantal decimalen.

#round(16.95, 0)     -->  17
#round(123.456, 2)   -->  123.46

Beschikbaar in: Screen, Workflow, Message, Template


#ceil(number [, precision])bewerken

Altijd naar boven afronden.

#ceil(5.676, 2)  -->  5.68

Beschikbaar in: Screen, Workflow, Message, Template


#floor(number [, precision])bewerken

Altijd naar beneden afronden (trunceren).

#floor(1.711, 2)   -->  1.71
#floor(-1.951, 1)  -->  -2

Beschikbaar in: Screen, Workflow, Message, Template


#max(number, number ...) / #min(number, number ...)bewerken

Maximum of minimum van een reeks getallen. Alleen beschikbaar in Screen (conditional formatting).

#max(2, 4)  -->  4
#min(2, 4)  -->  2

#random([lowerLimit,] upperLimit)bewerken

Genereer een willekeurig geheel getal.

#random(10)       -->  0 t/m 10
#random(50, 100)  -->  50 t/m 100

Beschikbaar in: Workflow, Message, Template


#isnumeric(input)bewerken

Controleer of een waarde numeriek is.

#isnumeric(${Job.Extra1})  -->  True

Beschikbaar in: Workflow, Message, Template


Formatteringbewerken

Functie Beschrijving Voorbeeld
#formatnumber(n, decimals) Formatteer getal #formatnumber(5, 2) --> "5.00"
#formathours(hours) Decimale uren naar tijd #formathours(1.50) --> "1:30"
#formatminutes(minutes) Minuten naar uren:minuten #formatminutes(150) --> "2:30"

Beschikbaar in: Workflow, Message, Template


Geld functiesbewerken

#createcompanymoney(${Amount}, "ReservationLine.InvoiceCost")
#createtransactionmoney(${Amount}, "EUR", "ReservationLine.InvoiceCost")

Beschikbaar in: Screen, Workflow, Message, Template


Lijst functiesbewerken

#exists(needle, haystack)bewerken

Controleer of een waarde voorkomt in een lijst.

#exists(${Job.Id}, "0000002")  -->  True/False

Beschikbaar in: Workflow, Message, Template


#elementat(list, index)bewerken

Haal een element op basis van index (zero-based). Alternatieve syntax: ${List[0]}.

#elementat(${Jobs}, 1)         -->  Tweede job in de lijst
${Jobs[2].Description}         -->  Beschrijving van derde job

Beschikbaar in: Workflow, Message, Template


#createlist([elements])bewerken

Maak een nieuwe lijst aan. Zonder argumenten wordt een lege lijst gemaakt.

#createlist("a", "b", "c")    -->  List[Object] { "a", "b", "c" }
#createlist()                  -->  Lege lijst

Beschikbaar in: Workflow


#range([start,] length)bewerken

Maak een lijst met opeenvolgende getallen.

#range(6)      -->  0, 1, 2, 3, 4, 5
#range(6, 5)   -->  6, 7, 8, 9, 10

Beschikbaar in: Workflow


#containskey(dictionary, key)bewerken

Controleer of een dictionary een sleutel bevat.

#containskey(${PropertyValues}, "Description")  -->  True/False

Beschikbaar in: Workflow


#containselement(haystackList, needleList, containsAll)bewerken

Controleer of elementen uit de ene lijst voorkomen in de andere.

#containselement(${haystack}, ${needle}, False)  -->  True als MINSTENS EEN match
#containselement(${haystack}, ${needle}, True)   -->  True als ALLE matchen

Beschikbaar in: Screen, Workflow, Message, Template


Werken met lijsten: indexer syntaxbewerken

Elementen in lijsten zijn zero-based benaderbaar:

${Jobs[0].Description}    - Eerste job
${Jobs[1].Equipment.Id}   - Equipment van tweede job
${List.Count}             - Aantal elementen

Type conversiebewerken

Functie Van Naar Beschikbaar in
#tostring(input) Any String Workflow
#todecimal(str) String Decimal Workflow, Message, Template
#todouble(str) String Double Workflow, Message, Template
#tointeger(input) Any Integer Workflow
#tonullableinteger(input) Any Integer? Workflow
#toboolean(input) Any Boolean Workflow
#tostring(100)           -->  "100"
#todecimal("12.95")      -->  12.95 (Decimal)
#todouble("-1.797693")   -->  -1.797693 (Double)

Object functiesbewerken

#coalesce(value [, value ...])bewerken

Retourneert de eerste niet-null waarde (vergelijkbaar met SQL COALESCE).

#coalesce(${Job.Equipment}, ${Job.Building}, "Onbekend")

Beschikbaar in: Screen, Workflow, Message, Template


#getpropertyvalue(object, propertyname)bewerken

Haal dynamisch een property-waarde op van een object.

#getpropertyvalue(${Job}, "Description")

Beschikbaar in: Workflow


#getsetting(domainObject, settingName)bewerken

Haal de waarde van een applicatie-instelling op, gebaseerd op het TableContext van het domain object.

#getsetting(${Job}, "Job.RoundHours")  -->  True/False

Alternatieve syntax met expliciete table/context:

#getsetting("Job", "JobContext.Fleet", "Job.RoundHours")
#getsetting("Job", 16384, "Job.RoundHours")

Beschikbaar in: Workflow


#settingenabled(domainObject, settingName)bewerken

Controleer of een setting actief is (retourneert Boolean).

#settingenabled(${Job}, "Job.RoundHours")  -->  True/False

Beschikbaar in: Workflow


Overige functiesbewerken

#moduleenabled(string)bewerken

Controleer of een licentiemodule actief is.

#moduleenabled("multilingual")  -->  True/False

Beschikbaar in: Workflow


#applicationelementenabled(string)bewerken

Controleer of een specifiek applicatie-element actief is (via GUID).

#applicationelementenabled("37050ff7-cac3-4418-877d-62c464d89461")

Beschikbaar in: Workflow, Message, Template


#color(string)bewerken

Retourneert de hex-kleurcode voor een benoemde kleur.

Variabele Beschrijving
signal-color-good Groen signaal
signal-color-bad Rood signaal
signal-color-warning Oranje waarschuwing
signal-color-information Blauw informatie
condition-excellent t/m condition-very-bad Conditie-kleuren
#color("signal-color-bad")  -->  "#c83232"

Beschikbaar in: Workflow, Message, Template


Metadata functies (alleen Template)bewerken

Functie Beschrijving
#getdecimaldigits(columnName) Aantal decimalen van een kolom
#getinputwidth(columnName) Breedte van een kolom
#getdecimaldigits("JobiValue2")  -->  2
#getinputwidth("JobDescr")       -->  200

#xmldecode(str)bewerken

Decodeer een XML-gecodeerde string.

#xmldecode("&lt;node&gt;value&lt;/node&gt;")  -->  "<node>value</node>"

Beschikbaar in: Workflow, Message, Template


#xmlencode(str)bewerken

Codeer een string naar XML.

#xmlencode("value")  -->  "&lt;node&gt;value&lt;/node&gt;"

Beschikbaar in: Workflow, Message, Template


#uriunescape(str)bewerken

Decodeer een percent-escaped URI terug naar een reguliere string.

#uriunescape("Ultimo%20logo.png")  -->  "Ultimo logo.png"

Beschikbaar in: Workflow


#label(labelId)bewerken

Retourneert de vertaalde waarde van een label-ID uit de database.

#label("Change")          -->  "Wijzigen" (in NL omgeving)
#label("CHOOSERECORDS_MESSAGE")

Beschikbaar in: Workflow, Message, Template


#geturl(domainObject [, screenName])bewerken

Retourneert de interne URL van een object in Ultimo.

#geturl(${Job})  -->  "https://server/ultimo_open.html#screen/open?jobid=0000108"

Beschikbaar in: Workflow, Message, Template


Context- en statusbeschrijvingenbewerken

Functies om context- en statusbeschrijvingen van entiteiten op te halen in de juiste taal.

Functie Beschrijving Voorbeeld
#contextdescription(obj) Context beschrijving (lowercase) #contextdescription(${Equipment}) --> "instrument"
#contextdescription_capital(obj) Context beschrijving met hoofdletter #contextdescription_capital(${Equipment}) --> "Instrument"
#contextdescription_plural(obj) Meervoud #contextdescription_plural(${Equipment}) --> "instruments"
#contextdescription_plural_capital(obj) Meervoud met hoofdletter #contextdescription_plural_capital(${Equipment}) --> "Instruments"
#the_contextdescription(obj) Met lidwoord "the" #the_contextdescription(${Equipment})
#the_contextdescription_capital(obj) Met lidwoord "The" #the_contextdescription_capital(${Equipment})
#statusdescription_capital(obj) Statusbeschrijving met hoofdletter #statusdescription_capital(${Equipment}) --> "Active"

Beschikbaar in: Workflow, Message, Template


Template functiesbewerken

In TextTemplates (email templates, rapport templates) zijn uitgebreide template-constructies beschikbaar. Deze worden gebruikt in de Subject en Body van TextTemplates die in de database zijn opgeslagen.

Conditionele logicabewerken

#if / #elseif / #else / #end

Voer conditionele logica uit in templates.

#if(${Job.Context} == 1)
    Technische Dienst
#elseif(${Job.Context} == 4)
    Service desk
#elseif(${Job.Context} == 1024)
    Actie
#else
    Onbekend
#end

#switch / #case / #default

Switch-constructie voor meerdere waarden.

#foreach(${Job} in ${Jobs})
    #switch(${Job.Context})
    #case 1: Technische Dienst
    #case 4: Service desk
    #case 128: IT Incident
    #default: Onbekend
    #end
#end

Iteratiebewerken

#foreach / #end (template)

Itereer door een lijst in een template. Ondersteunt diverse sub-secties voor opmaak.

#foreach(${Job} in ${Jobs})

    #nodata
    Er zijn geen jobs gevonden.

    #beforeall
    === Overzicht Jobs ===

    #odd
    Oneven rij: ${Job.Id}

    #even
    Even rij: ${Job.Id}

    #each
    Beschrijving: ${Job.Description}

    #before
    Item nummer: ${Job.Id}

    #after
    Item gecontroleerd OK

    #between
    -----------------------------

    #afterall
    === Einde overzicht ===

#end

Sub-secties binnen #foreach:

Sectie Beschrijving
#nodata Wordt getoond als de lijst leeg is
#beforeall Header tekst voor alle items
#afterall Footer tekst na alle items
#before Wordt voor elk item getoond
#after Wordt na elk item getoond
#between Wordt tussen items getoond (niet na het laatste)
#each Standaard sectie voor elk item
#odd Alleen voor items op oneven index
#even Alleen voor items op even index

#order / #orderby

Sorteer items in een foreach.

#foreach(${Number} in ${Numbers})
    #order
    ascending
    #each
    ${Number}
#end

#foreach(${Job} in ${Jobs})
    #orderby
    Description ascending
    Context descending
    Status
    #each
    ${Job}
#end

Macro'sbewerken

#macro / #call

Definieer herbruikbare blokken en roep ze aan.

#macro Tested(${Job})
    #if(${Job.Context} == 1)
        Technische Dienst
    #elseif(${Job.Context} == 4)
        Service desk
    #else
        #contextdescription_capital(${Job})
    #end
#end

#foreach(${Job} in ${Jobs})
    #call Tested(${Job})
    #between
    Item nummer: ${Job.Id}
    Beschrijving: ${Job.Description}
    #beforeall
    Inventarislijst
#end

Overige template functiesbewerken

#includecss(path)

Voeg een CSS-bestand in vanuit de FileService. Het CSS-bestand moet in de FileServiceData staan.

#includecss(css/style.css)

<p class="uppercase">Deze tekst wordt hoofdletters.</p>

#dumpcontext()

Debug-functie die alle variabelen in de huidige scope toont.

#dumpcontext()

Resultaat: Stack level: 1 Name: 'Job', Value: 'Job.Id='0000007'', Type: 'Job'

Beschikbaar in: Template


Gerelateerde artikelenbewerken