第十四章PROC處理程序實作第十四章PROC處理程序實作\14-6 PROC的Web Service應用

14-6 PROCWeb Service應用

 

PROC可以很方便來呼叫現成的Web Service並進行資料的交換,我們就以工地施工的降雨通知為例,當日如果所屬工地下雨機率超過40%的話,會透過Line來通知施工人員,來讓施工人員做好準備。如下,為[降雨通知]PROC程序:

 

Step1>新增一個PROC,命名為"降雨通知",並在[開始] 中設定一個RET 變數,初值設為''[結束]活動,則設定傳回RET變數。

 

Step2>本例需要一個[施工計畫]的資料表,以取得每天的工地施工計畫,如下,需要有以下欄位: 編號(施工編號),施工人員編號(如工地主任),施工地點,施工日期等。

 

Step3>拖入一個[SQL讀入]活動,如下:

Title設定為"施工計畫查詢"

CommandText設定為:

SELECT 施工計畫.編號,施工計畫.施工人員編號,施工計畫.施工地點,施工計畫.施工日期 FROM 施工計畫 WHERE 施工日期=@DATE

Var設定為arrPlan(資料陣列)

Parameters則可以選擇參數DATE與開窗選擇系統變數'$today',如下:

 

Step4>拖入[循環]活動,並設定LoopArrayVar為上面的arrPlan資料陣列,LoopObjVar設定為row代表迴圈中的對應資料。

 

Step5>拖入[Web服務]活動,設定如下:

Title設定為'呼叫氣象局平台'

Url設定為'https://opendata.cwb.gov.tw/api/v1/rest/datastore/F-D0047-061',此為中央氣象局開放平台中的"臺北市未來2天天氣預報"資料,如果要垮縣市的話,後面的"-061"要動態更換,請參考:https://opendata.cwb.gov.tw/dist/opendata-swagger.html

Var請設定為strJson,代表傳回的JSON格式將存在本變數上。

Method設定為GetDataType選擇傳回json

Parameters代表Web Service的傳遞參數(需根據對方API的規格來設定),如下:

Name

Expression

說明

locationName

row.施工地點

內容為台北市的行政區域(如大同區),可以開窗選擇,如下的編輯器。

elementName

"PoP6h"

代表6小時的天氣預報

Authorization

XXXXXXXXXXXXX

須向中央氣象局開放資料平臺申請API的授權碼,申請網址請參考:https://opendata.cwb.gov.tw/devManual/insrtuction

授權碼取得,如下圖。

timeFrom

$today+"T09:00:00"

設定預設的起始時間

timeTo

$today+"T18:00:00"

設定預設的終止時間

上面Expressoin中,開窗選擇"row.施工地點"的方式:

"中央氣象局氣象資料開放平台"中去註冊會員帳號後,可以取得以下的API授權碼:

Step6>以上設定好了之後,為了能測試此Web Service可以正常呼叫,可以在[Web服務] 活動中按 [右鍵]選擇【預覽】,則會出現如下的畫面:

以上的LocationName因為目前不知道,所以我們可以輸入"大同區",然後按下【預覽】即可顯示呼叫此API的回傳結果(JSON格式)

 

Step6> [Web服務] 下方貼入[設值]活動,設定Items如下:

Var設定一個"POP"變數,於上面的Web Service預覽得到傳回的JSON格式很深層,所以必須自己組合出我們要的參數,下圖為針對strJson取得的JSON做解析,後面接符號"{"代表為一般屬性,使用"."來取值;如果後面接符號"["代表為陣列屬性,使用"[n]."來取值,如下:

strJson.records.locations[0].location[0].weatherElement[0].time[0].elementValue[0].value

以上的活動,會取出"value"內容存到POP變數上。

 

Step7>往下貼入一個[條件]活動來判斷降雨機率是否超過40%,如下:

[條件]活動的外框為了與[循環] 活動區別,可以設定Background的顏色。

左邊的條件分支可以設定Titlt"降雨機率大"Expression"POP>=40",可以透過條件編輯窗來選擇,如下:

右邊的分支因為沒有條件,所以只要設定Title"降雨機率小"即可。

 

Step8>往下貼入一個[發送消息]活動於[降雨機率大]的條件中,用來發送Line的通知給施工人員,如下的屬性設定:

Title設定為"發送Line消息"

SendToVar設定為row.施工人員編號,可以使用變數編輯器,選中[row]打開欄位明細,再選擇[row.施工人員編號]傳回。

SubjectVar設定為"降雨通知"

SendType選擇為"Line"

Body透過開窗的編輯器可以套入row的欄位與POP的變數,來通知施工人員,如下:

 

Step9>往下貼入一個[設值]活動於[發送Line消息] 的下方,把發送成功的消息累積到RET變數上,如下:

如果有多個施工地點就會通知多個施工人員(工地主任),並累積到RET變數上傳回。

 

Step10>再來就是Line的連動設定,首先必須去Line官方網站上申請一個Line連動的ClientIDClientSecret,請參考我們的網站文章去申請:

https://www.infolight.com/cloud_andyhome_bootstrap/DOCUMENTSDT?no=2823

申請完成之後,請將ClientIDClientSecret貼入EEPCloud [工具]/[設定][Line設定],如下:

完成設定之後,接著就是讓USER的帳號與他個人的Line連動起來,請USEREEPCloudRuntime執行頁面中,如下的操作:

1. 在使用者帳號去選擇【連動/Line】。

2. 選擇【個人】或對應的 EEPCloud群組。通常選擇【個人】即可。

3. 登入Line的帳號,Line會要求使用者輸入Line的帳號與密碼,進行連動。

4. 最後選擇連動的方式,可以選擇個人一對一或是群組對群組連動,這裡選擇"11"

 

Step11>最後我們可以透過預覽Debug來測試,或是利用排程(如每天早上6:00來執行),如下:

可以設定兩個中斷點,一個是 [Web服務] 活動,另一個是 [Line發送];執行後,展開arrPlan可以看到找到兩筆當日的施工計畫,進入迴圈後,row的內容為各個施工計畫的地點與施工人員。

執行完[呼叫氣象局平台]之後,透過strJson可以看到回傳"大同區"的結果,取出POP變數之後,如果當日POP下雨機率沒有超過40,可以透過下方的運算式來刻意改變POP的值(如改成50)

如果POP>=40,將會執行[發送Line消息],會通知 "row.施工人員編號" 所對應的Line連動帳號,這時,該施工人員就會收到如下的Line通知:


 

Top of Page