Article d’origine publié le mercredi 5 septembre 2012

image

Bonjour, je m’appelle HyongGuk Kim et je suis responsable de programme senior dans l’équipe de SharePoint Designer.

Dans ce blog, je vais expliquer comment écrire facilement un flux de travail SharePoint 2013 utilisant un service web HTTP (REST) public ou commercial et comment l’exécuter en toute simplicité en tant que service envoyant quotidiennement des messages électroniques par boucle.

Comme vous pouvez le voir sur la vidéo ci-dessous, nous allons développer un flux de travail de site nommé « Transactions eBay quotidiennes », qui lira les informations relatives aux transactions quotidiennes sur eBayTM, créera des éléments de transaction dans une liste de liens promus SharePoint, puis enverra des messages électroniques aux personnes souhaitant recevoir ces informations relatives aux transactions.

Utilisation d’un service web avec l’action Appeler le service web HTTP

 

Comme le flux de travail « Transactions eBay quotidiennes » est un flux de travail de site, la première chose à faire est de créer un flux de travail de site SharePoint 2013. Une fois ceci fait, vous n’avez qu’à ajouter trois étapes, les nommer correctement, puis les lier en utilisant les actions GO TO.

 

 

Étape 1

Nommez l’étape 1 « Obtenir les transactions eBay quotidiennes » puis ajoutez quatre actions et un bloc de boucle, comme indiqué dans la figure 1.

clip_image002

Figure 1 : étape 1 du flux de travail

 

La première action que nous avons ajoutée est une action Appeler le service web HTTP. L’URI HTTP est définie sur http://www.firstamong.com/json/index.php?q=http://deals.ebay.com/feeds/xml et la méthode HTTP est définie sur « GET ». Cela aurait été pratique d’utiliser simplement l’un des services web REST d’eBay retournant JSON, mais à cause d’un en-tête importun dans la sortie du service web REST d’eBay, nous devons utiliser un service web transformateur supplémentaire (remarquez qu’il y a plusieurs services de transformateurs disponibles. Dans notre cas, nous avons utilisé un service de www.firstamong.com) qui appelle un autre service web REST d’eBay nous renvoyant des objets XML et JSON nettoyés.

Dans l’instruction de l’action « Obtenir le service web HTTP », nous n’avons pas défini les paramètres RequestContent ou RequestHeaders car nous n’en avions pas besoin. Nous sommes seulement intéressés par la sortie de ce service web. En définissant simplement le paramètre response sur une variable ResponseContent, la sortie de cet appel de service web sera stockée dans la variable ResponseContent, qui est une variable de type dictionnaire.

 

La sortie JSON du service web transformateur ayant appelé le service web XML d’eBay ressemble à ceci :

 

{"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==\/

...

À ce propos, pour gérer chaque élément interne nous aurions aussi pu utiliser une variable DealItems pour pouvoir rédiger l’instruction de notre action comme ceci : “Get ([%Variable: Index%])/Title from Variable: DealItems” pour obtenir le Title (titre) de l’élément correctement. Cependant, pour simplifier les choses et afficher une structure lisible des éléments de transaction dans la sortie du service web, nous avons placé le chemin d’accès complet, pour accéder aux propriétés de l’élément. Donc, une instruction comme “Get EbayDailyDeals/Item([%Variable: Index%])/Title from Variable: ResponseContent“ (not Variable: DealItems) permet de récupérer la propriété Title d’un élément. Pour plus d’information sur l’utilisation du type dictionnaire, veuillez consulter les liens fournis en bas de ce billet.

 

La figure 2 indique comment nous avons récupéré les différentes propriétés de chaque élément interne.

clip_image003

Figure 2 : récupération des propriétés d’éléments de transaction et création d’éléments de lien de promotion

 

Grâce à l’action Obtenir l’élément du dictionnaire nous stockons chaque propriété de chaque élément de transaction dans une variable de flux de travail, puis nous les utilisons lorsque nous créons un élément de liste dans la partie ultérieure du bloc de boucle. La plupart des types de variables que nous utilisons dans ce processus « retrieve » (récupération) sont de type string. Cependant, vous pouvez remarquer que nous utilisons aussi d’autres types.

Pour plus d’informations sur l’utilisation du type dictionnaire, veuillez consulter les liens fournis à la fin de ce blog.

clip_image004

Figure 3 : variables locales

 

Nous utilisons également l’action Remplacer la chaîne pour contourner le problème d’une limitation SharePoint nous interdisant l’utilisation des caractères « , » (virgule) ou « ! » (point d’exclamation) dans les données de type URL.

 

La fin du bloc de boucle contient deux blocs d’étape où nous créons le contenu du message électronique et incrémentons la variable d’index de un. Les deux principaux scénarios de ce flux de travail consistent à créer des éléments de liste en utilisant la sortie du service web d’eBay, puis à envoyer des messages électroniques aux personnes souhaitant recevoir les informations relatives aux « transactions eBay quotidiennes ». Nous allons donc créer un fragment HTML dans le bloc de boucle, comme indiqué dans la figure 4.

clip_image005

Figure 4 : deux étapes dans le bloc de boucle

 

Vous pouvez constater que les variables de flux de travail utilisées pour créer les éléments de liste sont toutes réutilisées pour créer le fragment HTML, comme indiqué dans la figure 5.

clip_image006

Figure 5 : création du fragment HTML pour le corps du message électronique

 

 

Étape 2

La logique du flux de travail de l’étape 2 est exactement la même que pour l’étape 1, à l’exception d’une instruction qui, dans l’étape 1, appelle le service web (voir l’instruction encadrée dans la figure 6). Ainsi, vous pouvez créer facilement l’étape 2 en copiant et collant le contenu de l’étape 1 dans l’étape 2.

L’étape 2 va lire une section supplémentaire dans la sortie du service web Transactions eBay quotidiennes. Par conséquent, nous pouvons utiliser la même logique tout en utilisant un chemin d’accès différent lors de la tentative de récupération du groupe Item (élément) à partir de la grande sortie JSON.

clip_image007

Figure 6 : étape de flux de travail 2

 

Cela signifie donc que nous devons utiliser un autre chemin d’accès pour accéder aux éléments dans « MoreDealsSection », comme indiqué dans la figure 7.

clip_image008

Figure 7 : obtenir plus d’éléments de transaction dans MoreDealsSection

 

Pour le reste, rien ne change.

 

 

Étape 3

Dans l’étape 1 et l’étape 2, nous avons créé des éléments de liste et construits les fragments HTML à utiliser pendant l’envoi ultérieur des messages électroniques. Dans l’étape 3, nous allons envoyer des messages électroniques. Elle ne comporte donc qu’une action : Envoyer les messages électroniques, comme indiqué dans la figure 8. Les « abonnés » constituent le groupe SharePoint dans lequel tous les membres du site désirant recevoir les messages électroniques sur les transactions quotidiennes sont ajoutés.

clip_image009

Figure 8 : étape 3 du flux de travail

 

Vous pouvez composer l’intégralité d’un corps de message électronique en HTML dans la boîte de dialogue Grille des propriétés de l’action Envoyer les messages électroniques indiquée ci-dessous. Comme nous avons déjà un fragment de code de tableau HTML complexe dans la variable EmailContent, nous devons juste placer quelques balises wrapper autour de cette variable de recherche, comme indiqué dans la figure 9.

clip_image010

Figure 9 : construire l’intégralité d’un corps de message électronique

 

Et voilà ! Vous êtes maintenant prêt à publier et démarrer ce flux de travail.

Vérifiez simplement que « Transactions eBay quotidiennes » apparaît dans votre site et qu’il s’agit d’une liste de type « Liens promus » qui est un nouveau type de liste, assez sympathique, dans SharePoint 2013. Vous pouvez facilement trouver cette application de liste en cliquant sur Ajouter une application dans le lien Paramètres affiché dans le coin supérieur droit de la page racine de votre site.

clip_image011

 

 

Démarrage du flux de travail

Lorsque vous démarrer ce flux de travail, vous le verrez créer des éléments de transactions eBay quotidiennes dans votre liste « Transactions eBay quotidiennes ». Vous remarquerez également que des messages électroniques sont envoyés depuis ce flux de travail.

clip_image012

Figure 10 : liste de liens promus de Transactions quotidiennes eBay

 

clip_image013

Figure 11 : messages électroniques envoyés depuis le flux de travail

 

 

Retour de boucle ?

Nous avons vu comment construire un flux de travail correct, qui envoie des messages électroniques contenant des informations relatives aux transactions quotidiennes sur eBay. Que faire si nous voulons recevoir ce message électronique « tous les jours » ? Est-il possible de faire en sorte que ce flux de travail soit exécuté toutes les 24 heures ?

Oui. Comme indiqué ci-dessous, en ajoutant une action Pause pour une certaine durée et en modifiant la cible de l’instruction Go To de l’étape 3 pour qu’elle pointe vers l’étape 1, ce flux de travail fonctionnera alors comme un service qui récupérera les éléments relatifs aux transactions eBay quotidiennes pour ensuite les envoyer en tant que messages électroniques tous les jours.

Intéressant, n’est-ce pas ?

clip_image014

Figure 12 : boucle de retour vers le début

 

 

Références

Les références suivantes contiennent des informations complémentaires sur le type dictionnaire et les actions de flux de travail gérant les variables de dictionnaire et les services web HTTP.

 

Contenu de l’aide de SharePoint Designer 2013

Ce billet de blog a été traduit de l’anglais. Vous trouverez la version originale sur How to work with web service using “Call HTTP Web Service” action