Chamando Serviços e Trabalhando com Workflows de Site no SharePoint Designer 2013

Neste post vou dar continuidade as novidades do SharePoint 2013 relacionadas a workflows. Já falei sobre loop e stages (estados) e agora vou falar sobre um outro recurso novo que é a possibilidade de chamar serviços HTTP a partir de um workflow no SharePoint Designer 2013.

Além disso vou falar de um assunto que não é novo, mas é muito pertinente para implementação de alguns tipos de lógica de negócio: workflows de site.

As informações contidas neste post são da versão Preview do SharePoint 2013, elas podem sofrer alterações até o lançamento do produto.

Para a construção deste post utilizei o artigo How to work with web service using “Call HTTP Web Service” action in SharePoint Designer 2013, que além de ser um belo exemplo de utilização de chamadas a serviços HTTP no SharePoint Designer, trouxe a sugestão de como utilizar um workflow de site. O exemplo que vou utilizar é o mesmo do artigo, só que apenas um pedaço, o necessário para mostrar o que pretendo mostrar.

O que vamos fazer neste post é um workflow que todo dia envia um e-mail com as ofertas do eBay, para isso será necessário acessar o serviço do eBay, processar a informação, envia-lá por e-mail e fazer com que seja executado diariamente. Qualquer outro serviço poderia ser utilizado, como um serviço corporativo ou de algum outro site – desde que seja compatível.

O serviço que vamos utilizar para teste apenas retorna dados, mas poderia ser um serviço que fizesse processamento de dados do SharePoint utilizando alguma API para conexão remota, dessa forma fazer workflows no SharePoint Designer que trabalhem de forma avançada com os itens do SharePoint é possível.

A primeira ponto a ser explicado é a utilização de workflows de site. Eles diferem dos workflows de lista e também de workflows reutilizáveis porque não precisa de um item ou documento para serem executados, porque são executados a nível de site. Com isso, podemos ter independência para executar outros processos de negócio que com os outros dois tipos não são possíveis. Os workflows de site são iniciados manualmente, através de outro workflow ou programaticamente, como eles podem conter atividades para serem recursivos, podemos iniciar o fluxo manualmente uma vez e deixa ele sendo executado por muito tempo.

A primeira etapa é criar abrir o SharePoint Designer 2013 e conectar no site. Crie um workflow de site, conforme a imagem 01.

WFSite-Servico01

Imagem 01: Criação do workflow de site

 

O próximo passo é verificar o serviço que vamos utilizar para obter os dados. Neste caso vamos acessar o endereço http://www.firstamong.com/json/index.php?q=http://deals.ebay.com/feeds/xml, que é um site que transforma o conteúdo do site do eBay de XML para JSON. Veja que o site que retorna o conteúdo é o http://deals.ebay.com/feeds/xml. Se acessarem os endereços pelo navegador vão ver as ofertas.

Um trecho do retorno do serviço em JSON está na listagem 01, ela será de fundamental importância para obtermos as informações do serviço. Devemos conhecer a estrutura correta para extrair as informações.

{“EbayDailyDeals”:{
   “Item”:[{
      “ItemId”:”360488869545″,
      “EndTime”:”1349017199000″,
      “PictureURL”:”http:\/\/i.ebayimg.com\/00\/s\/MzAwWDMwMA==\/$(KGrHqF,!jEF!e3QbKkNBQZJ5h8cFg~~60_1.JPG”,
      “SmallPictureURL”:”http:\/\/i.ebayimg.com\/00\/s\/MzAwWDMwMA==\/$(KGrHqF,!jEF!e3QbKkNBQZJ5h8cFg~~60_1.JPG”,
      “Picture175Url”:”http:\/\/i.ebayimg.com\/00\/s\/MzAwWDMwMA==\/$(KGrHqF,!jEF!e3QbKkNBQZJ5h8cFg~~60_1.JPG”,
      “Title”:”LG Blu-ray Disc Player – BD610″,
      “Description”:”N\/A”,
      “DealURL”:”http:\/\/deals.ebay.com\/5000123547_LG_Blu_ray_Disc_Player___BD610″,
      “ConvertedCurrentPrice”:”24.99″,
      “PrimaryCategoryName”:”Consumer Electronics:TV, Video & Home Audio:DVD & Blu-ray Players”,
      “PrimaryCategoryId”:”175711″,
      “Location”:”MINNESOTA”,
      “Quantity”:”342″,
      “QuantitySold”:”715″,”MSRP”:”129.99″,
      “SavingsRate”:”81%”,
      “AutoPay”:”true”,
      “Hot”:”false”,
      “Tier”:”0″,
      “PriceDisplay”:”MSRP”,
      “ItemSummary”:”LG BD610 Blu-Ray Player – Refurb”
}]}}

Listagem 01: Trecho do JSON retornado pelo serviço

 

A primeira atividade que o workflow executará será a consulta ao serviço do eBay, para isso adicione a atividade Call HTTP Web Service. Configure o serviço conforme a imagem 02, onde o endereço do serviço (endereço informando anteriormente) e o método de acesso serão informado – HTTP GET.

WFSite-Servico08

Imagem 02: Configurando a conexão ao serviço

Terminando a configuração da atividade de chamada ao serviço, deixe os parâmetros request e responseHeaders em branco e crie as variáveis ResponseContent e responseCode como dicionários e coloque nos respectivos parâmetros. São elas que irão retornar as informações do serviço. A imagem 03 mostra a chamada ao serviço configurada.

Agora que a chamada ao serviço foi feita, vamos contar os itens para fazer um loop em seguida. Para isso adicione uma atividade Get an Item from a Dictionary e coloque para ler o item EbayDailyDeals/Item (veja na listagem 01 esta estrutura), que irá retornar os itens retornados e gravados em um dicionário, que será a variável DealItems. Estes dados serão extraídos da variável ResponseContent. A imagem 03 mostra o resultado final desta linha.

Para contar os itens, utilize a atividade Count Items in a Dictionary informando a variável DealItems e como output a variável ItemCount (número). Veja na imagem 03 o resultado final.

WFSite-Servico03

Imagem 03: Acessando o serviço e contando os itens retornados

 

Agora vamos ler item por item, para isso adicione um loop do tipo Loop n Times, onde o número de vezees será a variável ItemCount.

A partir de agora vamos ler as propriedades dos itens e armazena-lás em suas respectivas variáveis. Vou mostrar como fazer a propriedade título, as demais vão seguir o mesmo padrão, lembrando que a estrutura do JSON, a qual estamos buscando, se encontra na listagem 01.

Adicione outra atividade do tipo Get an Item from a Dictionary, onde no item será informado a string EbayDailyDeals/Item([%Variable:Index%])/Title, que é a propriedade título do item. A variável utilizada é a que será incrementada no loop logo mais. Veja a imagem 04, ela mostra como é feita esta configuração. É muito importante que a variável Index esteja da mesma forma que aparece na imagem: sublinhada. Isso significa que está pegando a variável do workflow e não apenas um texto. Para fazer isso utilize o botão Add or Change Lookup e adicione a variável do workflow.

WFSite-Servico09

Imagem 04: Lendo a propriedade título do item

 

Depois de configurado o item que será ligado, configure o local de onde será lido que é a variável ResponseContent e o valor será armazenado na variável Title, que é do tipo texto.

Configure os demais campos conforme a imagem 05. Repare na imagem que existem dois tratamentos para a url da figura que vem pelo serviço, um tratamento que irá trocar o “,” por %2C e o segundo que irá trocar “!” por “%21”, isso por causa da decodificação de URLs, sem isso não irá funcionar o link que vamos montar.

No final do trecho existe a atividade Create List Item, que irá criar um item na lista definida. No exemplo usei a lista Livros, mas deveria ser uma lista que armazenaria as ofertas lidas do serviço. Deixaremos assim, simples, por não ser o foco do artigo e sim apenas uma amostra que dá para gravar em uma lista.

A imagem 05 mostra as atividades configuradas.

WFSite-Servico04

Imagem 05: Leitura das propriedades do item e criação dos itens em uma lista do SharePoint

 

Dentro do loop adicione um step para a montagem da mensagem de e-mail, que terá todas as ofertas do dia com informações do item. Crie uma variável do tipo string chamada EmailContent e armazene o conteúdo conforme imagem 06, lembrando que tudo que estiver sublinhado são variáveis e não apenas texto.

WFSite-Servico10

Imagem 06: Configurando o corpo do e-mail

Após isso adicione outro step para incrementar a variável de controle de leitura dos itens. Adicione a atividade Do Calculation e some 1 à variável Index, então armazene o valor na variável calc. Depois adicione uma atividade Set Workflow Variable para atribuir o valor de calc para Index.

A imagem 07 mostra os dois steps prontos.

WFSite-Servico05

Imagem 07: Configurando o corpo do e-mail e incrementando a variável de controle de itens

 

No final do stage temos o passo de transição, que deverá conter a atividade Go to a stage e o próximo stage que será executado. Crie o stage e depois defina que o novo stage será o destino final deste stage, conforme a imagem 08.

Estávamos no stage 01, agora estamos indo para o 03, isso porque o exemplo fornecido no link base para esta post não foi implementado completamente e achei melhor manter a mesma nomenclatura para evitar confusão.

WFSite-Servico06

Imagem 08: Indicando o fluxo de execução do stage 1 para o stage 3.

 

Dentro do stage 3 adicione a atividade Send an Email e configure o HTML conforme a imagem 09. Selecione um usuário ou grupo de usuários, no caso utilizei o meu usuário para receber o email e depois, o mais importante, a configuração do corpo do email. Para isso clique com o botão direito do mouse em propriedades da atividade de envio de email e então em Body para configurar o HTML. Se jogar o HTML de outra forma ele será enviado como texto simples e o HTML estará sendo exibido ao invés de sendo aplicado. Neste momento o e-mail será enviado para o usuário com todas as ofertas do dia.

WFSite-Servico11

Imagem 09: Configurando a mensagem com as ofertas para os usuários

 

A fase final do nosso workflow é fazer com que seja executado todos os dias, para isso adicione a atividade Pause for duration e configure para ficar pausado por 1 dia. Na etapa de transição, configure o workflow para voltar para o primeiro stage. Dessa forma o workflow ficará em um loop infinito consultando e avisando os usuários todos os dias das ofertas do eBay.

WFSite-Servico07

Imagem 10: Enviando e-mail e configurando a execução contínua do workflow

 

A imagem 11 mostra todo o workflow que foi criado e que serve para dar uma visão geral do processo.

WFSite-Servico02

Imagem 11: Visão geral do workflow

 

Para publicar o workflow clique em Publish e aguarde a publicação.

 

Testando o Workflow

Agora vamos testar o workflow, abra o site em que o workflow foi feito, depois acesse a opção View Site Contents, que irá exibir todo o conteúdo do site, conforme a imagem 12.

WFSite-Servico12

Imagem 12: Acessando o conteúdo do site

 

Agora acesse a opção Site Workflows par visualizar todos os workflows de site, conforme imagem 13.

WFSite-Servico13

Imagem 13: Acessando os workflows de site

 

A página com os workflows disponíveis para execução, workflows em execução e completos será exibida. Agora basta clicar no workflow Ebay Daily Deals para executa-lo, conforme imagem 14.

WFSite-Servico14

Imagem 14: Iniciando o workflow de site

 

Aguarde um momento e atualize a página, então verifique, como na imagem 15, que o fluxo está em execução. O campo User Status mostra em qual stage o fluxo está. Se você esperar um pouco e atualizar a página novamente, o fluxo estará no stage 3.

WFSite-Servico15

Imagem 15: Verificando o fluxo em execução

 

Ao acessar a lista Livros, a qual estamos gravando as ofertas, vamos ver algo parecido com a imagem 16.

WFSite-Servico16

Imagem 16: Vendo as ofertas gravadas na lista do SharePoint

 

Outro passo do fluxo era enviar as promoções por email, por isso acesse o seu email e verifique a mensagem que chegou do workflow, ela será igual à imagem 17.

WFSite-Servico17

Imagem 17: Conferindo o email recebido do workflow

 

Ao clicar na imagem do e-mail, o usuário será endereçado ao site do produto, conforme imagem 18.

WFSite-Servico18

Imagem 18: Site do produto em oferta

 

A possibilidade de chamar serviços em workflows do SharePoint Designer 2013 é algo realmente muito útil e que dá muito poder aos workflows. Pensar que praticamente todos os tipos de workflow agora podem ser feitos no SharePoint Designer 2013 é muito animador, e além de fazer, podemos fazer de uma forma muito interessante.

Este foi um dos posts mais interessantes que eu já fiz, fazer esse workflow de site chamando serviços e enviando um email assim bacana foi muito interessante.

Com isso fecho a série com as três grandes novidades dos workflows do SharePoint Designer 2013, conforme o post Workflows no SharePoint Designer 2013:

2 Respostas to “Chamando Serviços e Trabalhando com Workflows de Site no SharePoint Designer 2013”

  1. Workflows no SharePoint Designer 2013 « Fabian André Gehrke Says:

    […] Chamada a serviços: agora os workflows podem acessar serviços REST/SOAP, com isso podem chamar regras de negócio – ou outras coisas que estejam publicadas no serviço como simplesmente dados – e interagir com a instância do workflow. Dessa forma podemos ter regras de negócio complexas utilizando os workflows no SharePoint 2013. Mas e se o workflow estiver executando um documento e a regra de negócio precisa assessar os dados do documento ou outro conteúdo dentro do SharePoint? Para isso o serviço deve utilizar o Client Object Model para acessar os dados remotamente. […]


Deixe um comentário