Workflow Core v3.1.0 Release Notes
Release Date: 2020-01-05 // over 4 years ago-
Workflow Core 3.1
Decision Branching
You can define multiple independent branches within your workflow and select one based on an expression value.
🏗 For the fluent API, we define our branches with the
CreateBranch()
method on the workflow builder. We can then select a branch using theDecision
step.This workflow will select
branch1
if the value ofdata.Value1
isone
, andbranch2
if it istwo
.var branch1 = builder.CreateBranch() .StartWith\<PrintMessage\>() .Input(step =\> step.Message, data =\> "hi from 1") .Then\<PrintMessage\>() .Input(step =\> step.Message, data =\> "bye from 1");var branch2 = builder.CreateBranch() .StartWith\<PrintMessage\>() .Input(step =\> step.Message, data =\> "hi from 2") .Then\<PrintMessage\>() .Input(step =\> step.Message, data =\> "bye from 2");builder .StartWith\<HelloWorld\>() .Decide(data =\> data.Value1) .Branch("one", branch1) .Branch("two", branch2);
The JSON representation would look something like this.
{ "Id": "DecisionWorkflow", "Version": 1, "DataType": "MyApp.MyData, MyApp", "Steps": [{ "Id": "decide", "StepType": "WorkflowCore.Primitives.Decide, WorkflowCore", "Inputs": { "Expression": "data.Value1" }, "OutcomeSteps": { "Print1": "\"one\"", "Print2": "\"two\"" } }, { "Id": "Print1", "StepType": "MyApp.PrintMessage, MyApp", "Inputs": { "Message": "\"Hello from 1\"" } }, { "Id": "Print2", "StepType": "MyApp.PrintMessage, MyApp", "Inputs": { "Message": "\"Hello from 2\"" } }] }
Outcomes for JSON workflows
You can now specify
OutcomeSteps
for a step in JSON and YAML workflow definitions."OutcomeSteps": { "<<Step1 Id>>": "<<expression>>", "<<Step2 Id>>": "<<expression>>" }
⏱ If the outcome of a step matches a particular expression, that step would be scheduled as the next step to execute.