Utilisation d’un service web avec l’action « Appeler le service web HTTP »
Article d’origine publié le mercredi 5 septembre 2012
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.
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 https://www.firstamong.com/json/index.php?q=https://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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Figure 10 : liste de liens promus de Transactions quotidiennes eBay
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 ?
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
- MSDN : présentation des actions de dictionnaire dans SharePoint Designer 2013 (en anglais)
- MSDN : appel de service web HTTP avec le dictionnaire (ce contenu n’est pas encore disponible)
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