流程图工作流

本主题适用于 Windows Workflow Foundation 4。

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

流程图工作流结构

Flowchart 活动是包含从 FlowNode 继承的流节点集合的活动。流节点可以包含要执行以及将执行指向其他流节点的子活动。

流节点的类型

根据执行元素时所需的流控制类型,使用不同的元素类型。流程图元素的类型包括:

  • FlowStep - 在流程图中建立一个执行步骤的模型。

  • FlowDecision - 基于布尔条件建立执行分支,类似于 If

  • FlowSwitch – 基于独占 Switch 建立执行分支,类似于 Switch

每个链接都具有一个 Action 属性,该属性定义可用于执行子活动的 ActivityAction,并且每个链接还具有一个或多个 Next 属性,这些属性定义元素完成执行后要执行的元素。

使用 FlowStep 节点创建一个基本的活动顺序

若要建立一个基本的顺序模型,在该模型中依次执行两个活动,请使用 FlowStep 元素。在下面的示例中,使用了两个 FlowStep 元素按顺序执行两个活动。

<Flowchart>
  <FlowStep>
    <Read Result = "[result]"/>
    <FlowStep.Next>
<FlowStep>
        <Write Text="[Hello + result]"/>
</FlowStep>
    </FlowStep.Next>
  </FlowStep>
</Flowchart>

使用 FlowDecision 节点创建条件流程图

若要在流程图工作流中建立条件流节点的模型(即,创建一个充当传统流程图的决策符号的链接),请使用 FlowDecision 节点。该节点的 Condition 属性设置为定义条件的 WorkflowElement,并且 TrueFalse 属性设置为表达式计算结果为 truefalse 时要执行的 FlowNode 实例。下面的示例演示如何定义使用 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 节点创建独占 Switch

若要建立某个流程图的模型,在该流程图中基于匹配的值选择了一个独占路径,请使用 FlowSwitch 节点。Expression 属性设置为 WorkflowElement’1,其中类型参数 Object 定义匹配选择的值,并且 Cases 属性定义要匹配条件表达式的键和 FlowNode 对象的字典,以及一组 FlowNode 对象,这些对象定义在给定情况与条件表达式匹配时的执行流方式。FlowSwitch 还定义一个 Default 属性,该属性定义没有情况与条件表达式匹配时的执行流方式。下面的示例演示如何定义使用 FlowSwitch 元素的工作流。

<Flowchart>
    <FlowSwitch>
      <FlowSwitch.Expression>
        <ReadColor/>
      </FlowSwitch.Expression>
<FlowStep x:Key="Red">
        <WriteRed/>
      </FlowStep>
      <FlowStep x:Key="Blue">
        <WriteBlue/>
      </FlowStep>
      <FlowStep x:Key="Green">
        <WriteGreen/>
      </FlowStep>
      </FlowSwitch.Cases>
    </FlowSwitch>
</Flowchart>