Conditions

You can use a switch block as a selection mechanism that allows the value of an expression to control the flow of a workflow's execution. If a value matches, that condition's statement is executed.

If no matching expression is found, the workflow looks for an optional default condition: - condition: true . This should be the last condition in the switch block as they are evaluated in order and the first match found is executed. If there is neither a match nor a default condition, the workflow continues execution with the step that immediately follows.

Each switch block can include a maximum of 50 conditions. Each expression must evaluate to true or false. (Learn how to define and use expressions .)

For example, you can control the order of a workflow's execution by using a switch block to jump between steps based on a conditional expression:

YAML

  
 - 
  
  STEP_NAME_A 
 
 : 
  
 switch 
 : 
  
 - 
  
 condition 
 : 
  
 ${ EXPRESSION_A 
} 
  
 next 
 : 
  
  STEP_NAME_B 
 
  
 - 
  
 condition 
 : 
  
 ${ EXPRESSION_B 
} 
  
 next 
 : 
  
  STEP_NAME_C 
 
  
 - 
  
 condition 
 : 
  
 true 
  
 next 
 : 
  
  STEP_NAME_C 
 
  
 next 
 : 
  
  STEP_NAME_D 
 
  

JSON

  
 [ 
  
 { 
  
 " STEP_NAME_A 
" 
 : 
  
 { 
  
 "switch" 
 : 
  
 [ 
  
 { 
  
 "condition" 
 : 
  
 "${ EXPRESSION_A 
}" 
 , 
  
 "next" 
 : 
  
 " STEP_NAME_B 
" 
  
 }, 
  
 { 
  
 "condition" 
 : 
  
 "${ EXPRESSION_B 
}" 
 , 
  
 "next" 
 : 
  
 " STEP_NAME_C 
" 
  
 } 
  
 { 
  
 "condition" 
 : 
  
 true 
 , 
  
 "next" 
 : 
  
 " STEP_NAME_C 
" 
  
 } 
  
 ], 
  
 "next" 
 : 
  
 " STEP_NAME_D 
" 
  
 } 
  
 } 
  
 ] 
  

You can also nest multiple steps inside a switch block:

YAML

  
 - 
  
  STEP_NAME_A 
 
 : 
  
 switch 
 : 
  
 - 
  
 condition 
 : 
  
 ${ EXPRESSION 
} 
  
 steps 
 : 
  
 - 
  
  STEP_NAME_B 
 
 : 
  
 ... 
  
 - 
  
  STEP_NAME_C 
 
 : 
  
 ... 
  
 next 
 : 
  
  STEP_NAME_D 
 
  

JSON

  
 [ 
  
 { 
  
 " STEP_NAME_A 
" 
 : 
  
 { 
  
 "switch" 
 : 
  
 [ 
  
 { 
  
 "condition" 
 : 
  
 "${ EXPRESSION 
}" 
 , 
  
 "steps" 
 : 
  
 [ 
  
 { 
  
 " STEP_NAME_B 
" 
 : 
  
 { 
  
 ... 
  
 } 
  
 }, 
  
 { 
  
 " STEP_NAME_C 
" 
 : 
  
 { 
  
 ... 
  
 } 
  
 } 
  
 ] 
  
 } 
  
 ], 
  
 "next" 
 : 
  
 " STEP_NAME_D 
" 
  
 } 
  
 } 
  
 ] 
  

Note that the steps block is optional. It can contain the following:

For more information about defining a workflow's order of execution, see Jumps and Control the order of execution in a workflow .

Samples

These samples demonstrate the syntax.

Conditional jumps to specific steps

You might want a workflow to jump to a specific step when a condition is met. These two samples execute steps depending on the value returned by the first step of the workflow.

YAML

  - 
  
 first_step 
 : 
  
 call 
 : 
  
 http.get 
  
 args 
 : 
  
 url 
 : 
  
 https://www.example.com/callA 
  
 result 
 : 
  
 first_result 
 - 
  
 where_to_jump 
 : 
  
 switch 
 : 
  
 - 
  
 condition 
 : 
  
 ${first_result.body.SomeField < 10} 
  
 next 
 : 
  
 small 
  
 - 
  
 condition 
 : 
  
 ${first_result.body.SomeField < 100} 
  
 next 
 : 
  
 medium 
  
 next 
 : 
  
 large 
 - 
  
 small 
 : 
  
 call 
 : 
  
 http.get 
  
 args 
 : 
  
 url 
 : 
  
 https://www.example.com/SmallFunc 
  
 next 
 : 
  
 end 
 - 
  
 medium 
 : 
  
 call 
 : 
  
 http.get 
  
 args 
 : 
  
 url 
 : 
  
 https://www.example.com/MediumFunc 
  
 next 
 : 
  
 end 
 - 
  
 large 
 : 
  
 call 
 : 
  
 http.get 
  
 args 
 : 
  
 url 
 : 
  
 https://www.example.com/LargeFunc 
  
 next 
 : 
  
 end 
 

JSON

  [ 
  
 { 
  
 "first_step" 
 : 
  
 { 
  
 "call" 
 : 
  
 "http.get" 
 , 
  
 "args" 
 : 
  
 { 
  
 "url" 
 : 
  
 "https://www.example.com/callA" 
  
 }, 
  
 "result" 
 : 
  
 "first_result" 
  
 } 
  
 }, 
  
 { 
  
 "where_to_jump" 
 : 
  
 { 
  
 "switch" 
 : 
  
 [ 
  
 { 
  
 "condition" 
 : 
  
 "${first_result.body.SomeField < 10}" 
 , 
  
 "next" 
 : 
  
 "small" 
  
 }, 
  
 { 
  
 "condition" 
 : 
  
 "${first_result.body.SomeField < 100}" 
 , 
  
 "next" 
 : 
  
 "medium" 
  
 } 
  
 ], 
  
 "next" 
 : 
  
 "large" 
  
 } 
  
 }, 
  
 { 
  
 "small" 
 : 
  
 { 
  
 "call" 
 : 
  
 "http.get" 
 , 
  
 "args" 
 : 
  
 { 
  
 "url" 
 : 
  
 "https://www.example.com/SmallFunc" 
  
 }, 
  
 "next" 
 : 
  
 "end" 
  
 } 
  
 }, 
  
 { 
  
 "medium" 
 : 
  
 { 
  
 "call" 
 : 
  
 "http.get" 
 , 
  
 "args" 
 : 
  
 { 
  
 "url" 
 : 
  
 "https://www.example.com/MediumFunc" 
  
 }, 
  
 "next" 
 : 
  
 "end" 
  
 } 
  
 }, 
  
 { 
  
 "large" 
 : 
  
 { 
  
 "call" 
 : 
  
 "http.get" 
 , 
  
 "args" 
 : 
  
 { 
  
 "url" 
 : 
  
 "https://www.example.com/LargeFunc" 
  
 }, 
  
 "next" 
 : 
  
 "end" 
  
 } 
  
 } 
 ] 
 

YAML

  - 
  
 getCurrentTime 
 : 
  
 call 
 : 
  
 http.get 
  
 args 
 : 
  
 url 
 : 
  
 https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam 
  
 result 
 : 
  
 currentTime 
 - 
  
 conditionalSwitch 
 : 
  
 switch 
 : 
  
 - 
  
 condition 
 : 
  
 ${currentTime.body.dayOfWeek == "Friday"} 
  
 next 
 : 
  
 friday 
  
 - 
  
 condition 
 : 
  
 ${currentTime.body.dayOfWeek == "Saturday" or currentTime.body.dayOfWeek == "Sunday"} 
  
 next 
 : 
  
 weekend 
  
 next 
 : 
  
 workWeek 
 - 
  
 friday 
 : 
  
 return 
 : 
  
 "It's 
  
 Friday! 
  
 Almost 
  
 the 
  
 weekend!" 
 - 
  
 weekend 
 : 
  
 return 
 : 
  
 "It's 
  
 the 
  
 weekend!" 
 - 
  
 workWeek 
 : 
  
 return 
 : 
  
 "It's 
  
 the 
  
 work 
  
 week." 
 

JSON

  [ 
  
 { 
  
 "getCurrentTime" 
 : 
  
 { 
  
 "call" 
 : 
  
 "http.get" 
 , 
  
 "args" 
 : 
  
 { 
  
 "url" 
 : 
  
 "https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam" 
  
 }, 
  
 "result" 
 : 
  
 "currentTime" 
  
 } 
  
 }, 
  
 { 
  
 "conditionalSwitch" 
 : 
  
 { 
  
 "switch" 
 : 
  
 [ 
  
 { 
  
 "condition" 
 : 
  
 "${currentTime.body.dayOfWeek == \"Friday\"}" 
 , 
  
 "next" 
 : 
  
 "friday" 
  
 }, 
  
 { 
  
 "condition" 
 : 
  
 "${currentTime.body.dayOfWeek == \"Saturday\" or currentTime.body.dayOfWeek == \"Sunday\"}" 
 , 
  
 "next" 
 : 
  
 "weekend" 
  
 } 
  
 ], 
  
 "next" 
 : 
  
 "workWeek" 
  
 } 
  
 }, 
  
 { 
  
 "friday" 
 : 
  
 { 
  
 "return" 
 : 
  
 "It's Friday! Almost the weekend!" 
  
 } 
  
 }, 
  
 { 
  
 "weekend" 
 : 
  
 { 
  
 "return" 
 : 
  
 "It's the weekend!" 
  
 } 
  
 }, 
  
 { 
  
 "workWeek" 
 : 
  
 { 
  
 "return" 
 : 
  
 "It's the work week." 
  
 } 
  
 } 
 ] 
 

Switch structure with embedded steps

A switch structure can also be used to support direct execution of steps when a condition is met, without jumping to other steps. This improves the readability of a workflow by reducing the number of steps in the workflow definition.

YAML

  - 
  
 step1 
 : 
  
 assign 
 : 
  
 - 
  
 a 
 : 
  
 1 
 - 
  
 step2 
 : 
  
 switch 
 : 
  
 - 
  
 condition 
 : 
  
 ${a==1} 
  
 steps 
 : 
  
 - 
  
 stepA 
 : 
  
 assign 
 : 
  
 - 
  
 a 
 : 
  
 ${a+7} 
  
 - 
  
 stepB 
 : 
  
 return 
 : 
  
 ${"increase a to:"+string(a)} 
 - 
  
 step3 
 : 
  
 return 
 : 
  
 ${"default a="+string(a)} 
 

JSON

  [ 
  
 { 
  
 "step1" 
 : 
  
 { 
  
 "assign" 
 : 
  
 [ 
  
 { 
  
 "a" 
 : 
  
 1 
  
 } 
  
 ] 
  
 } 
  
 }, 
  
 { 
  
 "step2" 
 : 
  
 { 
  
 "switch" 
 : 
  
 [ 
  
 { 
  
 "condition" 
 : 
  
 "${a==1}" 
 , 
  
 "steps" 
 : 
  
 [ 
  
 { 
  
 "stepA" 
 : 
  
 { 
  
 "assign" 
 : 
  
 [ 
  
 { 
  
 "a" 
 : 
  
 "${a+7}" 
  
 } 
  
 ] 
  
 } 
  
 }, 
  
 { 
  
 "stepB" 
 : 
  
 { 
  
 "return" 
 : 
  
 "${\"increase a to:\"+string(a)}" 
  
 } 
  
 } 
  
 ] 
  
 } 
  
 ] 
  
 } 
  
 }, 
  
 { 
  
 "step3" 
 : 
  
 { 
  
 "return" 
 : 
  
 "${\"default a=\"+string(a)}" 
  
 } 
  
 } 
 ] 
 
Create a Mobile Website
View Site in Mobile | Classic
Share by: