流程图工作流

流程图是设计程序的已知范例。 流程图活动通常用于实现非顺序工作流,但如果不使用 FlowDecision 节点,则可以用于顺序工作流。

Flowchart 工作流结构

Flowchart 活动是一种活动,该活动包含要执行的活动集合。 流程图还包含流控制元素,例如 FlowDecisionFlowSwitch<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属性被设置为定义条件的表达式,如果表达式的结果为TrueFalse,那么FlowNodetrue属性将被设置为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>