Arquivo

Archive for the ‘Workflow Foundation’ Category

Workflow Foundation – Sequence

Seguindo uma série de artigos sobre WF4, nesse artigo pretendo abordar sobre o WF Sequence.

Caso você deseje ver os artigos anteriores, segue os links:

O WF Sequence já existia no .NET 3.5. Esse WF executa um conjunto de ações em uma determinada ordem informada e sem a possibilidade de retornar a um passo anterior. Nesse tipo de WF podemos utilizar qualquer atividade de decisão (ForEach, If, Switch, While, etc), atividades de construção (Parallel por exemplo) ou até atividade customizadas.

Esse WF é recomendado para resolução de processos com complexidade moderada ou processos sem intervenção humana (diferente do Flowchart).

Vamos fazer um exemplo de WF Sequence, no qual vamos informar um código de produto e seremos informado se o mesmo existe disponível no estoque.

Abra o Visual Studio e crie um projeto do tipo WorkFlow Console Application com o nome wfVerificarEstoque. Após o projeto criado veja que um arquivo chamado Workflow1.xaml foi criado, exclua esse arquivo. Clique no projeto e em add new item. Adicione um item do tipo Activity com o nome wfVerificarEstoque.xaml. Abra esse arquivo e na ToolBox arraste para onde está escrito “Drop activity here” um componente Sequence que se encontra na toolbox na guia Control Flow.

Selecione o componente Sequence e crie uma variável com o nome QuantidadeEstoque do tipo Int32 e em seguida selecione a opção arguments e crie um argumento chamado codigoProduto do tipo Int32 com o direction In.

Arraste para dentro do Sequence um componente Switch. No componente Switch em Expression escreva  codigoProduto. Logo abaixo em Case value, adicione valor 1 e em seguida valor 2. Estamos criando um Switch (case) com se estive criando em C# ou VB.Net.

Com o case criado, arraste para dentro de cada case um componente Assign que se encontra na ToolBox na guia Primitives. No Case 1 no Assign escreva em To QuantidadeEstoque e na expressão VB coloque o valor 0. Faça o mesmo para o segundo case mudando o valor para 2. Nosso case deve ficar como da imagem abaixo:

Abaixo do Switch e dentro do Sequence arraste um componente If. Em Condition coloque QuantidadeEstoque > 0. Arraste um componente WriteLine para dentro do If na opção Then e outro WriteLine para dentro do If na opção Else. No WriteLine dentro do Then escreva  em Text: “Produto em Estoque” e no WriteLine dentro do Else escreva “Produto em falta no estoque”.

Nosso WF deve ficar igual da imagem abaixo:

Agora precisamos configurar a chamada ao nosso WF. Como criamos um arguments chamado codigoProduto e  será necessário passar um valor para esse argumento em nosso WF. Para isso utilizamos a class Dictionary que faz parte do namespace “System.Collections.Generic”.

Abra o arquivo Program.cs. e em using adicione a namespace citada acima e em seguida escreva o código abaixo:

        static void Main(string[] args)
        {
            int intCodigoProduto = 2;

            Dictionary<string, object> dtc = new Dictionary<string, object>();

            dtc.Add("codigoProduto", intCodigoProduto);

            WorkflowInvoker.Invoke(new wfVerificarEstoque(), dtc);

            Console.ReadLine();
        }

Veja que criamos um Dictionary, com uma string e um objeto. No campo string escrevemos o mesmo nome de nosso arguments criado no WF e o objetc será o valor que passaremos para o WF. Observe que o dictionary recebe o mesmo nome e o mesmo tipo de nosso arguments, caso isso não aconteça, um erro irá acontecer.

Compile seu projeto e o console exibirá a seguinte frase: “Produto em Estoque”. Caso altere o valor de intCodigoProduto para 1 a frase será “Produto em falta no Estoque”.

Download disponível aqui.

Bem pessoal espero que tenham gostado. Até a próxima.

Anúncios

Workflow Foundation – Flowchart

outubro 25, 2010 1 comentário

Conforme prometido no artigo anterior, vamos demonstrar um WF Flowchart.

Flowchart é um novo tipo de workflow disponibilizado no .Net 4.0.  Esse workflow é recomendado para cenários onde exista a necessidade de interação humana.

Vamos a um exemplo prático.

Abra o Visual Studio e crie um projeto do tipo WorkFlow Console Application, veja a imagem abaixo:

Criamos um projeto com o nome wfValidarUsuario. Um arquivo Workflow1.xmal foi criado. Apague esse arquivo e adicione um novo arquivo do tipo Activity com o nome wfValidarUsuario.xmal. Será nesse arquivo que vamos criar nosso WF.

Abra esse arquivo e na ToolBox arraste para onde está escrito “Drop activity here” o componente Flowchart. Você verá uma área com uma bola verde e um escrito Start. Dentro dessa área coloque os seguintes componentes:

  • 3 WriteLine;
  • 1 Assign;
  • 1 FlowDecision;

Com esses componentes vamos criar nosso primeiro workflow.

Primeiramente vamos ligar nosso worklow, ligue um componente WriteLine com a opção “Start”, para isso basta clicar o componente, veja que será exibido 4 opção em sua volta, clique em uma delas e arraste para um WriteLine. Em seguida ligamos esse WriteLine com o componente Assign. Esse componente irá setar um valor em uma variável, mas sobre isso falamos depois.

Agora vamos ligar o Assign ao FlowDecision. Veja que esse componente exibe a opção True e False, vamos ligar a opção true a um WriteLine e a opção false ao outro WriteLine e por fim ligamos o WriteLine que foi ligado ao FlowDecision da opção False com o nosso primeiro WriteLine.

Veja na imagem abaixo como deve ficar nosso workflow.

Veja que um sinal de alerta vermelho aparece em Assign, isso porque não configuramos esse componente, vamos a ele então. Se você o artigo anterior vai se recordar que comentamos sobre variáveis, vem vamos utilizar uma aqui.

Veja que na parte inferior da tela as opções variables, Arguments e Imports. Selecione o componente FlowChart e clique em variables. Crie uma variavel chamada senha do tipo string. Lembre-se podemos criar as variareis por nível, nesse caso criamos uma que todos os componentes dentro do FlowChart consegue visualiza-la.

Agora clique em Assign no campo To coloque nossa variável Senha e no campo “Enter a VB expression” coloque Console.ReadLine(). Como expliquei no artigo anterior, mesmo que nosso workflow seja em C# devemos escrever as expressões em VB.Net.

Faltam dois passos para finalizar nosso workflow, o primeiro é configurar o Decision, clique nele com o botão direito do mouse em propriedades, clique na propriedade Condition e coloque o seguinte código Senha = “123” (lembrando, tem que ser VB.Net).

E para finalizar, precisamos chamar nosso workflow e para isso vamos usar a classe Program.cs. Coloque o seguinte código:

class Program
{
    static void Main(string[] args)
    {
        WorkflowInvoker.Invoke(new wfValidarUsuario());
        Console.ReadLine();
    }
}

Nosso código apenas Invoka o workflow e depois pede para o console aguardar para que possamos visualizar o resultado.

Veja abaixo uma imagem de como ficou nosso workflow finalizado:

Agora podemos executar nosso workflow. Esse workflow terá a interação com o usuário. Enquanto não digitamos a senha 123 ele irá retornar para um passo anterior (no nosso caso pedir a senha novamente), veja um exemplo do console em execução:

O código fonte está disponível para download aqui.

Obrigado e até a próxima.

Workflow Foundation 4.0 – Introdução

outubro 17, 2010 2 comentários

Windows Workflow Foundation (WF) foi disponibilizado pela Microsoft no .Net Framework 3.0, atualizado no 3.5 e inovado no 4.0. Com o WF conseguimos desenvolver em fluxos e de forma visual, ou seja, visualizando o fluxo de um processo e os caminhos que ele poderá percorrer conforme as “condições” que o fluxo for encontrado.

Vamos começar vendo alguns conceitos do WF.

Existem dois tipo de workflow no .Net 4.0.

Sequence:

Existente nas versões anteriores, executa um conjunto de ações em seqüência sem retornar ao passo anterior.

Flowchart

Lançado no .Net 4.0: Permite retornar fluxos a passos anteriores.

Nota: Os componentes do WF4 estão na namespace System.Activities enquanto que do WF3.x em System.workflow. Isso permite que os WF3 rodem no .Net 4.0.

Nota 2: O tipo StateMachine, tipo existente no .Net 3.0, não está mais disponível no .Net 4.0., pelo que tenho conhecimento para migrar os tipos StateMachine para o .Net 4.0 devemos utilizar o tipo Flowchart, e para migrar é necessário reescrever cada workflow (isso vale para qualquer migração de WF3 para WF4). Esse artigo do Waldemir Cambiucci pode ajudar.

Cada passo de um workflow é chamado de atividade. As atividades podem ser ForEach, If, While, DoWhile, etc. Para aprender sobre as atividades, recomendo ler esse artigo da Microsoft (em inglês) que explicar a funcionalidade de algumas atividades que estão disponíveis na toolbox do Visual Studio 2010.

Dentro de um WF também temos:

Variáveis

Utilizadas para armazenar informações, assim como em programação possui um nome e um tipo (string, boolean, int, etc).

Argumentos

Igual a parâmetro de métodos,  levam informações de dentro para fora e de fora para dentro de um workflow. Podem ser do tipo In, Out ou In/Out.

Expressões

Utilizadas para manipular dados. Por exemplo, concatenar duas strings. Importante: Devem ser definidas em Visual Basic, mesmo para projetos em C#.

Bem pessoal essa é uma pequena introdução ao WF4. No próximo artigo vou mostrar um WF do tipo Flowchart.

Obrigado e até a próxima.