Desenvolvimento - Visual Basic .NET

Windows Workflow Foundation (WWF) - um overview

O autor mostra nessa matéria alguns conceitos de workflow e apresenta o Windows Workflow Foundation.

por Leonardo Bruno Bentes Lima



Aplica-se a: Visual Studio 2005
Linguagem de programação: Visual Basic .NET
Recursos necessários: WinFX Runtime e Visual Studio 2005 Extensions for Windows Workflow Foundation.

http://msdn.microsoft.com/windowsvista/getthebeta/default.aspx

Resumo: Mostrarei nessa matéria alguns conceitos de workflow e apresentarei o Windows Workflow Foundation.

A idéia inicial era escrever diretamente sobre o Windows Workflow Foundation, mostrando as melhores características e fazendo um exemplo prático. Mas ao amadurecer a idéia, e conversando com vários desenvolvedores e profissionais de TI, percebi que não era comum a implementação de workflows em sistemas aqui no Brasil e muito menos era familiar para muitos desenvolvedores. Por esses motivos resolvi começar pelo básico, explicando o que é e onde se aplica o workflow e posteriormente irei mostrar o WWF na prática.

Imagine um cenário onde um grande sistema composto por vários módulos interdependentes e com grande complexidade nas regras de comunicação entre esses módulos deva ser construído de forma que os passos para realizar uma tarefa envolvam a execução de alguns módulos em uma seqüência predeterminada. Um sistema que se encaixa nesse cenário é um ERP, e uma tarefa que normalmente é realiza nele é a saída de mercadoria. Bem, para quem não conhece, para se realizar uma saída de mercadoria temos que primeiro cadastrar um pedido, cadastrar os itens desse pedido com as respectivas quantidades e depois configuramos os dados adicionais como impostos, frete, etc. Especificamente no sistema em que estou trabalhando, após o cadastro está finalizado, tem um botão que ficava ativo, que serve para realizar a baixa no estoque, o que por si só envolve mais vários passos (muitos deles são regras que não sofrem interferência do usuário). Feito isso, imprimimos o relatório com os dados do pedido.

Do ponto de vista do usuário, temos que realizar 5 passos:

  • Cadastrar o pedido;
  • Cadastrar os itens do pedido;
  • Configurar os dados adicionais;
  • Baixar o estoque (se estiver configurado para manual);
  • Imprimir o pedido

Esses passos precisam ser executados nesta seqüência e de forma manual, exigindo que o operador saiba o que precisa fazer. Podemos chamar o fluxo de execução dessa tarefa de workflow.

O objetivo principal do Windows Workflow Foundation é facilitar a integração de todos os componentes que fazem parte da execução de uma tarefa e coordenar a seqüência de execução.

O WWF é composto pelo Workflow Engine, API gerenciada (.NET), Runtime e um ambiente visual integrado com o Visual Studio 2005 que permite o desenvolvimento e debug da aplicação.

Vamos fazer um exemplo prático:

Ao instalar o Visual Studio 2005 Extensions for Windows Workflow Foundation, aparecerá uma nova opção de projeto, chamado de Workflow. Ao selecionar o item Workflow, temos a nossa disposição algumas opções, veja na figura abaixo:

No nosso exemplo usaremos o Sequential Workflow Console Application. Mas antes de continuar gostaria de explicar quais são os dois tipos de workflow existem no WinFx.

- Sequential Workflow: Utilizado para tarefas que são executadas passo a passo um após o outro, embora também possa se tornar mais complexa ao receber eventos externos e executar passos paralelos.

- State Machine Workflow: É composto por um conjunto de states (estados), transitions (transições) e actions (ações). É utilizado para tarefas não seqüenciais onde ao iniciar um estado, o mesmo pode ser alterado de acordo com eventos até chegar ao estado final, que sinaliza o fim do workflow.

Obs.: O que eu chamo de passo, no Workflow Foundation chamamos de Activity. Vamos começar criando um Sequential Workflow Console Application, ao qual dei o nome de MeuPrimeiroWorkflow. Veja figura abaixo:

Ao criar o projeto, perceba que no design foi criado o esqueleto do workflow e dois arquivos: Workflow1.vb (Arquivo onde escrevemos a lógica do nosso workflow) e o arquivo oculto Workflow1.Designer.vb (Arquivo onde fica a descrição das atividades, é gerado e atualizado automaticamente pelo Visual Studio 2005).

Se executarmos o projeto, nada acontecerá pois não existe nenhum passo (Activity). Então vamos adicionar o primeiro passo do nosso exemplo. Adicione um novo item: Code Activity. Para isso vá no Toolbar e escolha a opção Code e arraste para o Design do Workflow. Veja figura abaixo:

O Design ficará como mostra a figura abaixo:

Agora já temos uma Activity dentro de nosso workflow, que por enquanto nada faz. Para tornar o código útil, temos que programar o evento ExecuteCode da classe CodeActivity que acabamos de incluir no workflow. Para isso dê um duplo clique para programar o evento. Veja figura abaixo:

Agora vamos adicionar algum código para ser executado ao ser disparado o workflow. Digite o seguinte código:

Qualquer Workflow só pode ser executado pelo runtime do Windows Workflow Foundation, e para isso ele precisa de um host. O Visual Studio automaticamente cria um host para fins de teste, veja o arquivo Module1.vb. Para que possamos testar, precisamos fazer uma pequena alteração no arquivo, inclua a linha: Console.ReadLine(), para que a execução pare e espere que o usuário tecle algo. Agora execute o projeto com F5 e veja o workflow em ação.

Conclusão: Embora essa matéria seja muito simples, espero ter atingido o objetivo, que é de despertar a curiosidade sobre o Windows Workflow Foundation. Espero que até a publicação da segunda parte dessa matéria muita gente já tenha feito testes e se preparado para um maior aprofundamento no assunto. Até a próxima.

Leonardo Bruno Bentes Lima

Leonardo Bruno Bentes Lima - Microsoft Most Valuable Professional, consultor em tecnologia .NET. Possui ampla experiência no desenvolvimento e analise de sistemas, dos quais 6 anos na plataforma .Net. Palestrante em diversos eventos sobre tecnologia .NET no Brasil e exterior. Atualmente trabalha Ivia informática (www.ivia.com.br).