Migrate logical expressions

Logical expressions in JWT Cloud are built the same as in JWT DC. In addition to the basic differences in field codes and expression parser functions, there are a few other minor differences that are explained on this page.

Multi-valued fields

In JWT DC so-called multi-valued fields are treated as lists (and not as simple text) when using the following logical operators :

JWT DC operator

Meaning

~

contains

!~

does not contain

in 

is contained in

not in 

is not

contained in

any in

any element is in

none in

no single element is in

~~

contains (case ignoring)

!~~

does not

contain (case ignoring)

in~

is contained in (case ignoring)

not in~

is not contained in (case ignoring)

any in~

any element is in (case ignoring)

none in~

no

single element is in (case ignoring)

That means that in JWT DC it is possible to write expressions like 

Java
%{issue.components} any in %{parent.components}

In JWT Cloud, this notion is not available. An expression dealing with such a multi-valued field has to be migrated by explicitly converting the field code value using the function toStringList (or toNumberList, respectively).

The following fields are considered multi-valued fields:

In order to migrate multi-valued fields in logical expressions, apply the toStringList() to the respective field.

Examples

JWT DC expression

JWT CLoud expression

%{issue.versions} none in %{issue.fixVersions}
toStringList(%{issue.versions}) none in toStringList(%{issue.fixVersions})
 %{issue.labels} any in ["Backend", "Frontend"] 
toStringList(%{issue.labels}) any in ["Backend", "Frontend"]

Case ignoring operators

In JWT DC, some case-ignoring operators are available (for details please see the respective part in the description of JWT DC's Logical mode). They are not available in JWT Cloud.

JWT DC operator

Meaning

=~

equal to

!=~

not equal to

~~

contains

!~~

does

not contain

in~

is contained in

not in~

is

not

contained in

any in~

any element is in

none in~

no single element is in

As a work around you can use the functions toUpperCase() / toLowerCase() for both operands and use the respective case sensitive operator. If an operand is a list, it first has to be converted to a text first using toString().

Examples

JWT DC expression

JWT Cloud expression

"HELLO" =~ "Hello"
toUpperCase("HELLO") = toUpperCase("Hello")
%{issue.labels} ~~ ["Backend","Database"]


toStringList(toLowerCase(%issue.labels})) ~ toStringList(toLowerCase(toString(["Backend","Database"])))

In this case, we are dealing with a multi-valued field and thus have to convert it to a text list using toStringList() before comparing.