Partilhar via


Fluxos de trabalho da máquina de estado

Uma máquina de estado é um paradigma bem conhecido para o desenvolvimento de programas. A StateMachine atividade, juntamente com State, Transitione outras atividades podem ser usadas para criar programas de fluxo de trabalho de máquina de estado. Este tópico fornece uma visão geral da criação de fluxos de trabalho de máquina de estado.

Visão geral do fluxo de trabalho da máquina de estado

Os fluxos de trabalho da máquina de estado fornecem um estilo de modelagem com o qual você pode modelar seu fluxo de trabalho de maneira orientada a eventos. Uma StateMachine atividade contém os estados e transições que compõem a lógica da máquina de estado e pode ser usada em qualquer lugar onde uma atividade possa ser usada. Existem várias classes no ambiente de execução da máquina de estados.

Para criar um fluxo de trabalho de máquina de estado, os estados são adicionados a uma StateMachine atividade e as transições são usadas para controlar o fluxo entre estados. A captura de tela a seguir, da etapa do tutorial de introduçãoComo: Criar um fluxo de trabalho de máquina de estado, mostra um fluxo de trabalho de máquina de estado com três estados e três transições. Initialize Target é o estado inicial e representa o primeiro estado no fluxo de trabalho. Isso é indicado pela linha que a ela conduz a partir do nó Iniciar. O estado final no fluxo de trabalho é chamado FinalState e representa o ponto em que o fluxo de trabalho é concluído.

Ilustração que mostra o fluxo de trabalho da máquina de estado concluído.

Um fluxo de trabalho de máquina de estado deve ter um e apenas um estado inicial e pelo menos um estado final. Cada estado que não é um estado final deve ter pelo menos uma transição. As seções a seguir abordam a criação e configuração de estados e transições.

Criando e configurando estados

A State representa um estado no qual uma máquina de estado pode estar. Para adicionar um State a um fluxo de trabalho, arraste o designer de atividade Estado da seção Máquina de Estados da Caixa de Ferramentas e largue-o em uma atividade StateMachine na superfície do Designer de Fluxo de Trabalho do Windows.

Captura de ecrã da secção Máquina de Estado da Caixa de Ferramentas.

Para configurar um estado como Estado Inicial, clique com o botão direito do mouse no estado e selecione Definir como Estado Inicial. Além disso, se não houver nenhum estado inicial atual, o estado inicial pode ser designado arrastando uma linha do nó Iniciar na parte superior do fluxo de trabalho para o estado desejado. Quando uma StateMachine atividade é solta no designer de fluxo de trabalho, ela é pré-configurada com um estado inicial chamado State1. Um fluxo de trabalho de máquina de estado deve ter um e apenas um estado inicial.

Um estado que representa um estado de terminação em uma máquina de estado é chamado de estado final. Um estado final é um estado que tem a sua IsFinal propriedade definida como true, não tem Exit atividade, e não tem transições que se originem nele. Para adicionar um estado final a um fluxo de trabalho, arraste um designer de atividade FinalState da seção Máquina de Estado da Caixa de Ferramentas e solte-o em uma StateMachine atividade na superfície do Designer de Fluxo de Trabalho do Windows. Um fluxo de trabalho de máquina de estado deve ter pelo menos um estado final.

Configurando ações de entrada e saída

Um Estado pode ter uma ação Entry e uma ação Exit. (Um estado configurado como um estado final pode ter apenas uma ação de entrada). Quando uma instância de fluxo de trabalho entra em um estado, todas as atividades na ação de entrada são executadas. Quando a ação de entrada estiver concluída, os gatilhos para as transições do estado serão agendados. Quando uma transição para outro estado é confirmada, as atividades na ação de saída são executadas, mesmo que o estado faça a transição de volta para o mesmo estado. Após a conclusão da ação de saída, as atividades na ação da transição são executadas e, em seguida, transita-se para o novo estado, e as suas ações de entrada são agendadas.

Observação

Ao depurar um fluxo de trabalho de máquina de estado, os pontos de interrupção podem ser colocados na atividade da máquina de estado raiz e nos estados dentro do fluxo de trabalho da máquina de estado. Os pontos de interrupção não podem ser colocados diretamente nas transições, mas podem ser colocados em quaisquer atividades contidas nos estados e transições.

Criando e configurando transições

Todos os estados devem ter pelo menos uma transição, exceto um estado final, que pode não ter transições. As transições podem ser adicionadas depois que um estado é adicionado a um fluxo de trabalho de máquina de estado ou podem ser criadas à medida que o estado é descartado.

Para adicionar State e criar uma transição em um único passo, arraste uma atividade de Estado da seção Máquina de Estado da Caixa de Ferramentas e mova sobre outro estado no designer de fluxo de trabalho. Quando o elemento arrastado State estiver sobre outro State, quatro triângulos aparecerão ao redor deste último State. Se o State for solto em um dos quatro triângulos, ele será adicionado à máquina de estado e uma transição será criada da origem State para o destino Statedescartado. Para obter mais informações, consulte Designer de atividade de transição.

Para criar uma transição depois que um estado é adicionado, há duas opções. A primeira opção é arrastar o estado da superfície do designer de fluxo de trabalho, colocar o cursor sobre um estado existente e soltá-lo num dos pontos de inserção. Isso é semelhante ao método descrito na seção anterior. Você também pode passar o mouse sobre o estado de origem desejado e arrastar uma linha para o estado de destino desejado.

Observação

Um único estado em uma máquina de estado pode ter até 76 transições criadas usando o designer de fluxo de trabalho. O limite de transições para um estado para fluxos de trabalho criados fora do designer é limitado apenas pelos recursos do sistema.

Uma transição pode ter um Trigger, um Condition e um Action. Uma transição Trigger é agendada quando a ação do estado Entry de origem da transição é concluída. Normalmente, a Trigger é uma atividade que espera que algum tipo de evento ocorra, mas pode ser qualquer atividade, ou nenhuma atividade. Uma vez concluída a Trigger atividade, o Condition, se presente, é avaliado. Se não houver atividade Trigger, então Condition é imediatamente avaliado. Se a condição for avaliada como false, a transição será cancelada e a Trigger atividade para todas as transições do estado será reagendada. Se houver outras transições que compartilham o mesmo estado de origem da transição atual, essas Trigger ações também serão canceladas e reagendadas. Se o Condition avalia como true, ou não há nenhuma condição, então executa-se a ação Exit do estado de origem e, em seguida, executa-se a Action da transição. Quando Action for concluído, o controle passará para o estado Target

As transições que compartilham um gatilho comum são conhecidas como transições de gatilho compartilhado. Cada transição em um grupo de transições de gatilho compartilhadas tem o mesmo gatilho, mas um único Condition e Ação. Para adicionar ações adicionais a uma transição e criar uma transição compartilhada, clique no círculo que indica o início da transição desejada e arraste-o para o estado desejado. A nova transição partilhará um mesmo gatilho que a transição inicial, mas terá uma condição e uma ação únicas. As transições compartilhadas também podem ser criadas de dentro do designer de transição clicando em Adicionar transição de gatilho compartilhado na parte inferior do designer de transição e, em seguida, selecionando o estado de destino desejado na lista suspensa Estados disponíveis para conexão .

Observação

Note que, se o Condition de uma transição for avaliado como False (ou todas as condições de um trigger compartilhado avaliarem como False), a transição não ocorrerá e todos os triggers de todas as transições do estado serão reprogramados.

Para obter mais informações sobre como criar fluxos de trabalho de máquina de estados, consulte Como criar um fluxo de trabalho de máquina de estados, StateMachine Activity Designer, State Activity Designer, FinalState Activity Designer e Transition Activity Designer.

Terminologia da máquina de estado

Esta seção define o vocabulário da máquina de estado usado ao longo deste tópico.

Estado
A unidade básica que compõe uma máquina de estado. Uma máquina de estado pode estar em um estado a qualquer momento específico.

Ação de Entrada
Uma atividade executada ao entrar no estado

Ação de saída
Uma atividade executada ao sair do estado

Transição
Uma relação direcionada entre dois estados que representa a resposta completa de uma máquina de estado a uma ocorrência de um evento de um tipo específico.

Transição compartilhada
Uma transição que compartilha um estado de origem e gatilho com uma ou mais transições, mas tem uma condição e ação exclusivas.

Acionador
Uma atividade desencadeadora que faz com que ocorra uma transição.

Condição
Uma restrição que deve ser avaliada para true após o gatilho ocorrer, para que a transição seja concluída.

Ação de transição
Uma atividade que é executada ao executar uma determinada transição.

Transição condicional
Uma transição com uma condição explícita.

Auto-transição
Uma transição que transita de um Estado para si mesmo.

Estado inicial
Um estado que representa o ponto de partida da máquina de estado.

Estado final
Um estado que representa a conclusão de uma máquina de estados.

Ver também