Workflow Composition
Route Request Workflow
Select Case
A request router can map an integer kind to a route label and adjusted cost.
Program
Play the program to choose a request kind and see the selected branch update the workflow state.
route_request_workflow.f90
program route_request_workflow_demo
implicit none
integer :: request_kind
integer :: base_cost
integer :: adjusted_cost
character(len=8) :: route
request_kind =
base_cost = 40
select case (request_kind)
case (1)
route = 'fast'
adjusted_cost = base_cost - 5
case (2)
route = 'normal'
adjusted_cost = base_cost
case default
route = 'review'
adjusted_cost = base_cost + 20
end select
print '(A, 1X, I0)', trim(route), adjusted_cost
end program route_request_workflow_demo
program route_request_workflow_demo
implicit none
integer :: request_kind
integer :: base_cost
integer :: adjusted_cost
character(len=8) :: route
request_kind =
base_cost = 40
select case (request_kind)
case (1)
route = 'fast'
adjusted_cost = base_cost - 5
case (2)
route = 'normal'
adjusted_cost = base_cost
case default
route = 'review'
adjusted_cost = base_cost + 20
end select
print '(A, 1X, I0)', trim(route), adjusted_cost
end program route_request_workflow_demo
program route_request_workflow_demo
implicit none
integer :: request_kind
integer :: base_cost
integer :: adjusted_cost
character(len=8) :: route
request_kind =
base_cost = 40
select case (request_kind)
case (1)
route = 'fast'
adjusted_cost = base_cost - 5
case (2)
route = 'normal'
adjusted_cost = base_cost
case default
route = 'review'
adjusted_cost = base_cost + 20
end select
print '(A, 1X, I0)', trim(route), adjusted_cost
end program route_request_workflow_demo
select case
`select case` chooses one route from several explicit cases.
case default
The default case handles request kinds not matched earlier.
workflow state
Both the label and the cost are updated by the selected branch.