Core Workflow Condition Operators¶
You might know that there is a separate section for explaining condition operators. Head over there to see a detailed explanation of many conditions and operators.
Due to differences from other places in Zammad which are also using conditions (e.g. triggers), you can find a dedicated description of operators for core workflows below.
Be aware that the availability of the operators depends on the selected attribute and its field type. Some of the operators may only be available for system attributes (e.g. for “tags”, “active”).
Operator |
Description |
|---|---|
after (absolute) |
Matches if a date/time is after a specific point in time. |
after (relative) |
Matches if a time span after a specified event has passed. |
before (absolute) |
Matches if a date/time is before a specific point in time. |
before (relative) |
Matches if a time span after a specified event has not passed. |
contains |
Matches if at least one of the specified values is present in the field (OR logic). |
contains not |
Matches if the field contains at least one value that is not among the specified values. Also matches if the field is empty. |
contains all |
Matches if every specified value is present in the field (AND logic). |
contains all not |
Matches if none of the specified values are present in the field. The field and the condition have no value in common: this means “contains none of”, not “does not contain all of”. In triggers and overviews, this operator means “not all of the specified values are present” instead. See the examples section below. |
contains one |
Same as |
contains one not |
Same as |
does not match regex |
Matches if content doesn’t fit to regex rule. |
ends with |
Matches if content ends with specified value. |
ends with one of |
Matches if content ends with one of the specified values. |
from (relative) |
Matches if date/time is after a period of time after an event. |
is |
Matches if content is equal to a specified value. |
is any of |
Matches if content is equal to any of specified values. |
is greater than |
Matches if the value is greater than the specified value. |
is greater than or equal to |
Matches if the value is greater than or equal to the specified value. |
is less than |
Matches if the value is less than the specified value. |
is less than or equal to |
Matches if the value is less than or equal to the specified value. |
is modified |
Matches if content is modified. True from the moment of changing content until form submit. |
is modified to |
Matches if content is modified to a specific value. True from the moment of changing content until form submit. |
is none of |
Matches if content is none of any specified values. |
is not |
Matches if content is not equal to a specified value. |
is set |
Matches if content is present. |
just changed |
Matches if content has changed. Only true for the moment of changing content until next form field action/click. |
just changed to |
Matches if content has changed to a specified value. Only true for the moment of changing content until next form field action/click. |
matches regex |
Matches if value fits to regex rule. |
not set |
Matches if no content is present. |
starts with |
Matches if content starts with specified value. |
starts with one of |
Matches if content starts with one of the specified values. |
till (relative) |
Matches if date/time is before a period of time before an event. |
today |
Matches if date/time is today. |
within last (relative) |
Matches if date/time content is within specified period of time before now. |
within next (relative) |
Matches if date/time content is within specified period of time after now. |
Multi-Select Operators¶
The contains family of operators compares two sets of values: the values
currently in the field and the values specified in the condition. The diagrams
below show the condition values as an orange circle and the field values as a
blue circle.
Differences to Triggers and Overviews¶
Be aware that these operators behave differently in other features that use
conditions (e.g. triggers and overviews). The most confusing difference: in core
workflows, contains all not means that no value matches at all, while in
triggers and overviews it means “not all values are present”. The table below
compares both worlds side by side.
Operator |
Core workflows (this page) |
Triggers, overviews, etc. |
|---|---|---|
contains |
At least one value is present (OR logic). |
Not available; |
contains one |
Same as |
At least one value is present (OR logic). |
contains all |
Every value is present (AND logic). |
Every value is present (AND logic). |
contains not |
At least one field value is outside the condition, or the field is empty. |
Not available for multi-select fields. |
contains one not |
Same as |
The field has no value in common with the condition. |
contains all not |
The field has no value in common with the condition. |
Not all values are present (at least one is missing). |
Example 1: Condition A, B - Field A, B, C¶
In this scenario, the field holds the values A, B and C, while the condition asks for the values A and B.
Condition values A, B overlap with field values A, B, C.¶
Operator |
Matches? |
Why |
|---|---|---|
contains |
yes |
|
contains one |
yes |
Same as |
contains all |
yes |
Both |
contains not |
yes |
|
contains one not |
yes |
Same as |
contains all not |
no |
|
Example 2: Condition A, B, C - Field C, D¶
In this scenario, the field holds the values C and D. The condition value C is present in the field, while A and B are not.
Condition values A, B, C partially overlap with
field values C, D.¶
Operator |
Matches? |
Why |
|---|---|---|
contains |
yes |
|
contains one |
yes |
Same as |
contains all |
no |
Only |
contains not |
yes |
|
contains one not |
yes |
Same as |
contains all not |
no |
|
This partial overlap is where the two “all” operators part ways:
contains all fails because one condition value is missing, while
contains all not fails because a single common value is enough
to block it.
Example 3: Condition A, B - Field C, D¶
In this scenario, the field holds the values C and D, which have nothing in common with the condition values A and B.
Condition values A, B have no overlap with field values C, D.¶
Operator |
Matches? |
Why |
|---|---|---|
contains |
no |
No value is in both sets. |
contains one |
no |
Same as |
contains all |
no |
Neither |
contains not |
yes |
|
contains one not |
yes |
Same as |
contains all not |
yes |
The field has no value in common with the condition. |
This is the only example where contains all not matches.
Example 4: Condition A, B - Field is empty¶
In this scenario, the field holds no values at all, while the condition asks for the values A and B.
The field holds no values at all.¶
Operator |
Matches? |
Why |
|---|---|---|
contains |
no |
No value is present. |
contains one |
no |
Same as |
contains all |
no |
No value is present. |
contains not |
yes |
An empty field matches. |
contains one not |
yes |
Same as |
contains all not |
yes |
An empty field has no value in common with the condition. |
Note that contains not and
contains one not match an empty field, while contains and
contains all do not. If you want to exclude specific values,
be aware that empty fields pass the condition.