如何使用「呼叫 HTTP Web 服務」動作與 Web 服務搭配運作

英文原文已於 2012 年 9 月 5 日星期三發佈

圖像

您好,我叫 HyongGuk Kim,是 SharePoint Designer 小組的資深專案經理。

在這個部落格中,我將說明我們如何輕鬆撰寫搭配公共或商業 HTTP (REST) Web 服務的 SharePoint 2013 工作流程,以及我們如何使用迴圈讓它運作為一個寄送每日電子郵件的服務。

如同您在下列視訊短片中看到的,我們將會建立一個名叫「eBay 每日交易」網站工作流程,在 eBay TM 上閱讀每天的交易資訊,並在 SharePoint Promoted Links 清單上建立交易項目,然後寄發郵件給想要收到此交易資訊的人。

使用「呼叫 HTTP Web 服務」動作與 Web 服務搭配運作

 

由於「eBay 每日交易」工作流程是一個網站工作流程,因此您需要做的第一件事情就是建立一個新的 SharePoint 2013 網站工作流程。一旦建立網站工作流程之後,您只要新增三個階段,並且正確命名階段名稱,之後再使用「前往」動作。將它們連結起來就可以了。

 

 

階段 1

命名階段 1: 「取得 eBay 每日交易」,然後新增四個動作與一個迴圈區,如圖 1 所示。

clip_image002

圖 1. 工作流程階段 1

 

我們新增的第一個動作是一個「呼叫 HTTP Web 服務」 動作。HTTP URI 設定為 https://www.firstamong.com/json/index.php?q=https://deals.ebay.com/feeds/xml (可能為英文網頁)HTTP 方法 設定成 [取得]。最好只使用其中一種傳回 JSON 的 eBay 的 REST Web 服務 ,但是由於 eBay 的 REST Web 服務結果中有一個討人厭的頁首,我們必須使用額外的轉換器 Web 服務 ( 注意:有許多可用的轉換器服務,而在我們的情況下是從 www.firstamong.com (可能為英文網頁) 這裡使用服務),來呼叫 eBay 的另外一個 REST Web 服務,此服務可以傳回 XML 與簡潔的 JSON 物件。

在「呼叫 HTTP Web 服務」動作陳述式中,我們並不設定 RequestContentRequestHeaders 參數,因為我們不需要這麼做。我們只對該 Web 服務的輸出有興趣。只要在 ResponseContent 變數的中設定 response 參數,此 Web 服務的輸出就會儲存到 ResponseContent 變數中 ,這是一種字典類型的變數。

 

名為「eBay 的 XML Web 服務」的轉換器 Web 服務 JSON 輸出外觀如下:

 

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

...

順帶一提,如要處理每個內部項目,我們也可以使用 DealItems 變數,如此我們可以將我們的動作陳述式,例如 “Get ([%Variable: Index%])/Title from Variable: DealItems” 以取得項目的 標題 屬性。然而,爲了將事情簡單化並且顯示 Web 服務輸出交易項目的清楚結構,我設定完整路徑以取得項目屬性。如此一來,像是 “Get EbayDailyDeals/Item([%Variable: Index%])/Title from Variable: ResponseContent” (非為 Variable: DealItems) 這類的陳述式將會擷取項目的 標題 屬性。如需有關使用字典類型的詳細資訊,請參閱此部落格下方所提供的連結。

 

圖 2 顯示我們如何擷取每個內部項目的所有不同屬性。

clip_image003

圖 2. 擷取交易項目的屬性與建立促銷連結項目

 

使用「從字典取得項目」動作,我們可以將每個交易項目的屬性儲存至工作流程變數,然後當我們在迴圈區後半部建立清單項目時可以使用它們。我們在這個「擷取」過程中所使用的變數類型大多是 字串 ,但您可以發現我們也使用其他的類型。

如需有關使用字典類型的詳細資訊,請參閱此部落格下方所提供的連結。

clip_image004

圖 3. 區域變數

 

我們也使用「置換字串」動作以因應 SharePoint 不能在 URL 類型的資料中使用 ',' 或 '!' 字元的限制問題。

 

在迴圈區末端有兩個「步驟區」,是用來建立電子郵件內容與使用其中之一遞增索引變數。此工作流程的兩個主要案例是使用 eBay Web 服務的結果建立清單項目,然後寄送電子郵件給想收到「eBay 每日交易」資訊的人。所以我們在迴圈區內建立一個 HTML 片段,如圖 4 所示。

clip_image005

圖 4. 迴圈區的兩個步驟

 

您可以看到我們在建立 HTML 片段時重複使用建立清單項目的工作流程變數,如圖 5 所示。

clip_image006

圖 5. 建立電子郵件內文的 HTML 片段

 

 

階段 2

除了在階段 1 中呼叫 Web 服務的一個陳述式以外,階段 2 的工作流程邏輯跟階段 1 的工作流程邏輯完全一樣。( 見圖 6 中圈起的陳述式)。因此,您只要複製與貼上階段 1 的內容至階段 2,就可以輕鬆建立階段 2。

階段 2 會讀取一個在「eBay 每日交易」Web 服務輸出中的額外區域。因此,當要從以上的大 JSON 輸出中擷取 項目 陣列時,我們可以使用同樣的邏輯,但不同的路徑。

clip_image007

圖 6. 工作流程階段 2

 

這表示我們需要使用不同的路徑取得 “MoreDealsSection” 中的項目,如圖 7 所示。

clip_image008

圖 7. 從 “MoreDealsSection” 中取得更多交易項目

 

其他都一模一樣。

 

 

階段 3

我們在階段 1 與階段 2 建立了清單項目,也建立了用來寄發電子郵件的 HTML 片段。階段 3 我們會寄發電子郵件,因此只需要「寄送電子郵件」此單一動作,如圖 8 所示。[ 訂閱者 ] 是 SharePoint 群組中想要收到 [每日交易電子郵件] 而新增為成員的網站成員。

clip_image009

圖 8. 工作流程階段 3

 

您可以在 HTML 的「寄送電子郵件」動作的屬性對話方塊內撰寫完整的電子郵件內文,如以下所示。既然我們在 EmailContent 變數中擁有複雜的HTML 表格程式碼片段,我們只需要在變數查閱旁放置幾個包裝函式標記,如圖 9 所示。

clip_image010

圖 9. 建立完整的電子郵件內文

 

就是這樣!您現在已經完全準備好發佈並且開始這個工作流程了。

記得確定您的網站上有一個 [eBay 每日交易] 清單,而且它必須是 [促銷連結] 類型清單,這是 SharePoint 2013 的酷炫新清單類型。當您從位於您的網站根頁面右上角的 設定 連結中按一下 [新增應用程式] 時,您就可以輕鬆地找到此種清單應用程式。

clip_image011

 

 

開始工作流程

當您開始這個工作流程時,您會看到工作流程在您的 [eBay 每日交易 ] (eBay Daily Deals) 清單中建立 [eBay 每日交易] 項目,而您也會注意到您有從此工作流程中寄出的電子郵件。

clip_image012

圖 10. [eBay 每日交易] (eBay Daily Deals) 促銷連結清單

 

clip_image013

圖 11. 從工作流程中寄出的電子郵件

 

 

迴路?

我們已看過如何建立一個好的網站工作流程以寄發含有 [eBay 每日交易] 資訊的電子郵件了,那麼如果我們想要「每天」收取這封電子郵件呢?有可能使這個工作流程每 24 小時重複運作嗎?

可以!如同以下所示,新增一個「期間暫停」動作並變更階段 3 中的「前往」(Go To) 陳述式的目標至階段 1,則這個工作流程就會像一個擷取 [eBay 每日交易] 項目的服務一般運作,並且如同電子郵件一樣每天寄發這些交易。

聽起來很有趣,對吧?

clip_image014

圖 12. 迴路至開頭

 

 

參考資料

這裡有一些參考資料,您可以找到更多有關字典類型與處理字典變數及 HTTP Web 服務的工作流程動作的資訊。

 

SharePoint Designer 2013 說明內容

這是翻譯後的部落格文章。英文原文請參閱 How to work with web service using “Call HTTP Web Service” action