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設定為Get,DataType選擇傳回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連動的ClientID與ClientSecret,請參考我們的網站文章去申請:
https://www.infolight.com/cloud_andyhome_bootstrap/DOCUMENTSDT?no=2823
申請完成之後,請將ClientID與ClientSecret貼入EEPCloud的 [工具]/[設定]的[Line設定],如下:
完成設定之後,接著就是讓USER的帳號與他個人的Line連動起來,請USER在EEPCloud的Runtime執行頁面中,如下的操作:
1. 在使用者帳號去選擇【連動】/【Line】。
2. 選擇【個人】或對應的 EEPCloud群組。通常選擇【個人】即可。
3. 登入Line的帳號,Line會要求使用者輸入Line的帳號與密碼,進行連動。
4. 最後選擇連動的方式,可以選擇個人一對一或是群組對群組連動,這裡選擇"1對1"。
Step11>最後我們可以透過【預覽】的Debug來測試,或是利用排程(如每天早上6:00來執行),如下:
可以設定兩個中斷點,一個是 [Web服務] 活動,另一個是 [Line發送];執行後,展開arrPlan可以看到找到兩筆當日的施工計畫,進入迴圈後,row的內容為各個施工計畫的地點與施工人員。
執行完[呼叫氣象局平台]之後,透過strJson可以看到回傳"大同區"的結果,取出POP變數之後,如果當日POP下雨機率沒有超過40,可以透過下方的運算式來刻意改變POP的值(如改成50)。
如果POP>=40,將會執行[發送Line消息],會通知 "row.施工人員編號" 所對應的Line連動帳號,這時,該施工人員就會收到如下的Line通知:
Related Topics