Skip to content

ApptiveScript Functions ​

The complete list of functions available in an expression — in formula columns, in the conditional visibility of blocks, in Flow conditions, and in filters.

This page is meant for reference. If you're writing an expression for the first time, start at What is ApptiveScript.

How to read the tables ​

An expression is always value, dot, function:

fieldValue('preis').multiplyBy(1.19)

To the left of the dot is a value; to the right, a function from the table for its type. The result again has a type — and you can apply another function to it:

fieldValue('nachname').concat(fieldValue('vorname'), ', ').isNotEmpty()
ColumnMeaning
FunctionThe name, exactly as it's written. Entries with a leading dot and no parentheses — such as .email — are properties and take no arguments.
ArgumentsWhat goes inside the parentheses, in this order: name: Type.
ResultThe type of the result. It determines which table applies for the next dot. Any means: a value whose type is only known when it's evaluated — for example, a value from JSON data.

Function names are in English and stay that way even in the German interface. Capitalization is mandatory.

The type is shown in the editor

The Edit an expression dialog shows the determined type above the sample result — Type: String, Type: Number, and so on. That's how you find the right table for the next dot. The Search tab in the editor only lists functions for the currently determined type anyway.

With or without curly braces ​

Where you writeNotation
Formula editor, visibility, advanced Flow logicjust the expression: fieldValue('preis').multiplyBy(1.19)
A regular text field in a Flow stepinside braces: Your invoice for {{ fieldValue('betrag') }} Euro

An expression without braces keeps its type. As soon as you embed it in text, the result becomes text — and can no longer be used in further calculations.

Getting values into an expression ​

What an expression starts with depends on where it's used:

Starting pointMeaningUsed in
fieldValue('<field-id>')a field of the current entryFormula columns, filters
formValues.get('<key>')an input value from the pageconditional visibility
step('<step-id>').outputthe result of an earlier Flow stepFlows
today()today's dateeverywhere
now()the current point in timeeverywhere
true, falsefixed boolean valueseverywhere

Nobody types field IDs and step IDs by hand — the editor inserts them via the picker. The key of an input block, on the other hand, is chosen by you; it's shown under Manage keys.

IDs are not names

fieldValue('…') refers to the ID of a column, not its name. That's intentional: a formula survives renaming the column. But it also means an expression can't be checked just by reading the field names.

Empty values ​

A field that isn't filled in doesn't produce an error — it produces an empty value. Two functions handle that:

FunctionEffect
ifUndefined(<replacement>)inserts a replacement value if the value is missing
isEmpty() / isNotEmpty()checks whether a value is missing
fieldValue('spitzname').ifUndefined('unbekannt')

ifUndefined exists on every type; isEmpty() and isNotEmpty() on almost every type — not on Number, general. The tables below spell out exactly where.

Getting a value out of a list ​

Some functions return a list instead of a single value — match(), for example, which collects all matches of a search pattern. Use at() to reach a single entry:

'a,b,c'.match('[a-z]').at(1)

This returns a — the first entry is number 1, not 0. size() tells you how many there are.

A list is not a displayable value

A formula column must end on a single value. If the expression ends on a list, the column can't display it — append at().

Generated from ApptiveScript 0.4.13 using npm run apptivescript:reference.

Available on every type ​

These functions exist regardless of what's to the left of the dot. They're not repeated in the tables for the individual types.

FunctionArgumentsResult
ifUndefined(…)default: AnyAny
isEqualTo(…)other: same typeBoolean
isNotEqualTo(…)other: same typeBoolean

Text ​

Text (String) ​

FunctionArgumentsResult
asDateAndTime()—DateAndTime
asJSONString()—String
asJSONStringContent()—String
asJSONStringPretty()—String
asNumber()—Number
beginsWith(…)prefix: StringBoolean
concat(…)string: String, separator: StringString
contains(…)substring: StringBoolean
endsWith(…)postfix: StringBoolean
isEmpty()—Boolean
isNotEmpty()—Boolean
match(…)pattern: StringCollection
parseJSON()—KeyValueObject
sha256()—String
substring(…)from: Number, to: NumberString

Single Select (Enum) ​

FunctionArgumentsResult
asDateAndTime()—DateAndTime
asJSONString()—String
asJSONStringContent()—String
asJSONStringPretty()—String
asNumber()—Number
beginsWith(…)prefix: StringBoolean
concat(…)string: String, separator: StringString
contains(…)substring: StringBoolean
endsWith(…)postfix: StringBoolean
isEmpty()—Boolean
isNotEmpty()—Boolean
match(…)pattern: StringCollection
parseJSON()—KeyValueObject
substring(…)from: Number, to: NumberString

E-Mail (String) ​

FunctionArgumentsResult
asJSONString()—String
asJSONStringContent()—String
asJSONStringPretty()—String
beginsWith(…)prefix: StringBoolean
concat(…)string: String, separator: StringString
contains(…)substring: StringBoolean
endsWith(…)postfix: StringBoolean
isEmpty()—Boolean
isNotEmpty()—Boolean
match(…)pattern: StringCollection
parseJSON()—KeyValueObject
substring(…)from: Number, to: NumberString

Numbers ​

Number, general (Number) ​

FunctionArgumentsResult
asString()—String
divideBy(…)number: NumberNumber
greaterThan(…)number: NumberBoolean
greaterThanOrEqual(…)number: NumberBoolean
minus(…)number: NumberNumber
multiplyBy(…)number: NumberNumber
plus(…)number: NumberNumber
round(…)number: NumberNumber
roundDown(…)number: NumberNumber
roundUp(…)number: NumberNumber
smallerThan(…)number: NumberBoolean
smallerThanOrEqual(…)number: NumberBoolean

Number (Integer) ​

FunctionArgumentsResult
asDateAndTime()—String
asJSONString()—String
asJSONStringContent()—String
asJSONStringPretty()—String
asString()—String
divideBy(…)number: NumberNumber
greaterThan(…)number: NumberBoolean
greaterThanOrEqual(…)number: NumberBoolean
isEmpty()—Boolean
isNotEmpty()—Boolean
minus(…)number: NumberNumber
multiplyBy(…)number: NumberNumber
plus(…)number: NumberNumber
round(…)number: NumberDecimal
roundDown(…)number: NumberDecimal
roundUp(…)number: NumberDecimal
second()—Duration
seconds()—Duration
smallerThan(…)number: NumberBoolean
smallerThanOrEqual(…)number: NumberBoolean

Decimal and Currency (Decimal) ​

FunctionArgumentsResult
asDateAndTime()—String
asJSONString()—String
asJSONStringContent()—String
asJSONStringPretty()—String
asString()—String
divideBy(…)number: NumberDecimal
greaterThan(…)number: NumberBoolean
greaterThanOrEqual(…)number: NumberBoolean
isEmpty()—Boolean
isNotEmpty()—Boolean
minus(…)number: NumberDecimal
multiplyBy(…)number: NumberDecimal
plus(…)number: NumberDecimal
round(…)number: NumberDecimal
roundDown(…)number: NumberDecimal
roundUp(…)number: NumberDecimal
smallerThan(…)number: NumberBoolean
smallerThanOrEqual(…)number: NumberBoolean

Date and time ​

Date (Date) ​

FunctionArgumentsResult
add(…)amount: Number, unit: StringDateAndTime
addDays(…)numberOfDays: NumberDate
after(…)date: DateBoolean
before(…)date: DateBoolean
difference(…)date: DateDuration
isEmpty()—Boolean
isNotEmpty()—Boolean
isoString()—String
minus(…)date: DateDuration
plus(…)duration: DurationDuration
subtract(…)amount: Number, unit: StringDateAndTime
subtractDays(…)numberofDays: NumberDate

Date and time (DateAndTime) ​

FunctionArgumentsResult
add(…)amount: Number, unit: StringDateAndTime
after(…)dateAndTime: DateAndTimeBoolean
before(…)dateAndTime: DateAndTimeBoolean
date()—Date
isEmpty()—Boolean
isNotEmpty()—Boolean
isoString()—String
minus(…)dateAndTime: DateAndTimeDuration
plus(…)dateAndTime: DateAndTimeDuration
subtract(…)amount: Number, unit: StringDateAndTime
toTimezoneString(…)timezone: StringString

Duration (Duration) ​

FunctionArgumentsResult
asDays()—Decimal
asHours()—Decimal
asMinutes()—Decimal
isEmpty()—Boolean
isNotEmpty()—Boolean

Booleans ​

Checkmark and Decision (Boolean) ​

FunctionArgumentsResult
asJSONString()—String
asJSONStringContent()—String
asJSONStringPretty()—String
if(…)if: Any, else: AnyAny
isEmpty()—Boolean
isFalse()—Boolean
isNotEmpty()—Boolean
isTrue()—Boolean
logicalAnd(…)other: BooleanBoolean
logicalOr(…)other: BooleanBoolean

Lists ​

List, general (Collection) ​

FunctionArgumentsResult
add(…)element: AnyCollection
asJSONString()—String
asJSONStringContent()—String
asJSONStringPretty()—String
asList()—Collection
asString()—String
at(…)index: IntegerAny
includesAllOf(…)entities: CollectionBoolean
includesAnyOf(…)entities: CollectionBoolean
includesNoneOf(…)entities: CollectionBoolean
isEmpty()—Boolean
isNotEmpty()—Boolean
size()—Integer

Multiple Select (EnumCollection) ​

FunctionArgumentsResult
asJSONString()—String
asJSONStringContent()—String
asJSONStringPretty()—String
asString()—String
at(…)index: IntegerAny
includes(…)entity: BooleanEnumCollection
includesAll(…)entities: CollectionEnumCollection
isEmpty()—Boolean
isNotEmpty()—Boolean
size()—Integer
FunctionArgumentsResult
add(…)element: StringEntityCollection
addEntity(…)element: StringEntityCollection
asJSONString()—String
asJSONStringContent()—String
asJSONStringPretty()—String
asString()—String
at(…)index: IntegerAny
includes(…)entity: BooleanEntityCollection
includesAll(…)entities: CollectionEntityCollection
isEmpty()—Boolean
isNotEmpty()—Boolean
size()—Integer

Composite values ​

JSON object (KeyValueObject) ​

FunctionArgumentsResult
asJSONString()—String
asJSONStringContent()—String
asJSONStringPretty()—String
get(…)key: StringAny
isEmpty()—Boolean
isNotEmpty()—Boolean

Files (Attachment) ​

FunctionArgumentsResult
isEmpty()—Boolean
isNotEmpty()—Boolean
largeThumbnail()—String
smallThumbnail()—String
url()—String

Geolocation (GeoCoordinate) ​

FunctionArgumentsResult
asJSONString()—String
asString()—String
isEmpty()—Boolean
isNotEmpty()—Boolean
lat()—Number
latitude()—Number
lon()—Number
longitude()—Number

User (User) ​

FunctionArgumentsResult
.email—String
.firstName—String
.id—String
.lastName—String
isEmpty()—Boolean
isNotEmpty()—Boolean

Created by (CreatedByValue) ​

FunctionArgumentsResult
.email—String
.id—String
.type—String
displayValue()—String
isEmpty()—Boolean
isNotEmpty()—Boolean

Examples ​

A selection of frequently used functions with what they do and an example. The full signature is in the tables above — this section is about what the function does.

add(amount: Number, unit: String) → DateAndTime

Adds an amount in the given unit to a date. Confirmed to work: 'day', 'week', 'year', 'hour' and 'minute' (singular) — 'month'/'months' do not; there is no substitute for months, for days use addDays().

fieldValue('start').add(1, 'week')

Result: the date one week later

addDays(numberOfDays: Number) → Date

Adds days to a date.

fieldValue('liefertermin').addDays(7)

Result: the date one week later

addEntity(element: String) → EntityCollection

Links one more record by its id.

fieldValue('verknuepft').addEntity(fieldValue('neuerEintrag'))

Result: the list with the additional record

after(date: Date) → Boolean

Checks whether the date lies after the argument.

fieldValue('start').after(fieldValue('ende'))

Result: true when start lies after ende

asDateAndTime() → DateAndTime

Reads text in ISO format as a date with time.

'2026-08-18T10:00:00Z'.asDateAndTime()

Result: the same point in time as a DateAndTime

asDays() → Decimal

The time span as a number of days.

fieldValue('ende').difference(fieldValue('start')).asDays()

Result: the time span in days, e.g. 2.5

asHours() → Decimal

The time span as a number of hours.

fieldValue('ende').difference(fieldValue('start')).asHours()

Result: the time span in hours

asJSONStringContent() → String

The JSON representation of the value, without the outer quotes for text.

'abc'.asJSONStringContent()

Result: 'abc'

asJSONStringPretty() → String

The JSON representation of the value, with quotes for text.

'abc'.asJSONStringPretty()

Result: "abc"

asList() → Collection

Returns an empty list instead of nothing when no value is present — the counterpart of ifUndefined() for lists.

fieldValue('verknuepft').asList()

Result: the list, or an empty list when the field is empty

asMinutes() → Decimal

The time span as a number of minutes.

fieldValue('ende').difference(fieldValue('start')).asMinutes()

Result: the time span in minutes

asNumber() → Number

Converts text into a number.

'42'.asNumber()

Result: 42

asString() → String

Converts the number into text.

fieldValue('menge').asString()

Result: the number as text, e.g. for concat()

at(index: Integer) → Any

Reads one entry out of a list — the first entry is number 1, not 0.

'a,b,c'.match('[a-z]').at(1)

Result: 'a'

before(date: Date) → Boolean

Checks whether the date lies before the argument.

fieldValue('start').before(fieldValue('ende'))

Result: true when start lies before ende

beginsWith(prefix: String) → Boolean

Checks whether the text begins with the given string.

'Hallo Welt'.beginsWith('Hallo')

Result: true

concat(string: String, separator: String) → String

Appends another text, separated by the second argument.

'Müller'.concat('Anna', ', ')

Result: 'Müller, Anna'

contains(substring: String) → Boolean

Checks whether the text contains the given string.

'Hallo Welt'.contains('Welt')

Result: true

date() → Date

The date part of a point in time, without the time of day.

fieldValue('erstellt').date()

Result: the date without time of day

difference(date: Date) → Duration

Calculates the time span between two dates.

fieldValue('ende').difference(fieldValue('start'))

Result: a Duration — continue with .asDays(), for example

displayValue() → String

A readable short form of who or what created the record.

fieldValue('erstelltVon').displayValue()

Result: a readable name or an e-mail address

divideBy(number: Number) → Number

Divides the number by the argument.

fieldValue('gesamtpreis').divideBy(fieldValue('menge'))

Result: the price per unit

endsWith(postfix: String) → Boolean

Checks whether the text ends with the given string.

'Hallo Welt'.endsWith('Welt')

Result: true

get(key: String) → Any

Reads a value from a JSON object by its key.

'{"stadt":"Berlin"}'.parseJSON().get('stadt')

Result: 'Berlin'

greaterThan(number: Number) → Boolean

Checks whether the number is greater than the argument.

3.greaterThan(2)

Result: true

greaterThanOrEqual(number: Number) → Boolean

Checks whether the number is greater than or equal to the argument.

3.greaterThanOrEqual(3)

Result: true

if(if: Any, else: Any) → Any

Chooses between two values depending on whether the boolean holds.

fieldValue('aktiv').if('aktiv', 'inaktiv')

Result: 'aktiv' when the field is checked, otherwise 'inaktiv'

ifUndefined(default: Any) → Any

Substitutes a fallback value when the value is missing.

fieldValue('spitzname').ifUndefined('unbekannt')

Result: the field value, or 'unbekannt' when the field is empty

includesAllOf(entities: Collection) → Boolean

Checks whether all of the given entries occur in the list.

fieldValue('tags').includesAllOf(fieldValue('erforderlicheTags'))

Result: true when every wanted entry is contained

includesAnyOf(entities: Collection) → Boolean

Checks whether at least one of the given entries occurs in the list.

fieldValue('tags').includesAnyOf(fieldValue('gesuchteTags'))

Result: true when the two lists overlap

includesNoneOf(entities: Collection) → Boolean

Checks whether none of the given entries occurs in the list.

fieldValue('tags').includesNoneOf(fieldValue('ausgeschlosseneTags'))

Result: true when the lists do not overlap

isEmpty() → Boolean

Checks whether no value is present.

fieldValue('spitzname').isEmpty()

Result: true when the field is empty

isEqualTo(other: String) → Boolean

Checks whether two values are equal.

'a'.isEqualTo('a')

Result: true

isFalse() → Boolean

Checks whether the value is false.

false.isFalse()

Result: true

isNotEmpty() → Boolean

Checks whether a value is present.

fieldValue('spitzname').isNotEmpty()

Result: true when the field is filled

isNotEqualTo(other: String) → Boolean

Checks whether two values differ.

'a'.isNotEqualTo('b')

Result: true

isTrue() → Boolean

Checks whether the value is true.

true.isTrue()

Result: true

isoString() → String

The date as text in ISO format.

fieldValue('liefertermin').isoString()

Result: the date as text, e.g. '2026-08-18'

largeThumbnail() → String

The address of a large preview of the file.

fieldValue('anhang').largeThumbnail()

Result: the address of the large preview

lat() → Number

The latitude of a geolocation — same as latitude().

fieldValue('standort').lat()

Result: the latitude as a number

latitude() → Number

The latitude of a geolocation.

fieldValue('standort').latitude()

Result: the latitude as a number

logicalAnd(other: Boolean) → Boolean

True when both values are true.

fieldValue('geprüft').logicalAnd(fieldValue('freigegeben'))

Result: true only when both fields are checked

logicalOr(other: Boolean) → Boolean

True when at least one of the two values is true.

fieldValue('dringend').logicalOr(fieldValue('überfällig'))

Result: true when at least one of the fields is checked

lon() → Number

The longitude of a geolocation — same as longitude().

fieldValue('standort').lon()

Result: the longitude as a number

longitude() → Number

The longitude of a geolocation.

fieldValue('standort').longitude()

Result: the longitude as a number

match(pattern: String) → Collection

Collects all matches of a search pattern as a list.

'a,b,c'.match('[a-z]')

Result: a list with 3 matches: 'a', 'b', 'c'

minus(number: Number) → Number

Subtracts the argument from the number.

fieldValue('brutto').minus(fieldValue('rabatt'))

Result: the difference of both fields

multiplyBy(number: Number) → Number

Multiplies the number by the argument.

fieldValue('preis').multiplyBy(1.19)

Result: the price including a 19 % surcharge

parseJSON() → KeyValueObject

Reads text as JSON and makes its fields accessible with get().

'{"stadt":"Berlin"}'.parseJSON()

Result: a JSON object — continue with .get('stadt')

plus(number: Number) → Number

Adds two numbers.

fieldValue('grundpreis').plus(fieldValue('versand'))

Result: the sum of both fields

round(number: Number) → Number

Rounds half up to the given number of decimal places.

fieldValue('preis').round(2)

Result: the price with 2 decimal places

roundDown(number: Number) → Number

Rounds to the given number of decimal places — always downwards.

fieldValue('preis').roundDown(0)

Result: the next smaller whole number

roundUp(number: Number) → Number

Rounds to the given number of decimal places — always upwards.

fieldValue('preis').roundUp(0)

Result: the next larger whole number

second() → Duration

Builds a time span in seconds from a number.

fieldValue('wartezeit').second()

Result: a time span, e.g. 5 seconds

seconds() → Duration

Builds a time span in seconds from a number — same as second().

fieldValue('wartezeit').seconds()

Result: a time span, e.g. 5 seconds

sha256() → String

Computes the SHA-256 hash of the text — 64 lowercase hexadecimal characters, calculated over the text as UTF-8. The same text always produces the same hash; it cannot be reversed.

'Hallo Welt'.sha256()

Result: '2d2da19605a34e037dbe82173f98a992a530a5fdd53dad882f570d4ba204ef30'

size() → Integer

Counts the entries of a list.

'a,b,c'.match('[a-z]').size()

Result: 3

smallThumbnail() → String

The address of a small preview of the file.

fieldValue('anhang').smallThumbnail()

Result: the address of the small preview

smallerThan(number: Number) → Boolean

Checks whether the number is smaller than the argument.

2.smallerThan(3)

Result: true

smallerThanOrEqual(number: Number) → Boolean

Checks whether the number is smaller than or equal to the argument.

2.smallerThanOrEqual(2)

Result: true

substring(from: Number, to: Number) → String

Cuts a section out of the text — the first character is number 1, as with at().

'Hallo Welt'.substring(1, 5)

Result: 'Hallo'

subtract(amount: Number, unit: String) → DateAndTime

Subtracts an amount in the given unit. As with add(), 'day', 'week', 'year', 'hour' and 'minute' work, 'month'/'months' do not — for days use subtractDays().

fieldValue('start').subtract(1, 'week')

Result: the date one week earlier

subtractDays(numberofDays: Number) → Date

Subtracts days from a date.

fieldValue('liefertermin').subtractDays(7)

Result: the date one week earlier

toTimezoneString(timezone: String) → String

Formats date and time for another time zone.

fieldValue('zeitstempel').toTimezoneString('Europe/Berlin')

Result: the timestamp in the given time zone

url() → String

The address from which the file can be downloaded.

fieldValue('anhang').url()

Result: the download address as text

add(element: Any) → Collection — on Collection

Appends an entry to the end of the list. Not to be confused with add() on a date, which adds an amount of time.

'a,b,c'.match('[a-z]').add('d')

Result: the list a, b, c, d

minus(date: Date) → Duration — on Date

Subtracts a date from a date and returns the time span in between — not to be confused with minus() on numbers. Continue with asDays() or asHours() for days or hours.

fieldValue('ende').minus(fieldValue('start'))

Result: the time span from start to ende as a Duration

plus(duration: Duration) → Duration — on Date

Adds a time span to a date. The result is a point in time with a time of day, even though the signature says Duration. For whole days, addDays() is the simpler way.

fieldValue('start').plus(fieldValue('wartezeit').seconds())

Result: the point in time wartezeit seconds after start

minus(dateAndTime: DateAndTime) → Duration — on DateAndTime

Subtracts a point in time from a point in time and returns the time span in between — not to be confused with minus() on numbers. Continue with asHours() or asMinutes().

fieldValue('ende').minus(fieldValue('start'))

Result: the time span from start to ende as a Duration

plus(dateAndTime: DateAndTime) → Duration — on DateAndTime

Adds a time span to a point in time. The result is again a point in time, even though the signature names Duration as the result and a DateAndTime as the argument.

fieldValue('start').plus(fieldValue('wartezeit').seconds())

Result: the point in time wartezeit seconds after start

add(element: String) → EntityCollection — on EntityCollection

Links one more record by its id — the same as addEntity().

fieldValue('verknuepft').add(fieldValue('neuerEintrag'))

Result: the list with the additional record

Next ​

Was this page helpful?