Artigo original publicado na quarta-feira, 5 de setembro de 2012

imagem

Olá a todos. Meu nome é HyongGuk Kim, gerente de programas sênior da equipe do SharePoint Designer.

Neste blog, falarei sobre como é possível criar facilmente um fluxo de trabalho do SharePoint 2013 que consome serviços Web HTTP (REST) públicos ou comerciais. Veremos também como executá-lo de modo simples como um serviço que envia emails diários por loop.

Como você poderá observar no vídeo a seguir, desenvolveremos o fluxo de trabalho de um site chamado "eBay Daily Deals", que lerá as informações diárias sobre ofertas do eBayTM , criará itens de ofertas em uma lista Links Promovidos do SharePoint e enviará emails para as pessoas que desejam receber informações sobre ofertas.

Trabalhando com um serviço Web usando a ação Chamar o Serviço Web HTTP

 

Como o fluxo de trabalho "eBay Daily Deals" é de um site, a primeira coisa a fazer é criar um novo fluxo de trabalho de site do SharePoint 2013. Após a criação desse fluxo de trabalho, basta adicionar três estágios, nomeá-los corretamente e vinculá-los usando ações Ir para.

 

 

Estágio 1

Dê o nome “Get eBay Daily Deals” ao estágio 1 e adicione quatro ações e um bloco de loop, conforme mostra a Figura 1.

clip_image002

Figura 1. Estágio 1 do fluxo de trabalho

 

A primeira ação adicionada é uma ação Chamar o Serviço Web HTTP. O URI HTTP é definido como http://www.firstamong.com/json/index.php?q=http://deals.ebay.com/feeds/xml e o método HTTP é definido como “GET”. Seria ótimo usar apenas um dos serviços Web REST do eBay que retorna JSON. Porém, em função de um cabeçalho irritante no resultado do serviço Web REST do eBay, tivemos que usar um serviço Web transformador extra (observe que há alguns serviços transformadores disponíveis. Em nosso, caso usamos um serviço de www.firstamong.com) que chama outro serviço Web REST do eBay responsável por retornar XML e objetos JSON limpos.

Na instrução da ação "Chamar o Serviço Web HTTP", nós não definimos o parâmetro RequestContent ou RequestHeaders porque não precisamos disso. Estamos interessados apenas na saída do serviço Web. Pela simples definição do parâmetro response como uma variável ResponseContent, a saída da chamada a esse serviço Web ficará armazenada na variável ResponseContent, que é uma variável do tipo dicionário.

 

A saída JSON do serviço Web transformador que chama o serviço Web XML do eBay é semelhante a esta:

 

{"EbayDailyDeals":

  {"Item":[

{"ItemId":"221065015062","EndTime":"1341845999000","PictureURL":"http:\/\/i.ebayimg.com\/00\/s\/NDI4WDUxMA==\/$(KGrHqJHJBwE8+9eOVMzBPZ1lhNt!g~~60_1.JPG","SmallPictureURL":"http:\/\/i.ebayimg.com\/00\/s\/NDI4WDUxMA==\/$(KGrHqJHJBwE8+9eOVMzBPZ1lhNt!g~~60_1.JPG","Picture175Url":"http:\/\/i.ebayimg.com\/00\/s\/NDI4WDUxMA==\/$(KGrHqJHJBwE8+9eOVMzBPZ1lhNt!g~~60_1.JPG","Title":"Acer ICONIA 7in Tablet 8GB WiFi","Description":"N\/A","DealURL":"http:\/\/deals.ebay.com\/5000101083_Acer_ICONIA_7in _Tablet_8GB_WiFi","ConvertedCurrentPrice":"139.99","PrimaryCategoryName":"Computers\/Tablets & Networking:iPads, Tablets & eBook Readers","PrimaryCategoryId":"171485","Location":"Miami, Florida","Quantity":"128","QuantitySold":"372","MSRP":"299.99","SavingsRate":"53%","AutoPay":"true","Hot":"false","Tier":"0","PriceDisplay":"MSRP"},

{"ItemId":"271012700385","EndTime":"1341845999000","PictureURL":"http:\/\/i.ebayimg.com\/00\/s\/MzYwWDM2MA==\/$(KGrHqR,!ioE-w!y!T--BPto5nEk0!~~60_1.JPG","SmallPictureURL":"http:\/\/i.ebayimg.com\/00\/s\/MzYwWDM2MA==\/$(KGrHqR,!ioE-w!y!T--BPto5nEk0!~~60_1.JPG","Picture175Url":"http:\/\/i.ebayimg.com\/00\/s\/MzYwWDM2MA==\/$(KGrHqR,!ioE-w!y!T--BPto5nEk0!~~60_1.JPG","Title":"Sylvania Wireless CE 7-Inch Smartbook - SYNET7WIC","Description":"N\/A","DealURL":"http:\/\/deals.ebay.com\/5000101099_Sylvania_Wireless_CE_7_Inch_Smartbook___SYNET7WIC","ConvertedCurrentPrice":"49.99","PrimaryCategoryName":"Computers\/Tablets & Networking:Laptops & Netbooks:PC Laptops & Netbooks","PrimaryCategoryId":"177","Location":"US","Quantity":"1307","QuantitySold":"693","MSRP":"199.99","SavingsRate":"75%","AutoPay":"true","Hot":"false","Tier":"0","PriceDisplay":"MSRP"},

{"ItemId":"160823596564","EndTime":"1341845999000","PictureURL":"http:\/\/i.ebayimg.com\/00\/s\/NjAwWDM1MQ==\/$(KGrHqFHJFQE+T-

...

"MoreDeals":

   {"MoreDealsSection":[

    {"SectionTitle":"Emergency Preparedness","Item":[

{"ItemId":"200687021159","EndTime":"1341845999000","PictureURL":"http:\/\/i.ebayimg.com\/00\/s\/NDI5WDUwMA==\/$(KGrHqV,!p0E-vF(Fmt0BP7iH6)M6g~~60_1.JPG","SmallPictureURL":"http:\/\/thumbs4.ebaystatic.com\/pict\/200687021159_1.jpg","Picture175Url":"http:\/\/thumbs4.ebaystatic.com\/pict\/200687021159_1.jpg","Title":"DuroMax 1500 Watt Portable Pull Start Gas Power Job Site Electric Generator","Description":"NA","DealURL":"http:\/\/deals.ebay.com\/5000099668_DuroMax_1500_Watt_Portable_Pull_Start_Gas_Power_Job_Site_Electric_Generator","ConvertedCurrentPrice":"179.99","PrimaryCategoryName":"Home & Garden:Tools:Generators: Home-Use","PrimaryCategoryId":"46412","Location":"La Verne","Quantity":"302","QuantitySold":"228","MSRP":"299.99","SavingsRate":"40%","AutoPay":"true","Hot":"false","Tier":"0","PriceDisplay":"MSRP"},

{"ItemId":"370622857968","EndTime":"1341845999000","PictureURL":"http:\/\/i.ebayimg.com\/00\/s\/MTAwMFgxMDAw\/$T2eC16h,!)0E9s37IeSMBP7IWFtFqw~~60_12.JPG","SmallPictureURL":"http:\/\/thumbs1.ebaystatic.com\/pict\/370622857968_1.jpg","Picture175Url":"http:\/\/thumbs1.ebaystatic.com\/pict\/370622857968_1.jpg","Title":"Dorcy High Beam LED Aluminum Flashlight 100 Lumens Water Resistant 41-4287","Description":"NA","DealURL":"http:\/\/deals.ebay.com\/5000099680_Dorcy_High_Beam_LED_Aluminum_Flashlight_100_Lumens_Water_Resistant_41_4287","ConvertedCurrentPrice":"11.99","PrimaryCategoryName":"Sporting Goods:Outdoor Sports:Camping & Hiking:Flashlights, Lanterns & Lights:Flashlights","PrimaryCategoryId":"16037","Location":"Altatac USA","Quantity":"1899","QuantitySold":"1113","MSRP":"49.99","SavingsRate":"76%","AutoPay":"false","Hot":"false","Tier":"0","PriceDisplay":"MSRP"},

{"ItemId":"300725740900","EndTime":"1341845999000","PictureURL":"http:\/\/i.ebayimg.com\/00\/s\/NTAwWDUwMA==\/

...

A propósito, para manipular cada item interno, também poderíamos ter usado uma variável DealItems para definir a instrução de ação como “Get ([%Variable: Index%])/Title from Variable: DealItems” a fim de obter a propriedade Title do item. Entretanto, para facilitar as coisas e mostrar uma estrutura clara dos itens de ofertas dentro da saída do serviço Web, inseri o caminho completo para acessar as propriedades do item. Por isso, uma instrução como “Get EbayDailyDeals/Item([%Variable: Index%])/Title from Variable: ResponseContent“ (não Variable: DealItems) recuperará a propriedade Title de um item. Para obter mais informações sobre o uso do tipo dicionário, consulte os links fornecidos na parte inferior deste blog.

 

A Figura 2 mostra como recuperar todas as diferentes propriedades de cada item interno.

clip_image003

Figura 2. Recuperando propriedades de itens de ofertas e criando itens de link de promoção

 

Com a ação Obter item do Dicionário, armazenamos todas as propriedades de cada item de oferta em uma variável de fluxo de trabalho e as usamos no momento da criação de um item de lista na parte mais à frente do bloco de loop. A maioria dos tipos de variável que usamos nesse processo de "recuperação" são do tipo cadeia de caracteres, mas você poderá notar que também usamos outros tipos.

Para obter mais informações sobre o uso do tipo dicionário, consulte os links fornecidos no final deste blog.

clip_image004

Figura 3. Variáveis locais

 

Também usamos a ação Substituir Cadeia de caracteres para contornar uma limitação do SharePoint que o impede de usar os caracteres ',' ou '!' em dados do tipo URL.

 

No fim do bloco de loop há dois blocos de etapa onde criamos o conteúdo de email e aumentamos a variável de índice em um ponto. Os dois cenários principais deste fluxo de trabalho são criar itens de lista usando o resultado do serviço Web do eBay e enviar emails às pessoas que desejam receber informações de "eBay Daily Deals". Desse modo, estamos desenvolvendo um fragmento HTML dentro do bloco de loop, conforme mostra a Figura 4.

clip_image005

Figura 4. Duas etapas no bloco de loop

 

Observe que todas as variáveis do fluxo de trabalho usadas para criar os itens de lista estão sendo reutilizadas no desenvolvimento do fragmento HTML, conforme mostra a Figura 5.

clip_image006

Figura 5. Desenvolvendo o fragmento HTML para o corpo do email

 

 

Estágio 2

A lógica de fluxo de trabalho no estágio 2 é exatamente a mesma do estágio 1, exceto por uma instrução que chama o serviço Web no estágio 1 (veja a instrução circulada na Figura 6). Desse modo, você pode criar o estágio 2 facilmente simplesmente copiando e colando o conteúdo do estágio 1 no estágio 2.

O estágio 2 lerá uma seção adicional na saída do serviço Web Daily Deals do eBay. Portanto, podemos usar a mesma lógica, mas com um caminho diferente ao tentarmos recuperar a matriz Item da grande saída JSON anterior.

clip_image007

Figura 6. Estágio 2 do fluxo de trabalho

 

Isso significa que precisamos usar um caminho diferente para acessar itens em “MoreDealsSection”, conforme mostra a Figura 7.

clip_image008

Figura 7. Obtendo mais itens de ofertas em MoreDealsSection

 

Todo o resto é exatamente igual.

 

 

Estágio 3

Nos estágios 1 e 2, criamos itens de lista e desenvolvemos os fragmentos HTML que serão usados posteriormente no envio de emails. É no estágio 3 que enviaremos emails e, por isso, ele tem apenas uma ação, Enviar Email, conforme mostra a Figura 8. “Assinantes” é o grupo do SharePoint onde todos os membros do site que desejam receber o email Daily Deals são adicionados como membros.

clip_image009

Figura 8. Estágio 3 do fluxo de trabalho

 

Você pode compor um corpo completo para o email em HTML na caixa de diálogo da grade de propriedades da ação Enviar Email, conforme mostrado a seguir. Como já temos um fragmento de código de tabela HTML na variável EmailContent, só precisamos colocar algumas tags wrapper ao redor da pesquisa dessa variável, conforme mostra a Figura 9.

clip_image010

Figura 9. Desenvolvendo um corpo de email completo

 

Agora, sim! Você está totalmente preparado para publicar e iniciar este fluxo de trabalho.

Apenas certifique-se de ter uma lista "eBay Daily Deals" em seu site; ela deve ser do tipo "Links Promovidos", um tipo novo e interessante do SharePoint 2013. Você pode encontrar esse aplicativo de lista facilmente ao clicar em Adicionar um aplicativo no link Configurações, no canto superior direito da página raiz do site.

clip_image011

 

 

Iniciar o fluxo de trabalho

Quando você iniciar este fluxo de trabalho, verá que ele cria itens eBay Daily Deal na lista "eBay Daily Deals". Você também notará que há emails sendo enviados a partir desse fluxo de trabalho.

clip_image012

Figura 10. Lista de links promovidos eBay Daily Deals

 

clip_image013

Figura 11. Email enviado do fluxo de trabalho

 

 

Loopback?

Vimos como criar um bom fluxo de trabalho de site que envia emails com informações de eBay Daily Deals nele. Mas e se quisermos receber esses emails "todos os dias"? Seria possível executar esse fluxo de trabalho repetidamente a cada 24 horas?

Sim! Conforme ilustrado a seguir, adicionando uma ação Pausar Durante e alterando o destino da instrução Go To no estágio 3 para voltar ao estágio 1, o fluxo de trabalho funcionará como um serviço que recupera os itens de Daily Deals do eBay e envia as ofertas por email todos os dias.

Divertido, não é?

clip_image014

Figura 12. Realizando loopback para o início

 

 

Referências

Nestas referências, você poderá encontrar mais informações sobre o tipo dicionário e sobre ações do fluxo de trabalho que manipulam variáveis de dicionário e serviços Web HTTP.

 

Conteúdo de ajuda do SharePoint Designer 2013

Este é um post localizado. O artigo original está em How to work with web service using “Call HTTP Web Service” action