Windows WorkFlow Foundation

Conhecendo a Tecnologia de WorkFlow da Microsoft

Sempre que ouvimos falar de WorkFlow, pensamos naqueles complexos softwares que controlam o fluxo de documentos da empresa. Mas muitas vezes, mesmo sem saber, acabamos implementando uma rotina de WorkFlow em nossos sistemas. Quem nunca ouviu solicitações do tipo:

 

Quando o cliente fizer um pedido, enviá-lo para Análise de crédito. Se o cliente possuir crédito enviar pedido para Análise de disponibilidade de estoque. Se tiver crédito e estoque disponível, enviar para faturamento etc.“

 

Esses tipos de rotinas nada mais são do que WorkFlows, fluxos que definem o processo de negócio. A questão é que não utilizamos nenhum padrão para desenvolver essas rotinas, e sempre que o fluxo do processo muda, temos que recodificar as mesmas. Dessa forma, ambientes que têm uma forte dependência de rotinas de WorkFlow, acabam tendo uma enorme taxa de manutenção em seus sistemas. E em muitos casos, essas empresas optam por adquirir softwares específicos de WorkFlow.

 

Para trazer uma solução mais prática no desenvolvimento de rotinas de WorkFlow, a Microsoft está desenvolvendo uma nova tecnologia chamada Windows WorkFlow Foundation (WWF). É a iniciativa da Microsoft na redefinição do conceito de WorkFlow. Além de ser a tecnologia que servirá de base para os próprios produtos Microsoft com funcionalidades de WorkFlow (como SharePoint e BizTalk), o WWF é um WorkFlow Engine, um modelo de objetos e um conjunto de ferramentas totalmente voltadas para o desenvolvimento de WorkFlows. Isso torna o WWF uma API completa para que desenvolvedores possam integrar funcionalidades de WorkFlow em suas próprias soluções. Com isso a Microsoft redefine o conceito, desmistificando a idéia de que WorkFlow é um tipo de software.

 

O Windows WorkFlow Foundation é parte do WinFX, que é a plataforma que a Microsoft vem desenvolvendo para o Windows Vista. Além do WWF, o WinFX também é composto do Windows Presentation Foundation e do Windows Communication Foundation.

Tipos de WorkFlows

O WWF é compatível com o .NET Framework 2.0 e atualmente está na versão beta 2. Você pode encontrá-lo para download no site www.windowsWorkFlow.net. Quando instalado, o WWF é apresentado no Visual Studio 2005 como um novo tipo de projeto, e é disponibilizado em VB.NET e C#. Veja na Figura 1 os templates disponíveis para projetos de WorkFlow.

 

 

Figura 1. Templates de projeto de WorkFlow

No WWF, os WorkFlows são apresentados como classes. Temos duas classes de WorkFlow: o SequentialWorkFlow e StateMachineWorkFlow. Quando criamos um novo WorkFlow no projeto, estamos estendendo uma destas duas classes. Em ambos os casos, teremos uma interface gráfica para a modelagem do WorkFlow.

Um SequentialWorkFlow é voltado para o desenvolvimento de WorkFlows de sistemas. O WorkFlow de sistemas é chamado assim, pois o seu fluxo não depende diretamente de interferência humana. No WWF o SequentialWorkFlow é implementado na forma de fluxogramas. Já um StateMachineWorkFlow é o que chamamos de WorkFlow humano ou de pessoas. Este tipo de WorkFlow, como é evidente, tem pessoas como principais participantes. O WWF implementa o StateMachineWorkFlow com o uso de Diagramas de Estado.

Atividades

Vamos agora partir para um exemplo prático. Com o WWF devidamente instalado, crie no Visual Studio 2005 um novo projeto do Tipo Sequential WorkFlow Console Application. Um projeto de WorkFlow foi criado e você já tem um WorkFlow chamado WorkFlow.cs em seu projeto. Para entender facilmente a modelagem do WorkFlow basta fazer uma analogia com o desenvolvimento ASP.NET. A modelagem do WorkFlow é parecida com o desenho de uma página aspx. Da mesma forma que incluímos um controle em uma página ASP.NET, incluímos atividades em um WorkFlow. E as atividades, por sua vez, possuem propriedades e podem disparar eventos, assim como controles Web. Veja a Figura 2, observe que na ToolBox temos uma seção de WorkFlow, nela você encontrará diversos componentes. Estes componentes são as atividades que o WWF disponibiliza para criarmos nosso WorkFlow.

 

Dessa forma, podemos modelar o fluxo arrastando as atividades da ToolBox em nosso WorkFlow. Faça um teste e arraste algumas atividades no WorkFlow. Veja que existem lugares apropriados onde você pode soltar uma atividade, e que a cada atividade é um passo de um fluxo. Veja na Figura 3 um exemplo.

Assim como o WorkFlow, as atividades também são classes no WWF. O WWF disponibiliza um conjunto de atividades prontas que podemos utilizar em nossos WorkFlows, como exemplo podemos citar:

·         IfElse: Implementa uma estrutura de decisão. O fluxo é desviado dependendo se a condição é verdadeira ou falsa.

·         While: Podemos implementar uma estrutura de repetição utilizando esta atividade.

·         WebServiceReceive: Podemos consumir um WebService dentro de um WorkFlow utilizando essa atividade.

·         Delay: Podemos incluir esta atividade para que o WorkFlow aguarde o tempo configurado antes de prosseguir com o fluxo.

·         Code: Com essa atividade podemos incluir um código a ser executado em determinado ponto doWorkFlow.

 

 

Figura 2. Atividades Disponíveis para WorkFlow

 

 

Figura 3. Exemplo de um SequentialWorkFlow

Características de um objeto WorkFlow

Ao criarmos um WorkFlow em nosso projeto, são adicionados dois arquivos: WorkFlow1.cs onde o desenvolvedor pode incluir a sua própria lógica através de código, e o WorkFlow1.Designer.cs onde o VS2005 gera o código que descreve o mapa das atividades do WorkFlow. Na Listagem 1 temos um exemplo de uma classe que estende o SequentialWorkFlow.

 

Listagem 1. Classe Sequential WorkFlow

namespace WorkFlowConsoleApplication1

{

    public sealed partial class WorkFlow1: SequentialWorkFlow

    {

         ...

    }

}

 

Observe que o WorkFlow é implementado no VS2005 sob o conceito de partial class, que permite termos uma mesma classe dividida em dois arquivos. Isso facilita a separação do código gerado pelo VS2005 do código do desenvolvedor. Um WorkFlow também pode ser definido em XML markup. Ao criarmos um novo WorkFlow, seja ele Sequential ou StateMachine, temos a opção de criá-lo com separação do código (with code separation,). Esta opção cria um arquivo com a extensão xoml, onde é feita a definição do WorkFlow em XML.Veja a Figura 4.

 

 

Figura 4. Criando um novo WorkFlow

Projetos de WorkFlow, assim como outros projetos do Visual Studio, possuem recursos de depuração e auxilio para encontro de erros. Observe na Figura 2 que algumas atividades do WorkFlow estão marcadas com uma exclamação. Essa exclamação indica que algo está faltando nesta atividade para que ela possa ser executada corretamente.

Hello World!

Como não poderia ser diferente, o nosso primeiro WorkFlow será o famoso Hello World. Para isso no seu WorkFlow1.cs, exclua todas atividades que incluiu e insira apenas uma atividade Code logo abaixo da seta inicial do WorkFlow . Seu SequentialWorkFlow deve estar igual ao da Figura 5.

 

 

Figura 5. Hello World WorkFlow

Dê um duplo-clique na atividade code1. O VS2005 irá criar um EventHandler para a atividade e o evento correspondente no arquivo WorkFlow1.cs, onde poderemos incluir o nosso código. Seu código deve ficar como na Listagem 2.

 

Listagem 2. Hello World!

private void code1_ExecuteCode(object sender, EventArgs e)

{

   Code c = (Code)sender;

   Console.WriteLine(

       "Hello World! From '{0}.\nEu sou uma instância da classe {1}.",

       c.ID, c.ToString());

}

 

Ao criarmos o nosso Projeto escolhemos o template Sequential WorkFlow Console Application. Esse template, como o próprio nome sugere, implementa uma aplicação console que podemos utilizar para testar o WorkFlow. Em um ambiente mais realista onde, por exemplo, o WorkFlow é iniciado quando um pedido de venda é inserido no sistema, bastaria escolher o template Sequential WorkFlow Library. E em nosso sistema de vendas iríamos fazer a chamada à Library compilada.

Através da classe Program.cs poderemos testar o nosso WorkFlow na console. Veja o código do método Main na Listagem 3.

 

Listagem 3. Program.cs

static void Main(string[] args)

{

    WorkFlowRuntime WorkFlowRuntime = new WorkFlowRuntime();

    WorkFlowRuntime.StartRuntime();

 

    WorkFlowRuntime.WorkFlowCompleted += OnWorkFlowCompleted;

 

    Type type = typeof(WorkFlowConsoleApplication1.WorkFlow1);

    WorkFlowRuntime.StartWorkFlow(type);

 

    waitHandle.WaitOne();

 

    WorkFlowRuntime.StopRuntime();

 

    // Feedback para o usuário

    Console.WriteLine("");

    Console.WriteLine("");

    Console.WriteLine("==============================");

    Console.WriteLine("Pressione uma tecla para sair.");

    Console.WriteLine("==============================");

    Console.ReadLine();

}

 

Observe que as duas primeiras linhas do código criam e iniciam uma instância do WorkFlow Runtime. Nas linhas que seguem, o nosso WorkFlow.cs é submetido ao WorkFlow Runtime. Execute o projeto e veja o resultado na Console, representado aqui pela Figura 6.

 

 

Figura 6. Resultado do Primeiro WorkFlow

 Como podemos observar, este exemplo é bem simples e implementa apenas uma atividade. Mas com ele podemos ter uma idéia da dinâmica de um Sequential WorkFlow. Um ponto importante a salientar é que um WorkFlow pode receber parâmetros quando instanciado, e estes parâmetros irão ser processados pelas atividades do WorkFlow. Veremos isso num próximo artigo, com um exemplo que represente um caso mais realista.

State Machine WorkFlow

Um State Machine WorkFlow é bem diferente de um Sequential WorkFlow. Crie um novo WorkFlow do tipo State Machine no seu projeto. Veja que o conjunto de atividades disponíveis é diferente. Aqui você irá modelar um diagrama de estado e não um fluxo, como fizemos anteriormente. Imagine um processo de aprovação de Pedidos de Venda, que necessita da aprovação das pessoas envolvidas. Não há um fluxo definido, há apenas a interferência das pessoas envolvidas. Neste tipo de WorkFlow, as ações são disparadas quando o status do WorkFlow é modificado. Veja um exemplo na Figura 7.

 

 

Figura 7. Exemplo de State Machine WorkFlow

Neste exemplo temos um WorkFlow que representa as mudanças de estado dos Pedidos que são submetidos. Cada caixa que vemos neste WorkFlow representa uma modificação no estado do pedido. E para cada estado podemos implementar as atividades necessárias para a execução do processo, que deve ser realizado no momento em que o pedido passa para aquele estado. No exemplo acima, quando o estado do pedido é modificado, alguns eventos são disparados.

 

As mudanças de estado irão ocorrer através de ações humanas, por tanto é necessário uma interface de usuário onde as modificações do estado do pedido serão realizadas. Neste exemplo, a interface precisa permitir que o Usuário possa: Criar, Processar, Cancelar e Efetivar a venda do Pedido.

Na Figura 8 temos um exemplo simples de interface para que os usuários possam modificar os estados do pedido. Este é só um exemplo demonstrativo, onde foi utilizado um formulário simples do Windows. Como o nosso projeto de WorkFlow nada mais é do que um modelo de objetos, podemos implementar qualquer tipo de interface de usuário que possa acessar este modelo, como exemplo podemos citar:

·         Formulários Windows

·         Páginas Web (Projetos ASP.NET)

·         E-mails

·         Interfaces para aparelhos móveis (Projetos de Pocket PC, Smartphone, Windows CE ou WebMobile)

·         WebServices (para que aplicações de terceiros disponibilizem em sua própria interface a comunicação com o WorkFlow)

 

 

Figura 8. Interface para um State Machine WorkFlow

Juntamente com a implementação da interface mais adequada, também devemos modelar as políticas de segurança necessárias para que os usuários possam ser autenticados e autorizados à acessar as atividades do WorkFlow através da interface.

Conclusão

Vimos um pouco do que o Windows WorkFlow Foundation é capaz de fazer. Porém já podemos ter uma idéia da vasta aplicabilidade que essa tecnologia oferece. Por muito tempo estivemos acostumados a encontrar soluções de WorkFlow empacotadas em softwares específicos, mas que nunca foram flexíveis ou completos o suficiente. Com o Windows WorkFlow Foundation a solução que a Microsoft propõe é mais do que um simples produto, é a proposta de um novo conceito para soluções de WorkFlow. Um completo modelo de Objetos, um conjunto de ferramentas e um WorkFlow Engine, que juntos integram uma solução flexível para uma questão tão antiga.

Este é apenas o começo dessa tecnologia. Estamos nas versões Beta, e teremos muitas novidades sobre WWF pela frente. Há muito que ser dito ainda sobre WWF, temos muitas features sobre o desenvolvimento de Sequential WorkFlow, State Machine WorkFlow, Activities Libraries, integração com o Office 12 e a nova versão do Share Point, entre muitas outras funcionalidades. Fiquem atentos que em breve teremos mais novidades sobre o Windows WorkFlow Foundation.

 

Links

www.windowsWorkFlow.net

Site oficial do Windows WorkFlow Foundation

 

Rodrigo Sendin Silva (rodrigo.sendin@taunet.com.br) é tecnólogo formado pela FATEC-AM. Trabalha na TauNet Consulting como desenvolvedor C# em .NET, atuando em projetos de WorkFlow, SharePoint, ASP.NET, Business Inteligence, e Knowledge Management.