流程图是设计程序的已知范例。 流程图活动通常用于实现非顺序工作流,但如果不使用 FlowDecision
节点,则可以用于顺序工作流。
Flowchart 工作流结构
Flowchart 活动是一种活动,该活动包含要执行的活动集合。 流程图还包含流控制元素,例如 FlowDecision 和 FlowSwitch<T>,这些元素根据变量的值在包含的活动之间指导执行。
流节点的类型
根据元素执行时所需的流控制类型,使用不同的元素类型。 流程图元素的类型包括:
FlowStep
- 为流程图中的某一执行步骤进行建模。FlowDecision
- 基于布尔条件的分支执行,类似于 If.FlowSwitch
– 基于独占 Switch 建立执行分支,类似于 Switch<T>。
每个链接都有一个 Action
属性,该属性定义 ActivityAction 可用于执行子活动的属性,以及一个或多个 Next
属性,用于定义当前元素完成执行时要执行的元素或元素。
使用 FlowStep 节点创建基本活动序列
若要对两个活动反过来执行的基本序列进行建模,请使用该 FlowStep
元素。 在以下示例中,两 FlowStep
个元素用于按顺序执行两个活动。
<Flowchart>
<FlowStep>
<Assign DisplayName="Get Name">
<Assign.To>
<OutArgument x:TypeArguments="x:String">[result]</OutArgument>
</Assign.To>
<Assign.Value>
<InArgument x:TypeArguments="x:String">["User"]</InArgument>
</Assign.Value>
</Assign>
<FlowStep.Next>
<FlowStep>
<WriteLine Text="Hello, " & [result]/>
</FlowStep>
</FlowStep.Next>
</FlowStep>
</Flowchart>
使用 FlowDecision 节点创建条件流程图
若要在流程图工作流中为条件流节点建模(即创建充当传统流程图决策符号的链接),请使用FlowDecision节点。 节点的Condition属性被设置为定义条件的表达式,如果表达式的结果为True或False,那么FlowNode和true
属性将被设置为false
实例以便执行。 以下示例演示如何定义一个使用 FlowDecision 节点的工作流。
<Flowchart>
<FlowStep>
<Read Result="[s]"/>
<FlowStep.Next>
<FlowDecision>
<IsEmpty Input="[s]" />
<FlowDecision.True>
<FlowStep>
<Write Text="Empty"/>
</FlowStep>
</FlowDecision.True>
<FlowDecision.False>
<FlowStep>
<Write Text="Non-Empty"/>
</FlowStep>
</FlowDecision.False>
</FlowDecision>
</FlowStep.Next>
</FlowStep>
</Flowchart>
使用 FlowSwitch 节点创建独占交换机
若要为流程图建模,使其根据匹配值选择一个独占路径,请使用FlowSwitch<T>节点。 Expression 属性设置为一个 Activity<TResult>,其类型参数为 Object,用于定义匹配选项的值。 该 Cases 属性定义了一个包含键和 FlowNode 对象的字典,用于与条件表达式进行匹配。同时,它也包括一组 FlowNode 对象,用来决定当特定情况符合条件表达式时,执行流程应该如何进行。 此外,FlowSwitch<T> 还定义了一个 Default 属性,该属性定义如果没有任何情形与条件表达式匹配,执行流程应如何进行。 以下示例演示如何定义一个使用 FlowSwitch<T> 元素的工作流。
<Flowchart>
<FlowSwitch>
<FlowStep x:Key="Red">
<WriteRed/>
</FlowStep>
<FlowStep x:Key="Blue">
<WriteBlue/>
</FlowStep>
<FlowStep x:Key="Green">
<WriteGreen/>
</FlowStep>
</FlowSwitch>
</Flowchart>