企業的資訊系統通常不一定是集中管理,有時會分散在不同的地點,這時可能就需要以FTP的方式來傳送資料,並以程式來整合到資料庫中。PROC同樣支援一個 [FTP]的活動來進行自動化的FTP檔案上傳或下載,再透過其他活動來進行資料整合。如下,以兩個系統的客戶資料整合為例,透過 FTP來下載 "CUSTOMERS.xlsx" 並整合到 "客戶資料表"中,如下的流程:
Step1>新增一個PROC,命名為"FTP下載",並在[開始] 中設定一個file_name傳入變數(由前端或排程傳入),另一個為ftp_result,初值設為''。
Step2>貼入一個[FTP] 活動,設定屬性如下:
Title設定為"FTP下載"
Host代表FTP的主機IP或網址。
HostFolder配合FTP主機上的設定,指定主機端檔案的目錄,設定為"/homes/infolight"。
LocalFolder指下載之後會放在EEPCloud主機上的哪一個目錄,設定存放到csv目錄。
Mode可設定download與upload,這裡設定download。
User/Password代表FTP主機上的帳號與密碼。
FileNamesVar,指所要下載或上傳的檔案名稱,請選file_name變數,內容就是檔案名稱。
ErrorVar,FTP錯誤時傳回訊息的變數名稱。
Step3>貼入一個[條件] 活動,左邊設定為"下載成功",Expression條件設定為ftp_result=='' (代表成功);右邊設定為"下載失敗",Expression條件不必設定。
Step4>在
[下載成功]中貼入[文件匯入]活動,用來讀取Excel檔案到變數當中,屬性如下:
Var代表匯入資料後所要儲存的變數名稱。這裡設定為ftp_rows(陣列變數)。
FileFolder代表所要匯入資料的目錄名稱,配合上面的 [FTP] 活動,目錄名稱為csv。
FileNameVar代表要匯入資料的檔案名稱,設定為file_name,內容存放檔案名稱。
Columns,代表指定的匯入欄位,如下,把想要匯入的欄位事先設定好,如下:
StartRow,起始資料的列數,通常都是0,代表從第1行開始(包括最上面的欄位表頭)
StartColumn,起始資料的行數,通常都是0,代表第1個欄位開始。
EndRow,終止資料的列數,如果要抓到最後,請不要設定。
InputType,這裡選擇Excle。
Step5>在
[匯入Excel]活動下方,貼入[sql插入]活動,用來將陣列變數回寫到指定的資料表中,屬性如下:
RowsVar代表要寫入資料表的變數來源,為一個陣列變數(有多筆),設定來源變數為ftp_rows。
Table代表要寫入資料表的名稱,這裡設定為"客戶資料表"。
Keys代表Table資料表的鍵值欄位,用來檢查重複用的。在此設定為"客戶編號"。
UpdateIfExist設為True時,如果資料已經存在(Keys鍵值已經存在),則會以Update的方式進行資料更新;鍵值不存在則以Insert方式新增。
AutoCommit代表執行本活動後會自動Commit確認交易。
Step6>在
[插入資料表]活動下方,貼入[消息發送]活動,採用Mail的方式通知管理者,告知FTP下載成功,如下:
Step7>在右邊的 [下載失敗]條件活動中,同樣貼入[消息發送]活動,以Mail的方式通知管理者,告知FTP下載失敗,如下:
Step8>接著在上例的FTP 主機上,我們準備了一個CUSTOMERS.xlsx,內容如下:
為了能證實有下載此XLSX檔案並新增到客戶資料表中,可以刪除所有的客戶資料。
Step9>透過【預覽】的Debug來測試,如下:
為了模擬使用者傳送file_name變數,一開始我們可以在右下方輸入file_name='CUSTOMERS.xlsx',接著按下二次【下一步】執行完 [FTP下載],此時傳回值ftp_result應該為空白(有內容通常是錯誤訊息)。
再【下一步】會執行 [匯入Excel] 活動,並將這個CUSTOMERS.xlsx讀入到ftp_rows當中;【下一步】則將 ftp_rows的資料回寫新增到客戶資料表中。最後,透過Mail發送告知管理者,FTP下載並更新成功。
可以再打開 [客戶資料表] 查看剛剛透過FTP下載的資料已更新到資料表中:
Related Topics