Come utilizzare il servizio Web con l'azione "Chiama servizio Web HTTP"

Articolo originale pubblicato mercoledì 5 settembre 2012

immagine

Salve a tutti, mi chiamo HyongGuk Kim e sono Senior Program Manager del team di SharePoint Designer.

In questo blog illustrerò come scrivere facilmente un flusso di lavoro di SharePoint 2013 che utilizza il servizio Web HTTP (REST) pubblico o commerciale e come eseguirlo come servizio che invia messaggi di posta elettronica giornalieri eseguendo il ciclo.

Come è possibile osservare nel clip video seguente, creeremo un flusso di lavoro del sito denominato "eBay Daily Deals", che leggerà le informazioni con le offerte del giorno su eBayTM, creerà offerte in un elenco Collegamenti alzati di livello di SharePoint e invierà quindi messaggi di posta elettronica a coloro che desiderano ricevere queste informazioni commerciali.

Utilizzo del servizio Web con l'azione Chiama servizio Web HTTP

 

Poiché il flusso di lavoro "eBay Daily Deals" è un flusso di lavoro del sito, è necessario innanzitutto creare un nuovo flusso di lavoro del sito di SharePoint 2013. Dopo aver creato il flusso di lavoro, è sufficiente aggiungere tre fasi, denominarle correttamente e quindi collegarle utilizzando azioni Vai a.

 

 

Fase 1

Assegnare alla fase 1 (Stage 1) il nome "Get eBay Daily Deals" e quindi aggiungere quattro azioni e un blocco Ciclo (Loop), come mostrato nella figura 1.

clip_image002

Figura 1. Fase 1 (Stage 1) del flusso di lavoro

 

La prima azione aggiunta è di tipo Chiama servizio Web HTTP. L'URI HTTP è impostato su https://www.firstamong.com/json/index.php?q=https://deals.ebay.com/feeds/xml e il metodo HTTP è impostato su "GET". Sarebbe stato fantastico utilizzare solo uno dei servizi Web REST di eBay che restituisce JSON, ma a causa di una fastidiosa intestazione nel risultato del servizio Web REST di eBay, abbiamo dovuto utilizzare un servizio Web aggiuntivo di trasformazione. Ne sono disponibili due e abbiamo scelto di utilizzare un servizio di www.firstamong.com. Questo servizio chiama un altro servizio Web REST di eBay che restituisce codice XML e oggetti JSON puliti.

Nell'istruzione dell'azione "Chiama servizio Web HTTP" non abbiamo impostato il parametro RequestContent o RequestHeaders, perché non è necessario. Siamo interessati infatti solo all'output del servizio Web. Impostando semplicemente il parametro response su una variabile ResponseContent, l'output della chiamata al servizio Web verrà archiviato nella variabile di tipo dizionario ResponseContent.

 

L'output JSON del servizio Web di trasformazione che ha chiamato il servizio Web XML di eBay è simile al seguente:

 

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

...

Per gestire ogni elemento interno, avremmo potuto anche utilizzare una variabile DealItems in modo da poter inserire l'istruzione dell'azione "Get ([%Variable: Index%])/Title from Variable: DealItems" per ottenere la proprietà Title dell'elemento. Tuttavia, per semplificare le operazioni e mostrare una struttura chiara degli elementi offerta commerciale all'interno dell'output del servizio Web, ho specificato il percorso completo per l'accesso alle proprietà dell'elemento. Impostando un'istruzione come "Get EbayDailyDeals/Item([%Variable: Index%])/Title from Variable: ResponseContent" (non Variable: DealItems) verrà recuperata la proprietà Title di un elemento. Per ulteriori informazioni sull'utilizzo del tipo di dizionario, è possibile fare riferimento ai collegamenti forniti alla fine del blog.

 

Nella figura 2 viene illustrato come recuperare tutte le diverse proprietà di ogni elemento interno.

clip_image003

Figura 2. Recupero delle proprietà degli elementi offerta commerciale e creazione di elementi collegamento di promozione

 

Con l'azione Recupera un elemento da un dizionario archiviamo ogni proprietà di ogni elemento offerta commerciale in una variabile del flusso di lavoro per utilizzarle al momento della creazione di un elemento di elenco in una parte successiva del blocco Ciclo (Loop). La maggior parte dei tipi di variabile utilizzati in questo processo di "recupero" è di tipo stringa (String), ma come potete osservare utilizziamo anche altri tipi.

Per ulteriori informazioni sull'utilizzo del tipo di dizionario, è possibile fare riferimento ai collegamenti forniti alla fine del blog.

clip_image004

Figura 3. Variabili locali

 

Utilizziamo inoltre l'azione Sostituisci stringa per ovviare a una limitazione di SharePoint per cui non è possibile utilizzare i caratteri ',' e '!' nei dati di tipo URL.

 

Alla fine del blocco Ciclo (Loop) sono presenti due blocchi di passaggi (Step) in cui creiamo il contenuto dei messaggi di posta elettronica e incrementiamo la variabile di indice di un'unità. I due scenari principali di questo flusso di lavoro consistono nel creare elementi di elenco utilizzando il risultato del servizio Web eBay e quindi nell'inviare messaggi di posta elettronica a coloro che desiderano ricevere informazioni di "eBay Daily Deals". A tale scopo, viene creato un frammento HTML nel blocco Ciclo (Loop) come illustrato nella figura 4.

clip_image005

Figura 4. Due passaggi (Step) nel blocco Ciclo (Loop)

 

Come potete osservare, le variabili del flusso di lavoro che abbiamo utilizzato per la creazione degli elementi di elenco vengono tutte riutilizzate per la creazione del frammento HTML, come illustrato nella figura 5.

clip_image006

Figura 5. Creazione del frammento HTML per il corpo del messaggio di posta elettronica

 

 

Fase 2

La logica del flusso di lavoro nella fase 2 è identica a quella della fase 1. Si differenzia solo per un'istruzione, che chiama il servizio Web della fase 1 (istruzione cerchiata nella figura 6). Potete quindi creare facilmente la fase 2 copiando e incollando il contenuto della fase 1 nella fase 2.

La fase 2 leggerà un'ulteriore sezione nell'output del servizio Web "eBay's Daily Deals". Possiamo quindi utilizzare la stessa logica, ma con un percorso diverso per recuperare la matrice Item dall'output JSON sopra riportato.

clip_image007

Figura 6. Fase 2 (Stage 2) del flusso di lavoro

 

Per questo motivo, è necessario utilizzare un percorso diverso per accedere agli elementi in "MoreDealsSection", come mostrato nella figura 7.

clip_image008

Figura 7. Accesso a ulteriori elementi offerta commerciale in MoreDealsSection

 

Tutto il resto è esattamente uguale.

 

 

Fase 3

Nella fase 1 e nella fase 2 abbiamo creato elementi di elenco e frammenti HTML da utilizzare per l'invio successivo di messaggi di posta elettronica. La fase 3, che consiste nell'inviare i messaggi di posta elettronica, prevede una sola azione, ovvero l'azione Invia messaggio illustrata nella figura 8. "Subscribers" è il gruppo di SharePoint dei sottoscrittori in cui vengono aggiunti tutti i membri del sito che desiderano ricevere i messaggi di posta elettronica con le offerte del giorno.

clip_image009

Figura 8. Fase 3 (Stage 3) del flusso di lavoro

 

È possibile comporre il corpo di un messaggio di posta elettronica completo in HTML nella finestra di dialogo della griglia proprietà dell'azione Invia messaggio mostrata di seguito. Poiché disponiamo già di un frammento di codice di tabella HTML complesso nella variabile EmailContent, è sufficiente inserire alcuni tag wrapper intorno alla variabile, come illustrato nella figura 9.

clip_image010

Figura 9. Creazione del corpo di un messaggio di posta elettronica completo

 

Questo è tutto! Ora siete pronti per pubblicare e avviare questo flusso di lavoro.

Ricordatevi però di verificare di disporre di un elenco "eBay Daily Deals" nel sito e che sia un elenco di tipo "Collegamenti alzati di livello" (Promoted Links), un nuovo tipo di elenco disponibile in SharePoint 2013. Potete trovare facilmente questa applicazione elenco facendo clic su Aggiungi un'app dal collegamento Impostazioni nell'angolo in alto a destra della pagina radice del sito.

clip_image011

 

 

Avvio del flusso di lavoro

All'avvio del flusso di lavoro, verranno creati elementi dell'elenco "eBay Daily Deals" e verranno inviati i messaggi di posta elettronica.

clip_image012

Figura 10. Elenco Collegamenti alzati di livello eBay Daily Deals

 

clip_image013

Figura 11. Messaggio di posta elettronica inviato dal flusso di lavoro

 

 

Loopback?

Abbiamo esaminato come creare un flusso di lavoro del sito che invia messaggi di posta elettronica con le offerte del giorno di eBay. E se volessimo ricevere questo messaggio "tutti i giorni"? Sarà possibile fare in modo che il flusso di lavoro si ripeta ogni 24 ore?

Sì! Come illustrato di seguito, aggiungendo un'azione Pausa (durata) e cambiando la destinazione dell'istruzione Vai a nella fase 3 in modo da puntare alla fase 1, il flusso di lavoro funzionerà come un servizio che recupera gli elementi eBay's Daily Deals per inviarli come messaggi di posta elettronica tutti i giorni.

Sembra divertente, vero?

clip_image014

Figura 12. Loopback

 

 

Riferimenti

Seguono alcuni riferimenti in cui sono disponibili ulteriori informazioni sul tipo di dizionario e sulle azioni dei flussi di lavoro che gestiscono le variabili di dizionario e i servizi Web HTTP.

 

Contenuto della Guida di SharePoint Designer 2013

Questo è un post di blog localizzato. L'articolo originale è disponibile in How to work with web service using "Call HTTP Web Service" action.