Windows WorkFlow Foundation: Exemplo prático com uso de ifElseActivity
Windows WorkFlow Foundation: Exemplo prático com uso de ifElseActivity
Em artigo anterior falei sobre o FrameWork .NET 3.0 e de seus principais elementos, com Windows WorkFlow Foundation.
Agora vamos demonstrar como utilizar na prática o WWF com uma de suas atividades mais interessantes: o ifElseActivity.
Vamos criar uma aplicação console utilizando o Template Seqüencial WorkFlow Console Aplication. Se você instalou o beta do WWF1, este template deverá estar disponível no Visual Studio 2005.
Então vamos lá. Abra o VS 2005 e selecione Seqüencial WorkFlow Console Aplication na caixa de dialogo New Project. De um nome para sua aplicação.
O VS cria um modelo de aplicação de WorkFlow seqüencial:

Tudo a fazer é arrastar e soltar as atividades entre as atividades de inicio e término do WorkFlow. Vamos primeiro montar o workflow para depois configurá-lo.
Arraste um CodeActivity para o workflow, deixe o nome padrão Arraste um ifElseActivity para o workflow, posicionando-o logo abaixo do CodeActivity colocado anteriormente. A atividade ifElseActivity é criada com duas atividades ifElseBranchActivity. Cada ifElseBranchActivity representa uma condição da estrutura. O WWF avalia as condições da esquerda para direita, executado a primeira que retornar verdadeiro. Se nenhuma for verdadeira e a ultima não tiver qualquer condição, esta será executada. Você pode adicionar quantos ifElseBranchActivity forem necessários a cada ifElseActivity.
Dentro de cada ifElseBranchActivity adicione um CodeActivity. Adicione mais um CodeActivity após o ifElseActivity. Seu workflow deve parecer com o da imagem abaixo:

Vamos agora configurar nosso WorkFlow para funcionar corretamente.
• Clique em View Code e adicione uma variável privada, conforme o código abaixo:
Private _Condicao As Boolean |
• Crie um manipulador para o evento ConditionalEventArgs do WorkFlow, conforme o exemplo abaixo. Neste evento atribuímos a condição do WorkFlow de acordo com a nossa variável privada declarada acima:
Private Sub MeuEvento(ByVal sender As System.Object, ByVal e As System.Workflow.Activities.ConditionalEventArgs)
e.Result = _Condicao End Sub
. De um duplo clique sobre o codActivity1, no manipulador de evento criado escreva:
Console.WriteLine _
("Entrando no codeactivity1, definindo condição.")
_Condicao = True |
• De um duplo clique sobre o codActivity2, que deve estar dentro do ifElseBranchActivity da esquerda. Escreva o seguinte código:
Console.WriteLine("A condição é verdadeira.")
|
• De um duplo clique sobre o codActivity3, que deve estar dentro do ifElseBranchActivity da direita. Escreva o seguinte código
Console.WriteLine("A condição é falsa.") |
• No codeActivity4, que deve estar externo ao ifElseActivity, escreva o código
abaixo para que você tenha tempo de ler o resultado:
• Finalmente vamos definir no ifElseBranchActivity da esquerda, qual será a
condição utilizada. Para isso selecione a atividade, na janela de
propriedades, em Condition, selecione
System.Workflow.Activities.CodeCondition. Expanda a propriedade, e em
Condition, selecione MeuEvento, que foi o evento criado anteriormente.
Note que é executado o código de condição verdadeira.

Experimente alterar o valor da variável _condicao para False e execute novamente a aplicação. Observer que o ifElseBranchActivity da direita foi executado.
Abaixo, segue um resumo de todo a parte declarativa da aplicação:
Private Sub MeuEvento(ByVal sender As System.Object, ByVal e As System.Workflow.Activities e.Result = _Condicao End Sub
Private Sub codeActivity1_ExecuteCode(
ByVal sender As System.Object, ByVal e As System.EventArgs)
Console.WriteLine(
"Entrando no codeactivity1, definindo condição.")
_Condicao = True End Sub
Private Sub codeActivity2_ExecuteCode(
ByVal sender As System.Object, ByVal e As System.EventArgs)
Console.WriteLine("A condição é verdadeira.") End Sub
Private Sub codeActivity3_ExecuteCode(
ByVal sender As System.Object, ByVal e As System.EventArgs)
Console.WriteLine("A condição é falsa.") End Sub
Private Sub codeActivity4_ExecuteCode(
ByVal sender As System.Object, ByVal e As System.EventArgs)
Console.ReadLine() End Sub
|
1 Você pode baixa-lo de http://msdn.microsoft.com/winfx/default.aspx