UIPath開發要點
1. UI操作容易受到各種意外的干擾,因此應該縮短UI操作階段的總體時間。而為了縮短UI操作階段的總體時間,應該將UI操作儘量放在一起,將後臺的各種操作儘量放在UI操作的前後。例如,現在有一個Assign和兩個Click需要執行,那麼比較推薦的設計是Assign->Click->Click或者Click->Click->Assign,而不是Click->Assign->Click。集中的UI操作也會給人一種“機器人非常高效”的觀感,留下較良好的印象。
2. 為了確保“增加一倍的投入就必須相應提高一倍的效率”,流程的總體設計要儘量將問題轉化為事務式(Transactional)處理的模式。否則事務中的任何一個操作失敗,即認定事務失敗。事務失敗可以中止執行,也可以跳過失敗的事務,繼續執行下一個事務。當增加機器人數量時,只需通過簡單地分配事務,即可達到充分利用機器人效能的目的。
3. 凡是需要人工輸入的環節,就一定會出錯,因此絕對不能信任人工輸入的資料。那麼對於人工輸入的問題,有幾種辦法可以提高穩定性。
a. 對人工輸入進行嚴格約束和校驗,拒絕不符合要求的資料。(不推薦,但有時候不得不這麼幹)
b. 設計時加入一定的彈性以實現容錯的能力。
c. 減少人工輸入的環節,減少人工輸入的資料量。
d. 設法儘可能地為人工輸入進行輔助,比如彈出相關提示,給出格式示例等等。
4. 當需要處理檔案關係時,有幾種辦法可以在檔案之間體現關聯:
a. 用某種命名規則來確保檔案關聯。比如說,有一個Excel檔案為叫小明_總成績.xlsx,而另一個Excel檔案為小明_語文成績.xlsx,這裡檔案的命名規則是“學生姓名_科目成績.xlsx”,那麼可以認為小明_總成績.xlsx和小明_語言成績.xlsx是相關的檔案。
b. 建立一個表格用於儲存檔案關係。這樣檔案可以通過這張表來查詢,不需要特別指定命名規則。比如
學生姓名 總成績檔案 語文成績檔案
小明 AAA.xlsx BBB.xlsx
小紅 CCC.xlsx DDD.xlsx
5. UiPath Studio專案目錄裡的檔案在每次釋出到UiPath Robot時都會相應地新建,因此需要持久化儲存的資料(比如配置檔案)不應該儲存在UiPath Studio專案目錄裡。建議用Get Environment Folder(UiPath.Core.Activities.GetEnvironmentFolder)儲存在某個系統自帶的資料夾下(推薦儲存到MyDocuments)。
6. 機器人往往需要能夠自動登入各種系統,而各種系統往往需要憑據(使用者名稱+密碼)才能登入。可以將登入憑據儲存在Windows自帶的憑據管理器,然後用Get Secure Credential(UiPath.Credentials.Activities.GetSecureCredential)去讀取。需要輸入密碼時不要用Type Into,必須用Type Secure Text。採用Get Secure Credential + Type Secure Text的組合,機器人可以做到全程不接觸密碼明文,相對安全。
7. 使用Get Text或者Get Attribute從網頁上獲取的原始內容應該用Log Message儲存到日誌裡以便於查錯。
8. 在Excel中填入URL會被自動轉化為超連結,但是如果UiPath需要讀取這個URL,那麼需要移除這個超連結,否則會報錯。
9. 注意生產環境與開發、測試環境的差異,容易導致意想不到的異常。也因此,大體上,開發流程所需的時間≈調整穩定性所需的時間≈遷移到新環境測試調整所需的時間。任何環境因素的變化都需要重新測試以確保穩定性。
10. 加入原始碼管理的時候,UiPath Studio裡專案目錄.screenshots下的內容也必須全部加入原始碼管理。
11. 每次執行都需要儲存一個配置檔案的副本,以備查錯。
12. 如果需要建立自定義日誌,流程執行的最初步驟將已存在的"C:\Users\你的使用者名稱\AppData\Local\UiPath\Logs\日期_Execution.log"檔案改掉名字,然後在執行中用Log Message記日誌。UiPath會自動建立新的日誌檔案,然後在執行的最後將這個日誌檔案複製出來即可。通過這種方式可以簡化自定義日誌的工作,而且必要時可以改變日誌級別以獲取更多資訊用於查錯。
13. 流程較長時,可以分割為多個階段來開發,每個階段流程用一個.xaml檔案來處理。分割的原則大體上是,給定機器人一個檔案A,機器人經過階段性的UI或者後臺處理,一定可以產生檔案B。那麼只需要將A的完整路徑作為這個.xaml檔案的輸入引數,而將B的完整路徑作為輸出引數,即可很方便地開發除錯這個流程。當有多人一起協作開發同一個流程時,只要這樣分割為多個小流程,並且詳細約定好中間檔案的各項內容,就可以同時進行。這種方式也稱為“面向介面程式設計”。
14. 當RPA專案團隊有多人開發時,每人負責一個流程的組織模式有可能造成每個流程都趕不完的局面。不如將單個流程劃分成更小的流程,一起協同進行一個流程的開發,這樣團隊在預期的時間內可以完成儘可能多的流程,而不是製造大量完成度參差不齊的流程。特別是,團隊成員可以不需要了解流程的全貌,只瞭解流程的區域性即可,實現流水線式的開發管理。而對流程掌握最全面的成員,可以少承擔一些開發工作,但需要負責不斷地進行整合測試,由這個人來負責交付完整的UiPath Project。
15. 編輯Selector時,要善用相對Selector和部分Selector,例如Anchor Base,Element Scope,Find Relative Element, Get Ancestor。
17. Get Text獲取的資料是UiPath.Core.GenericValue型別,需要輸出為特定格式字串的時候,可以嘗試使用Format Value(UiPath.Core.Activities.FormatValue)。
18. 目前大多數RPA的使用場景只是資料處理領域ETL工作的變種,因此可以儘量參考ETL的設計思想和有益經驗。
19. 每個Activity都必須命名,必要時還須加上Annotation進行解釋說明。引數和變數也是如此。