Entenda e crie seu Workflow com WF do início ao fim

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (3)  (1)

Neste artigo irei expor algumas idéias sobre Windows Workflow Foundation, e como este notável recurso está mudando a maneira dos programadores.Net trabalharem, e como os arquitetos projetam as soluções. Farems também uma aplicação para utilizar o WF na prática.

Entendendo a utilização e funcionamento dos Workflows, criando um workflow simples porém completo, com “Bindable Attributes”, “Custom Activities”, “Rule Sets”, “Declarative Rule Condition” e passagem de valores de uma ponta a outra do Workflow.
 
 
                                                                                                                                                                     Fabio Fernandes
 
 
Introdução
 
Olá pessoal, neste artigo irei expor algumas idéias sobre Windows Workflow Foundation, e como este notável recurso está mudando pouco a pouco a maneira dos programadores.Net trabalharem.
 
No passado tínhamos ferramentas de processo, aonde mapeávamos atividades de maneira mais funcional e menos técnica. Já tínhamos também ferramentas de “Orchestration” como o BizTalk Server da Microsoft,aonde já era possível criar já em versões mais antigas, processos de negócio visando a interoperabilidade e troca de mensagens entre sistemas e aplicações, aonde de maneira dinâmica poderíamos conectar pontas de diferentes sistemas ou aplicações, facilitando assim a integração entre sistemas.
 
Bom, aonde entra o Workflow? Basicamente falando, desenhar um workflow no visual Studio é uma experiência pratica semelhante às estas ferramentas de BPEL, porém, com todo o poder, robustez e estabilidade do Visual Studio, aliado aos diversos recursos disponíveis na BCL do .Net Framework.
 
Iniciar o desenvolvimento de Workflows utilizando o Visual Studio já era possível com o Visual Studio 2005, com as extensões do WWF, inclusive a Microsoft disponibilizou suporte à BPEL com uma extensão BPEL para o Windows Workflow Foundation.
 
 
O que muda para nós programadores e arquitetos?
 
Em essência, para nós programadores que estamos habituados a canais, fluxos de programação, interoperabilidade, camada de apresentação, e todos estes paradigmas que utilizamos para representar parte do mundo real, em um mundo sistêmico orientado a objetos e eventos, logo quando o programador se deparar com um Workflow não está muito errado se pensar “ei, isto é semelhante à programação via código, não tenho muito porque me assustar quanto ao entendimento técnico”.
 
Hoje criamos bibliotecas de componentes, e isto não muda muito: Teremos bibliotecas de workflows. Dêem uma olhada no meu novo projeto no CodePlex: http://wdna.codeplex.com. Estou pregando o conceito de Workflow-DNA, aonde você tem todas as suas operações corporativas mapeadas em Workflows, criando o que eu chamo de a “identidade funcional” da empresa, aonde cada empresa é única em seus processos, como uma impressão digital.
 
O conceito de Workflows é bastante simples, é só se habituar a uma maneira de pensar, aonde você desenha processos e fluxos de trabalho e não sai mais codificando. Os workflows podem substituir quase,se não totalmente, toda a camada de regra de negócio, geralmente intitulada “Business Tier”, e ter importantes funções outras camadas também. Os recursos encontrados no WWF são ótimos a ponto de podermos definir completamente como as telas da camada de apresentação devem ser seqüenciadas: Sim, podemos colocar workflows em quase tudo.
 
Para exemplificar a utilização, vamos criar um workflow simples, mas completo, Visual Studio 2008, e que faça o seguinte:
 
1.       Solicita ao usuário para entrar com sua idade
2.       Processa a idade do usuário, decidindo a faixa etária
3.       Responde ao usuário, baseado na idade respondida, qual é a faixa etária
 
Para testar o projeto do artigo, será necessário o Visual Studio 2008. Se você não tem ainda o Visual Studio 2008, pode ser baixado uma versão "trial" neste link: http://msdn.microsoft.com/en-us/visualc/aa700831.aspx
 
 
Task sequence brainstorming:
 
1.       Criar um projeto de “Workflow Activity Library” chamado “Workflow.Library.Activities”
2.       Criar um projeto de “Sequential Workflow Console Application” chamado “Workflows.Host”
3.       No projeto “Workflow.Library.Activities” iremos criar três atividades customizadas:
a.      LerIdade
b.      ProcessarIdade
c.      EscreverResultado
4.       No projeto “Workflows.Host” iremos criar um workflow, e fazer com que as três atividades  descritas no item “3” de maneira seqüencial e totalmente integradas.
  
Iniciando a construção da aplicação:
 
1.       Criar um projeto de “Workflow Activity Library” chamado “Workflow.Library.Activities”
 
Inicie o Visual Studio 2008 e crie um novo projeto, do tipo “Workflow Activity Library”, como na imagem a seguir:
 
 
Nomeie este projeto como “Workflow.Library.Activities”. Este é o projeto aonde iremos criar dois workflows customizados .
 
2.       Criar um projeto de “Sequential Workflow Console Application” chamado “Workflows.Host”
 
Crie agora um projeto do tipo “Workflow Console Application”, e nomeie este projeto como “Workflows.Host”, como no exemplo a seguir:
 
 
O que teremos com a criação dos dois projetos deverá ser igual a imagem a seguir da solução criada, sem nenhuma customização ainda:
 
 
 
3.       Customizando o projeto “Workflow.Library.Activities”:
 
Iremos criar três atividades customizadas para nosso workflow:
 
 
Criando a “custom activity” LerIdade
 
Adicione um item do tipo “Activity”, e nomeie este item como “LerIdade”, conforme a figura a seguir:
 
 
Agora repita os passos para criar a atividade “Leridade” e crie as atividades “ProcessarIdade” e “EscreverResultado”.
 
Customizando a atividade “LerIdade”
 
Selecionando a atividade “LerIdade” , arraste da Toolbar o item “CodeActivity”, e nomeie esta atividade de código para “LerIdadeDoConsole”, semelhante à representação à seguir:
 
 
 
Dê um duplo-clique sobre o CodeActivity LerIdadeDoConsole e digite o código conforme a listagem à seguir:
 
 
Antes de compilar, será necessário criar um atributo chamado “Idade”, conforme a listagem à seguir:
     
 
Simples não? Já criamos nossa primeira atividade. Agora vamos para a segunda atividade.
 
 
 
Criando a atividade “Processa Idade”
 
O objetivo desta atividade é receber a idade digitada do console, e definir o valor de seu atributo “FaixaEtaria” com os textos “menor de idade”, “adulto”, “idoso”, tendo como base a idade digitada na primeira atividade.
 
Para isto, vamos começar escrevendo o atributo “Idade”. O atributo Idade terá suporte para “DataBinding” com expressões, configurado em tempo de design. Para isto vá para o código da atividade “ProcessaIdade”, criando sua Dependency Property e o atributo, digitando o seguinte código:
 
      
 
Como queremos que haja Binding e todas as facilidade de integração com outras atividades através de Binding Expressions, precisamos criar este código para que em tempo de design e execução o atributo seja acessado conforme precisamos. Iremos observar que quando criamos atributoscom a classe DependencyProperty da maneira como fizemos, este atributo pode ser configurado com os Assistentes do Visual Studio, então é possível a confguração do Binding graficamente.
 
No fluxo de trabalho para a Custom Activity de ProcessarIdade, precisamos fazer o seguinte:
  • Se Idade < 18, atribuir FaixaEtaria=”MenorDeIdade”
  • Senão Se Idade <59, atribuir FaixaEtaria=”Adulto”
  • Senão se idade >=60, atribuir FaixaEtaria=”Idoso”
 
O fluxo de trabalho visualmente terá a seguinte aparência:
 
 
O que configurar:
 
Todas as conditions utilizam “Declarative Rule Condition” para avaliar as expressões e “entender” o que fazer caso as condições sejam satisfeitas
 
As três “Conditions” serão configuradas da seguinte maneira:
 
SeMenorDe18:
- Declarative Rule Condition
- Expressão: System.Convert.ToInt32(this.Idade) < 18
SeAdulto:
- Declarative Rule Condition
- Expressão: System.Convert.ToInt32(this.Idade) <= 59
SeNaoSeIdoso:
- Declarative Rule Condition
- Expressão: System.Convert.ToInt32(this.Idade) >= 60
 
A Policy “AtribuiValorMenorDeIdade” deve ser configurada da seguinte maneira:
                - RuleSet name: AtribuiValorMenorDeidade
- Condition: True
- Then Actions: this.FaixaEtaria = “Menor de idade”
 
As duas atividades de “Code Activity”, “AtribuiValorAdulto” e “AtribuiValorIdoso” devem ter o seguinte código em seus eventos “ExecuteCodigo”:
 
       
 
 
Com isto terminamos a atividade customizada “ProcessaIdade”. Vamos criar agora ao nossa última Custom Activity.
 
Criando a última atividade deste projeto: Atividade “EscreverResultado”
 
Esta atividade é tão simples quando à primeira atividade, e também muito semelhante. Criaremos um atributo com recursos de “Binding” de expressões chamado “FaixaEtariaExibir”, e exibirá uma mensagem indicando qual a faixa etária.
 
Primeiro, vamos criar o atributo FaixaEtariaExibir. Para isto precisamos criar sua Dependency Property e também o atributo, com o seguinte código:
 
        
 
 
Depois, vamos inserir uma “code activity” com o nome “EscreverFaixaEtariaNoConsole”, que terá seu evento “ExecuteCode” com a seguinte aparência:
 
         
 
 
Assim terminamos nosso componente “Workflows.Library.Activities”. Compile-o para se certificar que não há erros de build.
  
 
4. Vamos agora configurar o projeto “Workflows.Host”
 
Primeiro renomeie o Workflow padrão de “Workflow1” para “ProcessaIdade.
 
Ao abrir o workflow no designer, adicione uma referencia para a biblioteca de atividades, a toolbar passa a apresentar as três novas atividades que criamos, conforme a imagem a seguir:
 
 
 
Dentro do seu workflow ProcessaIdade, coloque as três novas atividades na seguinte sequência:
 
1.       LerIdade
2.       ProcessarIdade
3.       ExcreverResultado
 
O workflow ficará com a aparência semelhante à esta:
 
 
Agora configure os atributos das atividades da seguinte maneira:
 
  • Atividade “processarIdadeActivity”:
  • Atributo Idade: ”Activity=lerIdadeActivity, Path=Idade”
  • Atividade “escreverResultadoActivity
    • Atributo FaixaEtariaExibir: “Activity=processarIdadeActivity, Path=FaixaEtaria”
 
 
Compile a solução utilizando CTRL + SHIFT + B, e execute a solução com F5.
 
Observe que o fluxo irá ser executado na sequência correta, e o fluxo de trabalho será totalmente processado. A idade passou da primeira atividade para a segunda, a segunda atividade processou a idade, definindo uma faixa etária, e então a terceira atividade recebeu a faixa etária da segunda atividade,  e então exibiu para o usuário o resultado.
 
Conclusão
 
Começar a criar Workflows é uma tarefa simples, embora tenhamos uma abordagem um pouco diferente da codificação tradicional, as vantagens em se utilizar workflows para construção de fluxos de trabalho é enorme. É possível extender bastante o sistema de workflows, criando novas atividades, regras, conectando workflows e fazendo com que os Worflows interajam com o mundo externo sem maiores dificuldades.
 
Os Workflows vieram para facilitar nossa vida. É muito mais fácil e inuitivo termos diversos Workflows interconectados ou oferecendo serviços específicos, do que termos código e mais código denso e por natureza menos legível se comparado à clareza por excelência dos Workflows. Particularmente, estou muito entusiasmado com o trabalho formidável e os avanços da Microsoft nesta área, e investindo pesadamente em Workflows, pois não tenho dúvida de que os Workflows vieram para ficar!
 
 
Fabio Fernandes é Bacharel em Ciências da Computação, profissional certificado Microsoft, aluno de pós-graduação em Gestão de Projetos de TI, e atua como Arquiteto e Coordenador de Projetos a vários anos.
E-mail para contato: fabio_sfernandes@hotmail.com
 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?