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()| Column | Meaning |
|---|---|
| Function | The name, exactly as it's written. Entries with a leading dot and no parentheses — such as .email — are properties and take no arguments. |
| Arguments | What goes inside the parentheses, in this order: name: Type. |
| Result | The 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 write | Notation |
|---|---|
| Formula editor, visibility, advanced Flow logic | just the expression: fieldValue('preis').multiplyBy(1.19) |
| A regular text field in a Flow step | inside 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 point | Meaning | Used in |
|---|---|---|
fieldValue('<field-id>') | a field of the current entry | Formula columns, filters |
formValues.get('<key>') | an input value from the page | conditional visibility |
step('<step-id>').output | the result of an earlier Flow step | Flows |
today() | today's date | everywhere |
now() | the current point in time | everywhere |
true, false | fixed boolean values | everywhere |
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:
| Function | Effect |
|---|---|
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.
| Function | Arguments | Result |
|---|---|---|
ifUndefined(…) | default: Any | Any |
isEqualTo(…) | other: same type | Boolean |
isNotEqualTo(…) | other: same type | Boolean |
Text
Text (String)
| Function | Arguments | Result |
|---|---|---|
asDateAndTime() | — | DateAndTime |
asJSONString() | — | String |
asJSONStringContent() | — | String |
asJSONStringPretty() | — | String |
asNumber() | — | Number |
beginsWith(…) | prefix: String | Boolean |
concat(…) | string: String, separator: String | String |
contains(…) | substring: String | Boolean |
endsWith(…) | postfix: String | Boolean |
isEmpty() | — | Boolean |
isNotEmpty() | — | Boolean |
match(…) | pattern: String | Collection |
parseJSON() | — | KeyValueObject |
sha256() | — | String |
substring(…) | from: Number, to: Number | String |
Single Select (Enum)
| Function | Arguments | Result |
|---|---|---|
asDateAndTime() | — | DateAndTime |
asJSONString() | — | String |
asJSONStringContent() | — | String |
asJSONStringPretty() | — | String |
asNumber() | — | Number |
beginsWith(…) | prefix: String | Boolean |
concat(…) | string: String, separator: String | String |
contains(…) | substring: String | Boolean |
endsWith(…) | postfix: String | Boolean |
isEmpty() | — | Boolean |
isNotEmpty() | — | Boolean |
match(…) | pattern: String | Collection |
parseJSON() | — | KeyValueObject |
substring(…) | from: Number, to: Number | String |
E-Mail (String)
| Function | Arguments | Result |
|---|---|---|
asJSONString() | — | String |
asJSONStringContent() | — | String |
asJSONStringPretty() | — | String |
beginsWith(…) | prefix: String | Boolean |
concat(…) | string: String, separator: String | String |
contains(…) | substring: String | Boolean |
endsWith(…) | postfix: String | Boolean |
isEmpty() | — | Boolean |
isNotEmpty() | — | Boolean |
match(…) | pattern: String | Collection |
parseJSON() | — | KeyValueObject |
substring(…) | from: Number, to: Number | String |
Numbers
Number, general (Number)
| Function | Arguments | Result |
|---|---|---|
asString() | — | String |
divideBy(…) | number: Number | Number |
greaterThan(…) | number: Number | Boolean |
greaterThanOrEqual(…) | number: Number | Boolean |
minus(…) | number: Number | Number |
multiplyBy(…) | number: Number | Number |
plus(…) | number: Number | Number |
round(…) | number: Number | Number |
roundDown(…) | number: Number | Number |
roundUp(…) | number: Number | Number |
smallerThan(…) | number: Number | Boolean |
smallerThanOrEqual(…) | number: Number | Boolean |
Number (Integer)
| Function | Arguments | Result |
|---|---|---|
asDateAndTime() | — | String |
asJSONString() | — | String |
asJSONStringContent() | — | String |
asJSONStringPretty() | — | String |
asString() | — | String |
divideBy(…) | number: Number | Number |
greaterThan(…) | number: Number | Boolean |
greaterThanOrEqual(…) | number: Number | Boolean |
isEmpty() | — | Boolean |
isNotEmpty() | — | Boolean |
minus(…) | number: Number | Number |
multiplyBy(…) | number: Number | Number |
plus(…) | number: Number | Number |
round(…) | number: Number | Decimal |
roundDown(…) | number: Number | Decimal |
roundUp(…) | number: Number | Decimal |
second() | — | Duration |
seconds() | — | Duration |
smallerThan(…) | number: Number | Boolean |
smallerThanOrEqual(…) | number: Number | Boolean |
Decimal and Currency (Decimal)
| Function | Arguments | Result |
|---|---|---|
asDateAndTime() | — | String |
asJSONString() | — | String |
asJSONStringContent() | — | String |
asJSONStringPretty() | — | String |
asString() | — | String |
divideBy(…) | number: Number | Decimal |
greaterThan(…) | number: Number | Boolean |
greaterThanOrEqual(…) | number: Number | Boolean |
isEmpty() | — | Boolean |
isNotEmpty() | — | Boolean |
minus(…) | number: Number | Decimal |
multiplyBy(…) | number: Number | Decimal |
plus(…) | number: Number | Decimal |
round(…) | number: Number | Decimal |
roundDown(…) | number: Number | Decimal |
roundUp(…) | number: Number | Decimal |
smallerThan(…) | number: Number | Boolean |
smallerThanOrEqual(…) | number: Number | Boolean |
Date and time
Date (Date)
| Function | Arguments | Result |
|---|---|---|
add(…) | amount: Number, unit: String | DateAndTime |
addDays(…) | numberOfDays: Number | Date |
after(…) | date: Date | Boolean |
before(…) | date: Date | Boolean |
difference(…) | date: Date | Duration |
isEmpty() | — | Boolean |
isNotEmpty() | — | Boolean |
isoString() | — | String |
minus(…) | date: Date | Duration |
plus(…) | duration: Duration | Duration |
subtract(…) | amount: Number, unit: String | DateAndTime |
subtractDays(…) | numberofDays: Number | Date |
Date and time (DateAndTime)
| Function | Arguments | Result |
|---|---|---|
add(…) | amount: Number, unit: String | DateAndTime |
after(…) | dateAndTime: DateAndTime | Boolean |
before(…) | dateAndTime: DateAndTime | Boolean |
date() | — | Date |
isEmpty() | — | Boolean |
isNotEmpty() | — | Boolean |
isoString() | — | String |
minus(…) | dateAndTime: DateAndTime | Duration |
plus(…) | dateAndTime: DateAndTime | Duration |
subtract(…) | amount: Number, unit: String | DateAndTime |
toTimezoneString(…) | timezone: String | String |
Duration (Duration)
| Function | Arguments | Result |
|---|---|---|
asDays() | — | Decimal |
asHours() | — | Decimal |
asMinutes() | — | Decimal |
isEmpty() | — | Boolean |
isNotEmpty() | — | Boolean |
Booleans
Checkmark and Decision (Boolean)
| Function | Arguments | Result |
|---|---|---|
asJSONString() | — | String |
asJSONStringContent() | — | String |
asJSONStringPretty() | — | String |
if(…) | if: Any, else: Any | Any |
isEmpty() | — | Boolean |
isFalse() | — | Boolean |
isNotEmpty() | — | Boolean |
isTrue() | — | Boolean |
logicalAnd(…) | other: Boolean | Boolean |
logicalOr(…) | other: Boolean | Boolean |
Lists
List, general (Collection)
| Function | Arguments | Result |
|---|---|---|
add(…) | element: Any | Collection |
asJSONString() | — | String |
asJSONStringContent() | — | String |
asJSONStringPretty() | — | String |
asList() | — | Collection |
asString() | — | String |
at(…) | index: Integer | Any |
includesAllOf(…) | entities: Collection | Boolean |
includesAnyOf(…) | entities: Collection | Boolean |
includesNoneOf(…) | entities: Collection | Boolean |
isEmpty() | — | Boolean |
isNotEmpty() | — | Boolean |
size() | — | Integer |
Multiple Select (EnumCollection)
| Function | Arguments | Result |
|---|---|---|
asJSONString() | — | String |
asJSONStringContent() | — | String |
asJSONStringPretty() | — | String |
asString() | — | String |
at(…) | index: Integer | Any |
includes(…) | entity: Boolean | EnumCollection |
includesAll(…) | entities: Collection | EnumCollection |
isEmpty() | — | Boolean |
isNotEmpty() | — | Boolean |
size() | — | Integer |
Link multiple records (EntityCollection)
| Function | Arguments | Result |
|---|---|---|
add(…) | element: String | EntityCollection |
addEntity(…) | element: String | EntityCollection |
asJSONString() | — | String |
asJSONStringContent() | — | String |
asJSONStringPretty() | — | String |
asString() | — | String |
at(…) | index: Integer | Any |
includes(…) | entity: Boolean | EntityCollection |
includesAll(…) | entities: Collection | EntityCollection |
isEmpty() | — | Boolean |
isNotEmpty() | — | Boolean |
size() | — | Integer |
Composite values
JSON object (KeyValueObject)
| Function | Arguments | Result |
|---|---|---|
asJSONString() | — | String |
asJSONStringContent() | — | String |
asJSONStringPretty() | — | String |
get(…) | key: String | Any |
isEmpty() | — | Boolean |
isNotEmpty() | — | Boolean |
Files (Attachment)
| Function | Arguments | Result |
|---|---|---|
isEmpty() | — | Boolean |
isNotEmpty() | — | Boolean |
largeThumbnail() | — | String |
smallThumbnail() | — | String |
url() | — | String |
Geolocation (GeoCoordinate)
| Function | Arguments | Result |
|---|---|---|
asJSONString() | — | String |
asString() | — | String |
isEmpty() | — | Boolean |
isNotEmpty() | — | Boolean |
lat() | — | Number |
latitude() | — | Number |
lon() | — | Number |
longitude() | — | Number |
User (User)
| Function | Arguments | Result |
|---|---|---|
.email | — | String |
.firstName | — | String |
.id | — | String |
.lastName | — | String |
isEmpty() | — | Boolean |
isNotEmpty() | — | Boolean |
Created by (CreatedByValue)
| Function | Arguments | Result |
|---|---|---|
.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
- Syntax — dots, parentheses, quotation marks
- Referencing values — what an expression starts with
- Calculated fields — creating formula columns
- Conditional visibility — showing blocks based on input
- Filter conditions — the same comparisons via the interface
- Glossary