WorkflowControlActions 类

命名空间:Microsoft.Azure。Workflows.Sdk

提供工厂方法,用于创建分支、分组、重复或停止执行的控制流动作。 通过 WorkflowBuiltInActions 访问该类,使用 WorkflowActions.BuiltIn.Control

用法

// Access control actions via WorkflowActions.BuiltIn.Control
var trigger = WorkflowTriggers.BuiltIn.CreateHttpTrigger();

var scope = WorkflowActions.BuiltIn.Control.Scope(() =>
{
    var step1 = WorkflowActions.BuiltIn.Compose(inputs: () => "Process").WithName("Process");
    return step1;
}).WithName("ProcessingScope");

trigger.Then(scope);
WorkflowFactory.CreateStatefulWorkflow("ControlFlowExample", trigger);

Methods

Scope

创建一个范围动作,将嵌套动作归入单一 的 IWorkflowAction

IWorkflowAction Scope(Func<IChainableNode> actions)
名称 说明 类型 必需
actions 构建嵌套动作图的工厂。 Func<IChainableNode> 是的
var scope = WorkflowActions.BuiltIn.Control.Scope(() =>
{
    var step1 = WorkflowActions.BuiltIn.Compose(inputs: () => "Step 1").WithName("Step1");
    var step2 = WorkflowActions.BuiltIn.Compose(inputs: () => "Step 2").WithName("Step2");
    return step1.Then(step2);
}).WithName("MyScope");

条件

创建一个条件动作,评估布尔表达式,并将执行路由到两个分支之一。

IWorkflowAction Condition(Expression<Func<bool>> expression, Func<IChainableNode> trueBranch, Func<IChainableNode> falseBranch)
名称 说明 类型 必需
表达式 用布尔表达式来评估。 表达<式 Func<bool>> 是的
trueBranch 工厂是真正分支行动的产物。 Func<IChainableNode> 是的
falseBranch 虚假分支动作的工厂。 Func<IChainableNode> 是的
var condition = WorkflowActions.BuiltIn.Control.Condition(
    expression: () => trigger.TriggerOutput.Body != null,
    trueBranch: () => WorkflowActions.BuiltIn.Compose(inputs: () => "Has body").WithName("True"),
    falseBranch: () => WorkflowActions.BuiltIn.Compose(inputs: () => "No body").WithName("False")
).WithName("CheckBody");

ForEach

创建一个循环动作,遍历集合并执行每个项目提供的动作图。

IWorkflowAction ForEach(Expression<Func<JToken>> items, Func<JToken, IChainableNode> actions)
名称 说明 类型 必需
items 集合的迭代表达式。 表达式<Func<JToken>> 是的
actions 工厂接收当前项目并返回动作图。 Func<JToken, IChainableNode> 是的
var forEach = WorkflowActions.BuiltIn.Control.ForEach(
    items: () => JArray.Parse("[\"one\",\"two\"]"),
    actions: (item) => WorkflowActions.BuiltIn.Compose(inputs: () => $"Item: {item}").WithName("ProcessItem")
).WithName("LoopItems");

直到

创建一个循环动作,重复其嵌套动作,直到所提供的表达式被评估为真。

IWorkflowAction Until(Expression<Func<bool>> expression, Func<IChainableNode> actions)
名称 说明 类型 必需
表达式 布尔退出条件。 表达<式 Func<bool>> 是的
actions 工厂里构建重复动作图。 Func<IChainableNode> 是的
var counterVar = WorkflowActions.BuiltIn.Variables.InitializeVariable<int>(
    name: () => "counter",
    value: () => 0).WithName("Counter");

var until = WorkflowActions.BuiltIn.Control.Until(
    expression: () => counterVar.Value.Value<int>() >= 10,
    actions: () => WorkflowActions.BuiltIn.Variables.IncrementVariable<int>(
        name: () => "counter", value: () => 1).WithName("Increment")
).WithName("RepeatUntil10");

开关

创建一个交换操作,评估输入并将执行路由到匹配的 SwitchCase 或默认分支。

IWorkflowAction Switch(Expression<Func<JToken>> on, Func<Dictionary<string, SwitchCase>> cases, Func<IChainableNode> defaultCase = null)
名称 说明 类型 必需
on 值的表达式,用于开启。 表达式<Func<JToken>> 是的
出厂时将机箱标签退回SwitchCase映射。 Func<词典<字符串,SwitchCase>> 是的
默认案例 默认的机箱操作是出厂设置。 Func<IChainableNode>
var switchAction = WorkflowActions.BuiltIn.Control.Switch(
    on: () => trigger.TriggerOutput.Body,
    cases: () => new Dictionary<string, SwitchCase>
    {
        ["case1"] = new SwitchCase("value1",
            WorkflowActions.BuiltIn.Compose(inputs: () => "Case 1").WithName("HandleCase1")),
        ["case2"] = new SwitchCase("value2",
            WorkflowActions.BuiltIn.Compose(inputs: () => "Case 2").WithName("HandleCase2"))
    },
    defaultCase: () => WorkflowActions.BuiltIn.Compose(inputs: () => "Default").WithName("HandleDefault")
).WithName("RouteByValue");

Terminate

创建一个终止动作,通过指定的 FlowStatus 和可选消息停止工作流。

IWorkflowAction Terminate(Expression<Func<FlowStatus>> status, Expression<Func<string>> message = null)
名称 说明 类型 必需
状态 终止状态表达。 表达<式 Func<FlowStatus>> 是的
消息 终止消息表达式。 表达<式函子<字符串>>
var terminate = WorkflowActions.BuiltIn.Control.Terminate(
    status: () => FlowStatus.Failed,
    message: () => "Critical error occurred").WithName("StopWorkflow");