Verwenden der Aktion „Call HTTP Web Service“ zum Arbeiten mit Webdiensten
Veröffentlichung des Originalartikels: 05.09.2012
Hallo zusammen, mein Name ist HyongGuk Kim. Ich bin Senior Program Manager im SharePoint Designer-Team.
In diesem Blogbeitrag möchte ich Ihnen vorstellen, wie wir ganz einfach einen SharePoint 2013-Workflow schreiben können, der einen öffentlichen oder kommerziellen HTTP-Webdienst (REST) abruft, und wie wir den Workflow ganz einfach als einen Dienst ausführen können, der täglich E-Mails in Form von E-Mail-Schleifen versendet.
Wie Sie in dem Videoclip unten sehen können, erstellen wir einen Website-Workflow namens „eBay Daily Deals“ (Tagesangobte von eBay), der die täglichen Angebotsinformationen von eBayTM abruft, Angebotselemente in einer SharePoint-Liste vom Typ „Promoted Links“ erstellt und dann E-Mails an Empfänger sendet, die diese Angebotsinformationen gern erhalten möchten.
Verwenden der Aktion „Call HTTP Web Service“ zum Arbeiten mit Webdiensten
Da es sich bei dem Workflow „eBay Daily Deals“ um einen Website-Workflow handelt, müssen Sie als Erstes einen neuen SharePoint 2013-Website-Workflow erstellen. Sobald der Website-Workflow erstellt wurde, können Sie ganz einfach drei Phasen hinzufügen, sie ordnungsgemäß benennen und dann anhand von Go To-Aktionen verknüpfen.
Phase 1
Benennen Sie die Phase 1 mit „Get eBay Daily Deals“ und fügen Sie dann vier Aktionen und einen Loop-Block hinzu, wie in Abbildung 1 dargestellt.
Abbildung 1: Workflowphase 1
Die erste Aktion, die wir hinzugefügt haben, ist eine Call HTTP Web Service-Aktion. Der HTTP-URI ist auf https://www.firstamong.com/json/index.php?q=https://deals.ebay.com/feeds/xml gesetzt und die HTTP-Methode auf „GET“. Es wäre toll gewesen, einfach einen der REST-Webdienste von eBay zu verwenden, der JSON zurückgibt. Aber aufgrund eines störenden Headers im REST-Webdienst von eBay mussten wir einen separaten Umwandlungs-Webdienst verwenden (Es sind einige Umwandlungs-Webdienste verfügbar. In unserem Fall haben wir einen Dienst von www.firstamong.com verwendet.). Der Umwandlungs-Webdienst ruft einen anderen REST-Webdienst von eBay auf, der XML-Code zurückgibt. Dieser wird dann umgewandelt, und wir erhalten saubere JSON-Objekte.
In der Anweisung zu „Call HTTP Web Service“ werden die Parameter RequestContent oder RequestHeaders nicht gesetzt, da dies nicht erforderlich ist. Wir sind lediglich am Output des Webdiensts interessiert. Wenn wir den Parameter response einfach auf die Variable ResponseContent setzen, wird der Output des Webdiensts in der Variable ResponseContent gespeichert. Bei dieser Variable handelt es sich um eine Variable vom Typ „Dictionary“.
Der von dem Umwandlungs-Webdienst aus XML umgewandelte und ausgegebene JSON-Code sieht wie folgt aus:
{"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==\/
...
Wir hätten übrigens zur Verarbeitung jedes internen Elements auch die Variable DealItems verwenden können, sodass wir unsere Anweisung „Get ([%Variable: Index%])/Title from Variable: DealItems“ dafür hätten verwenden können, um die Eigenschaft Title von Elementen abzurufen. Um jedoch ein besseres Verständnis zu ermöglichen und die genaue Struktur von Angebotselementen innerhalb des Outputs von Webdiensten zu zeigen, habe ich den vollständigen Pfad zum Abrufen von Elementeigenschaften angegeben. So wird also mit der Anweisung „Get EbayDailyDeals/Item([%Variable: Index%])/Title from Variable: ResponseContent“ (und nicht mit der Variable „DealItems“) die Eigenschaft Title eines Elements abgerufen. Weitere Informationen zum Verwenden von Variablen vom Typ „Dictionary“ finden Sie unter den Links am Ende des Blogbeitrags.
In Abbildung 2 ist dargestellt, wie wir die diversen Eigenschaften jedes internen Elements abrufen.
Abbildung 2: Abrufen von Eigenschaften von Angebotselementen und Erstellen von Elementen vom Typ „Promotion Link“
Mit der Aktion Get item from Dictionary speichern wir jede Eigenschaft von jedem Angebotselement in einer Workflow-Variable. Die Variable verwenden wir dann in einem späteren Schritt beim Erstellen von Listenelementen für den Loop-Block. Die meisten Variablen, die wir in diesem Abrufprozess verwenden, sind vom Typ string. Aber wie Sie feststellen können, verwenden wir auch andere Variablentypen.
Weitere Informationen zum Verwenden von Variablen vom Typ „Dictionary“ finden Sie unter den Links am Ende des Blogbeitrags.
Abbildung 3. Lokale Variablen.
Wir verwenden die Aktion Replace String, wenn wir eine von SharePoint bedingte Einschränkung umgehen müssen, laut der wir die Zeichen „,“ oder „!“ in URL-Daten nicht verwenden dürfen.
Am Ende des Loop-Blocks gibt es zwei Phasenblocks, in denen wir die E-Mail-Inhalte erstellen und die Indexvariable um eins hochzählen. Die beiden Hauptszenarien für diesen Workflow bestehen darin, Listenelemente anhand des Outputs des eBay-Webdiensts zu erstellen und dann E-Mails an Empfänger zu senden, die Informationen zu Tagesangeboten von eBay erhalten möchten. Wir erstellen dazu ein HTML-Fragment innerhalb des Loop-Blocks, wie in Abbildung 4 dargestellt.
Abbildung 4: Zwei Phasen im Loop-Block
Hier können Sie erkennen, dass die Workflow-Variablen, die wir dazu verwendet haben, die Listenelemente zu erstellen, alle beim Erstellen des HTML-Fragments wiederverwendet werden, wie in Abbildung 5 dargestellt.
Abbildung 5: Erstellen des HTML-Fragments für den E-Mail-Textkörper
Phase 2
Die Workflow-Logik in Phase 2 ist die gleiche wie bei Phase 1, mit der Ausnahme einer Anweisung in Phase 1, die den Webdienst aufruft (siehe die hervorgehobenen Anweisung in Abbildung 6). Daher können Sie Phase 2 ganz einfach erstellen, indem Sie die Inhalte aus Phase 1 kopieren und in Phase 2 einfügen.
Phase 2 liest einen zusätzlichen Abschnitt im Output des Daily Deals-Webdiensts von eBay. Daher können wir die gleiche Logik verwenden, nutzen aber einen anderen Pfad, um das Item-Array von dem umfangreichen JSON-Output oben abzurufen.
Abbildung 6: Workflowphase 2
Dies bedeutet, das wir einen anderen Pfad für den Zugriff auf Elemente in „MoreDealsSection“ verwenden müssen, wie in Abbildung 7 dargestellt.
Abbildung 7: Abrufen weiterer Angebotselemente in „MoreDealsSection“
Alles andere ist genau gleich.
Phase 3
In Phase 1 und Phase 2 haben wir Listenelemente und HTML-Fragmente erstellt, die später für das Senden von E-Mails verwendet werden. In Phase 3 werden wir E-Mails senden. Somit besteht die Phase nur aus der Aktion Send Email, wie in Abbildung 8 dargestellt. Bei „Subscribers“ (Abonnenten) handelt es sich um die SharePoint-Gruppe, der alle Websitemitglieder, die E-Mails mit Informationen zu Tagesangeboten empfangen möchten, als Teilnehmer hinzugefügt werden.
Abbildung 8: Workflowphase 3
Sie können einen vollständigen E-Mail-Textkörper in HTML in dem Eigenschaftenraster-Dialogfeld der Aktion Send Email, wie unten dargestellt, erstellen. Da wir bereits ein komplexes HTML-Tabellencodefragment in der Variable EmailContent vorliegen haben, brauchen wir lediglich ein paar umschließende Tags um die Variable zu setzen, wie in Abbildung 9 dargestellt.
Abbildung 9: Erstellen eines vollständigen E-Mail-Textkörpers
Das war's! Sie können den Workflow jetzt veröffentlichen und starten.
Stellen Sie sicher, dass Ihre Website eine „eBay Daily Deals“-Liste vom Typ „Promoted Links“ umfasst - ein großartiger neuer Listentyp in SharePoint 2013. Die Listenapp finden Sie ganz einfach, wenn Sie in der rechten oberen Ecke auf Ihrer Stammseite unter Settings (Einstellungen) auf Add an app (App hinzufügen) klicken.
Starten des Workflows
Wenn Sie diesen Workflow starten, werden „eBay Daily Deal“-Elemente in Ihrer „eBay Daily Deals“-Liste erstellt, und sie werden auch feststellen, dass E-Mails von dem Workflow gesendet werden.
Abbildung 10: „eBay Daily Deals“-Liste vom Typ „Promoted Links“
Abbildung 11: Vom Workflow gesendete E-Mail
Einrichten von Schleifen?
Wir haben gelernt, wie wir einen guten Website-Workflow erstellen können, der E-Mails mit den Tageangeboten von eBay versendet. Was ist, wenn wir diese E-Mail jeden Tag erhalten möchten? Kann dieser Workflow alle 24 Stunden wiederholt werden?
Absolut! Wie unten dargestellt kann die Aktion Pause for Duration hinzugefügt werden und das Ziel der Anweisung Go To innerhalb von Phase 3 kann so geändert werden, dass es auf Phase 1 zurückzeigt. Somit arbeitet der Workflow wie ein Dienst, der die Tagesangebote von eBay abruft und diese täglich in einer E-Mail versendet.
Ist das nicht toll?
Abbildung 12: Schleife zurück zum Anfang
Referenzen
In den Referenzen unten finden Sie weitere Informationen zum Typ „Dictionary“ und zu Workflowaktionen, die Variablen vom Typ „Dictionary“ sowie HTTP-Webdienste verarbeiten.
SharePoint Designer 2013-Hilfeinhalte
- MSDN: Understanding Dictionary actions in SharePoint Designer 2013
- MSDN: Calling HTTP web service with Dictionary (dieser Inhalt ist noch nicht verfügbar)
Es handelt sich hierbei um einen übersetzten Blogbeitrag. Sie finden den Originalartikel unter How to work with web service using “Call HTTP Web Service” action