Como: criar um fluxo de trabalho da máquina de estado

Os fluxos de trabalho podem ser construídos a partir de atividades internas assim como as atividades personalizadas. As etapas deste tópico mostram como criar um fluxo de trabalho que usa tanto as atividades internas (como a atividade StateMachine) quanto as atividades personalizadas do tópico anterior, Como criar uma atividade. O fluxo de trabalho modela um jogo de palpite de número.

Observação

Cada tópico do tutorial de Introdução depende dos tópicos anteriores. Para concluir este tópico, primeiro você deve concluir Como criar uma atividade.

Para criar o fluxo de trabalho

  1. Clique com o botão direito em NumberGuessWorkflowActivities no Gerenciador de Soluções e selecione Adicionar, Novo Item.

  2. No nó Instalado, Itens Comuns, selecione Fluxo de Trabalho. Selecione Atividade na lista Fluxo de Trabalho.

  3. Digite StateMachineNumberGuessWorkflow na caixa Nome e clique em Adicionar.

  4. Arraste uma atividade StateMachine da seção Máquina de Estado da Caixa de Ferramentas e solte-a no rótulo Solte a atividade aqui na superfície de design do fluxo de trabalho.

Para criar as variáveis e os argumentos do fluxo de trabalho

  1. Clique duas vezes em StateMachineNumberGuessWorkflow.xaml no Gerenciador de Soluções para exibir o fluxo de trabalho no designer, se ainda não estiver exibido.

  2. Clique em Argumentos no lado inferior esquerdo do designer de fluxo de trabalho para exibir o painel Argumentos.

  3. Clique em Criar Argumento.

  4. Digite MaxNumber na caixa Nome, selecione Dentro na lista suspensa Direção, selecione Int32 na lista suspensa Tipo de argumento e, em seguida, pressione ENTER para salvar o argumento.

  5. Clique em Criar Argumento.

  6. Digite Turns na caixa Nome abaixo do argumento recém-adicionado MaxNumber, selecione Fora na lista suspensa Direção, selecione Int32 na lista suspensa Tipo de argumento e pressione ENTER.

  7. Clique em Argumentos no lado inferior esquerdo do designer de atividade para fechar o painel Argumentos.

  8. Clique em Variáveis no lado inferior esquerdo do designer de fluxo de trabalho para exibir o painel Variáveis.

  9. Clique em Criar Variável.

    Dica

    Se nenhuma caixa Criar Variável for exibida, clique na atividade StateMachine na superfície de design do fluxo de trabalho para selecioná-la.

  10. Digite Guess na caixa Nome, selecione Int32 na lista suspensa Tipo de variável e pressione ENTER para salvar a variável.

  11. Clique em Criar Variável.

  12. Digite Target na caixa Nome, selecione Int32 na lista suspensa Tipo de variável e pressione ENTER para salvar a variável.

  13. Clique em Variáveis no lado inferior esquerdo do designer de atividade para fechar o painel Variáveis.

Para adicionar as atividades de fluxo de trabalho

  1. Clique em State1 para selecioná-lo. Na Janela de Propriedades, altere DisplayName para Initialize Target.

    Dica

    Se a janela Propriedades não abrir, selecione a Janela Propriedades no menu Exibir.

  2. Clique duas vezes no estado Inicializar Destino recém-renomeado no designer de fluxo de trabalho para expandi-lo.

  3. Arraste uma atividade Atribuir da seção Primitivos da Caixa de Ferramentas e solte-a na seção Entrada do estado. Digite Target na caixa Para e a expressão a seguir na caixa Inserir uma expressão C# ou Inserir uma expressão VB.

    New System.Random().Next(1, MaxNumber + 1)  
    
    new System.Random().Next(1, MaxNumber + 1)  
    

    Dica

    Se a janela da Caixa de Ferramentas não abrir, selecione Caixa de Ferramentas no menu Exibir.

  4. Retorne à exibição geral da máquina de estado no designer de fluxo de trabalho clicando em StateMachine na exibição de trilha na parte superior do designer de fluxo de trabalho.

  5. Arraste uma atividade Estado da seção Máquina de Estado da Caixa de Ferramentas para o designer de fluxo de trabalho e focalize o estado Inicializar Destino. Observe que quatro triângulos aparecerão em torno do estado Inicializar Destino quando o novo estado estiver sobre ele. Solte o novo estado no triângulo que está imediatamente abaixo do estado Inicializar Destino. Isso coloca o novo estado no fluxo de trabalho e cria uma transição do estado Inicializar Destino para o novo estado.

  6. Clique em State1 para selecioná-lo, altere o DisplayName para Enter Guess e clique duas vezes no estado no designer de fluxo de trabalho para expandi-lo.

  7. Arraste uma atividade WriteLine da seção Primitivos da Caixa de Ferramentas e solte-a na seção Entrada do estado.

  8. Digite a seguinte expressão na caixa de propriedades de Texto de WriteLine.

    "Please enter a number between 1 and " & MaxNumber  
    
    "Please enter a number between 1 and " + MaxNumber  
    
  9. Arraste uma atividade Atribuir da seção Primitivos da Caixa de Ferramentas e solte-a na seção Sair do estado.

  10. Digite Turns na caixa Para e Turns + 1 na caixa Inserir uma expressão C# ou Inserir uma expressão VB.

  11. Retorne à exibição geral da máquina de estado no designer de fluxo de trabalho clicando em StateMachine na exibição de trilha na parte superior do designer de fluxo de trabalho.

  12. Arraste uma atividade FinalState da seção de Máquina de Estado da Caixa de Ferramentas, focalize-a sobre o estado Inserir Palpite e solte-a no triângulo que aparece à direita do estado Inserir Palpite para que uma transição seja criada entre Inserir Palpite e FinalState.

  13. O nome padrão da transição é T2. Clique na transição no designer de fluxo de trabalho para selecioná-lo e defina seu DisplayName como Palpite Correto. Clique e selecione FinalState e arraste-o para a direita de modo que haja um espaço para que o nome completo da transição seja exibido sem sobrepor nenhum dos dois estados. Isso facilitará a conclusão das etapas restantes no tutorial.

  14. Clique duas vezes na transição Palpite Correto recém-renomeada no designer de fluxo de trabalho para expandi-la.

  15. Arraste uma atividade ReadInt da seção NumberGuessWorkflowActivities da Caixa de Ferramentas e solte-a na seção Gatilho da transição.

  16. Na Janela de Propriedades para a atividade ReadInt, digite "EnterGuess", incluindo as aspas, na caixa do valor da propriedade BookmarkName, e Guess na caixa do valor da propriedade de Resultado

  17. Digite a seguinte expressão na caixa do valor da propriedade Condição da transição Palpite Correto.

    Guess = Target  
    
    Guess == Target  
    
  18. Retorne à exibição geral da máquina de estado no designer de fluxo de trabalho clicando em StateMachine na exibição de trilha na parte superior do designer de fluxo de trabalho.

    Observação

    Uma transição ocorre quando o evento de gatilho é recebido e o Condition, se houver, é avaliado como True. Para essa transição, se o Guess do usuário corresponder ao Target gerado aleatoriamente, o controle passará para FinalState e o fluxo de trabalho será concluído.

  19. Dependendo de o palpite estar correto, o fluxo de trabalho deverá fazer a transição para o FinalState ou voltar para o estado Inserir Palpite para outra tentativa. Ambas as transições compartilham o mesmo gatilho de esperar o palpite do usuário ser recebido pela atividade ReadInt. Isso é chamado de uma transição compartilhada. Para criar uma transição compartilhada, clique no círculo que indica o início da transição Palpite Correto e arraste-o para o estado desejado. Nesse caso, a transição é automática, portanto arraste o ponto inicial da transição de Palpite Correto e solte-o na parte inferior do estado Inserir Palpite. Depois de criar a transição, selecione-a no designer de fluxo de trabalho e defina sua propriedade DisplayName como Palpite Incorreto.

    Observação

    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 selecionando o estado desejado de destino no menu suspenso Estados disponíveis para conexão.

    Observação

    Observe que se Condition de uma transição for avaliada como false (ou todas as condições de uma transição do gatilho compartilhada for avaliada como false), a transição não ocorrerá e todos os gatilhos para todas as transições de estado serão reprogramados. Neste tutorial, essa situação não pode ocorrer devido à maneira como as condições são configuradas (temos ações específicas para se o palpite está correto ou incorreto).

  20. Clique duas vezes na transição Palpite Incorreto no designer de fluxo de trabalho para expandi-la. Observe que o Gatilho já está definido para a mesma atividade ReadInt que foi usada pela transição Palpite Correto.

  21. Digite a expressão a seguir na caixa de valor de propriedade Condição.

    Guess <> Target  
    
    Guess != Target  
    
  22. Arraste uma atividade Se da seção Fluxo de Controle da Caixa de Ferramentas e solte-a na seção Ação da transição.

  23. Digite a expressão a seguir na caixa de valor de propriedade Condição da atividade Se.

    Guess < Target
    
  24. Arraste duas atividades WriteLine da seção Primitivos da Caixa de Ferramentas e solte-as de modo que uma esteja na seção Então da atividade Se e outra esteja na seção Ou então.

  25. Clique na atividade WriteLine na seção Então para selecioná-la e digite a seguinte expressão na caixa do valor da propriedade Texto.

    "Your guess is too low."  
    
  26. Clique na atividade WriteLine na seção Então para selecioná-la e digite a seguinte expressão na caixa do valor da propriedade Texto.

    "Your guess is too high."  
    
  27. Retorne à exibição geral da máquina de estado no designer de fluxo de trabalho clicando em StateMachine na exibição de trilha na parte superior do designer de fluxo de trabalho.

    O exemplo a seguir ilustra o fluxo de trabalho concluído.

    Illustration that shows the completed state machine workflow.

Para compilar o fluxo de trabalho

  1. Pressione CTRL+SHIFT+B para criar a solução.

    Para obter instruções sobre como executar o fluxo de trabalho, consulte o seguinte tópico, Como executar um fluxo de trabalho. Se você já tiver concluído a etapa Como executar um fluxo de trabalho com um estilo diferente de fluxo de trabalho e não quiser executá-lo usando o fluxo de trabalho da máquina de estado dessa etapa, pule para a seção Para compilar e executar o aplicativo de Como executar um fluxo de trabalho.

Confira também