Partilhar via


Fluxos de trabalho de fluxograma

Um fluxograma é um paradigma bem conhecido para projetar programas. A atividade Fluxograma é normalmente usada para implementar fluxos de trabalho não sequenciais, mas pode ser usada para fluxos de trabalho sequenciais se nenhum FlowDecision nó for usado.

Estrutura do fluxo de trabalho do fluxograma

Uma atividade de fluxograma é uma atividade que contém uma coleção de atividades a serem executadas. Os fluxogramas também contêm elementos de controle de fluxo, como FlowDecision e FlowSwitch<T> que a execução direta entre atividades contidas com base nos valores das variáveis.

Tipos de nós de fluxo

Diferentes tipos de elementos são usados dependendo do tipo de controle de fluxo necessário quando o elemento é executado. Os tipos de elementos de fluxograma incluem:

  • FlowStep - Modela uma etapa de execução no fluxograma.

  • FlowDecision - Execução de ramos com base em uma condição booleana, semelhante a If.

  • FlowSwitch – Execução de filiais com base em um switch exclusivo, semelhante ao Switch<T>.

Cada link tem uma Action propriedade que define uma ActivityAction que pode ser usada para executar atividades filho e uma ou mais Next propriedades que definem qual elemento ou elementos executar quando o elemento atual terminar a execução.

Criando uma sequência de atividades básica com um nó FlowStep

Para modelar uma sequência básica na qual duas atividades são executadas por sua vez, o FlowStep elemento é usado. No exemplo a seguir, dois FlowStep elementos são usados para executar duas atividades em sequência.

<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>

Criando um fluxograma condicional com um nó FlowDecision

Para modelar um nó de fluxo condicional em um fluxo de trabalho de fluxograma (ou seja, para criar um link que funcione como o símbolo de decisão de um fluxograma tradicional), um FlowDecision nó é usado. A Condition propriedade do nó é definida como uma expressão que define a condição, e as True propriedades e False são definidas como FlowNode instâncias a serem executadas se a expressão for avaliada como true ou false. O exemplo a seguir mostra como definir um fluxo de trabalho que usa um FlowDecision nó.

<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>

Criando um switch exclusivo com um nó FlowSwitch

Para modelar um fluxograma no qual um caminho exclusivo é selecionado com base em um valor correspondente, o FlowSwitch<T> nó é usado. A Expression propriedade é definida como um Activity<TResult> com um parâmetro type de que define o valor a ser correspondido às opções contra Object . A Cases propriedade define um dicionário de chaves e FlowNode objetos para corresponder à expressão condicional e um conjunto de FlowNode objetos que definem como a execução deve fluir se o caso dado corresponder à expressão condicional. O FlowSwitch<T> também define uma Default propriedade que define como a execução deve fluir se nenhum caso corresponder à expressão de condição. O exemplo a seguir demonstra como definir um fluxo de trabalho que usa um FlowSwitch<T> elemento .

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