FEEL Operators
FEEL also provides a number on inline operators, special symbols and reserved words with execution behavior defined by the FEEL language.
Logical Operators
Name | Description | Example | Returned value |
---|---|---|---|
= |
equality |
duration("P1Y2M").months = 2 "triso" = "tech" |
true false |
!= |
not equality |
"triso" != "tech" 2 != 2 |
true false |
> |
greater than: strict numerical order if numbers or dates, strict alphabetical order if strings |
3 > 1 "a" > "f" invoice.date > date("2017-11-27") |
true false may be true or false |
>= |
greater or equal: numerical order if numbers or dates, alphabetical order if strings. |
6 / 2 >= 3 PT25M >= P1D invoice.number >= 52416 |
true false may be true or false |
< |
smaller than: strict numerical order if numbers or dates, strict alphabetical order if strings |
1 < 3 date("2018-11-27") < date("2017-11-27") customer.age < 65 |
true false may be true or false |
⇐ |
smaller or equal: numerical order if numbers or dates, alphabetical order if strings. |
PT25M ⇐ P1D 14 ⇐ 2 * 3 customer.age < 65 |
true false may be true or false |
and |
conjunction |
(2+2=4) and "a" < "b" true and false |
true false |
or |
disjunction |
duration("P1Y2M").months = 2 or (2*2=4) true or false |
true true |
not |
negation |
not(2=4) not(true) |
true false |
Arithmetic Operators
Name | Description | Example | Returned value |
---|---|---|---|
+ |
addition if numbers, concatenation if strings |
5 + 15 "Triso" + "tech" 2017-12-31 + P1D |
20 "Trisotech" 2018-01-01 |
- |
substraction |
10 - 2.5 date("2012-12-25") - date("2012-12-24") 2018-01-01T00:00:00 - PT1M |
7.5 P1D 2017-12-31T23:59 |
* |
multiplication |
0.2 * 100 7.5 * 2.3 3 * P1Y9M |
20 17.25 P5Y3M |
/ |
division |
1 / 500 P1DT5H / 4 -5 / 6 |
0.002 PT7H15M -0.8333333333333334 |
** |
exponential |
2 * * 3 1.7 * * 2 P10Y * * 2 |
8 2.89 null |
Extraction and filters:
Name | Description | Example | Returned value |
---|---|---|---|
. |
extracting by dot notation. |
duration("P1DT2H3M4S").minutes duration("P1Y2M").months |
3 2 |
[n] |
selecting an element in a list, where n is a number. |
given mylist = [1,3,7,11] mylist[2] mylist[8] mylist[-1] |
3 null 11 |
[ex] |
filtering a list, where ex is an expression. |
[1,3,7,11][item > 5] |
[7,11] |
Intervals
Name | Description | Example | Returned value |
---|---|---|---|
in |
membership |
247 in [1,247,530] "a" in ["x","y","z"] |
true false |
[x..y] |
closed inclusive interval between x and y where both x and y are in the interval. |
11 in [1..11] 12 in [1..11] "c" in ["a" .."g"] |
true false true |
(x..y) |
open exclusive interval between x and y where both x and y are not in the interval. |
5 in (1..11) 1 in (1..11) "abc" in ("aba".."abz") |
true false true |
[x..y) |
interval between x and y where y is not in the interval. |
23 in [23..161) 247 in [35..247) "dmn" in ["bpmn".."cmmn") |
true false false |
(x..y] |
interval between x and y where x is not in the interval. |
161 in (23..161] 23 in (23..161] |
true false |
Other Operators
Name | Description | Example | Returned value |
---|---|---|---|
some in satisfies |
some i in [1,2,3,4] satisfies i > 3 some name in ["DMN", "BPMN", "CMMN"] satisfies string length(name) = 3 |
true true |
|
every in satisfies |
every name in ["DMN", "BPMN", "CMMN"] satisfies ends with(name,"MN") every name in ["DMN", "BPMN", "CMMN"] satisfies starts with(name,"D") every i in [1,2,3] satisfies i ⇐ 3 |
true false true |
|
if then else |
if client.age > 18 then "Accepted" else "Refused" |
||
for in return |
iterate over a list. |
for i in [1,2,3,4] return i*i for x in ["DMN","BPMN","CMMN"] return substring before(x,"MN") for num in 1..7 return if (num =1 or num =2) then 1 else (partial[-2] + partial[-1]) |
[1,4,9,16] ["D","CP","CM"] [1,1,2,3,5,8,13] |
between x and y |
membership. |
5 between 1 and 100 5 between 1 and 10 = (5 >= 1 and 5 ⇐ 10) "g" between "a" and "z" |
true true true |