本文目的是為開發(fā)者提供Automation Anywhere A2019 Bot的開發(fā)指南克饶,開發(fā)標準和最佳實踐唆铐。?
1论笔、不要重復自己的代碼 Don’t Repeat Yourself Principle (DRY)
該原則的目的是減少Bot中代碼的重復匕荸,避免在Bot中創(chuàng)建重復的一組動作或邏輯,會帶來代碼維護的復雜度寺谤。例如以下示例:
如果要將以上流程中的Excel處理3次,最簡單的方法就是將這部分代碼拷貝3次吮播,這雖然有助于快速的實現(xiàn)自動化变屁,但是這首先會加長代碼的行數(shù),造成閱讀障礙意狠;其次粟关,會給后續(xù)的代碼維護造成困然,如果有規(guī)則修改环戈,就需要修改3處闷板,很容易造成遺失。
正確的解決方法是設置子機器人院塞,將這些重復執(zhí)行的動作放入某個子Bot里遮晚,外面由父Bot調(diào)用3次這個子Bot。這樣的代碼看起來拦止,思路更加清晰县遣,而且這個子Bot可以被其他的機器人流程來復用。
在流程設計時汹族,一類Bot是高內(nèi)聚的艺玲,負責處理可復用步驟的,另一類Bot是負責串接流程的鞠抑,串接起這些子Bot饭聚。
Bot在設計上應滿足“單一職責”原則,就是每個Bot應該有獨立專業(yè)的職責搁拙;滿足“高內(nèi)聚松耦合”原則秒梳,Bot之間盡量不要產(chǎn)生耦合法绵,即一個Bot的修改會影響另一個Bot。
2酪碘、機器人的命名規(guī)范
Bot的命名采用PascalCasing命名方式朋譬,即每個單詞的首字母大寫,例如PrintUtility兴垦,Bot的命名盡量簡單明了徙赢,為了表達執(zhí)行順序,名稱前綴可以加上編號01_探越。
被啟動執(zhí)行主流程的Bot狡赐,通常叫做MasterBot。只能被其他Bot調(diào)用的Bot钦幔,可以命名為“Utility” 或“Helper”枕屉,例如FileSaveHelper.bot。
3鲤氢、機器人設計模式
1) 主任務Master Bot搀擂,可通過Control Room或API進行調(diào)度來啟動該流程。
????TRY部分中的主要流程步驟可能包括以下內(nèi)容:
????????流程的初始化設置
????????驗證配置是否成功(例如卷玉,是否存在所有必需的文件夾或文件哨颂?是否根據(jù)需要填充了初始變量值?)
????????執(zhí)行預處理“內(nèi)容或桌面的清理”
????????調(diào)用Main Bot(主核心機器人)執(zhí)行流程的業(yè)務邏輯
????在外部TRY / CATCH塊的FINALLY部分中相种,可以執(zhí)行后處理“內(nèi)容或桌面的清理”
例如:
對于任何調(diào)用子Bot的“ Run TaskBot”操作咆蒿,需要指定一個詞典來保存子Bot可能返回的任何值。 至少蚂子,建議任何子Bot都向其調(diào)用的父Bot返回一條消息(例如oStrResult)沃测,以指示是否發(fā)生任何錯誤,并在適用的情況下提供錯誤行號食茎。例如:
2) 主核心任務Main Bot蒂破,負責執(zhí)行和保障業(yè)務流程的處理邏輯。一些簡單流程也可以直接采用Master Bot來調(diào)用子Bot的方式别渔,減少一層的調(diào)用附迷。
????TRY部分中的主要流程步驟包括以下內(nèi)容:
????????驗證任何輸入(例如,來自MASTER的輸入變量值等)
????????執(zhí)行子Bot哎媚。 執(zhí)行子Bot后喇伯,請驗證結果(例如oStrResult,#1代表失敗拨与,則運行其他子Bot稻据,#2是否有其他意義?)
????????驗證任何的輸出結果
????????確保根據(jù)MAIN的執(zhí)行情況填充所有“輸出”變量值买喧,以返回到MASTER(例如捻悯,將值分配給oStrResult)
????在CATCH部分中匆赃,記錄錯誤,并確保填充所有“輸出”變量值(例如oStrResult)以傳回MASTER今缚。
例如:
3)子Bot算柳,負責執(zhí)行某一職責的處理步驟。
根據(jù)需要設計這些Bot姓言,以執(zhí)行自動化所需的實際業(yè)務邏輯瞬项。將輸出變量的結果返回到調(diào)用的父機器人(“Main Bot或另一個子Bot),例如oStrResult何荚。 如果處理不成功(發(fā)生錯誤或異常)囱淋,則該值可能包含錯誤消息。例如:
4兽泣、依賴關系
某個Bot所操作的文件绎橘,應上傳到控制中心Control Room胁孙,在機器人導入或?qū)С鲞^程中唠倦,該文件都會作為依賴項進行檢查。建議將依賴項文件上傳到該流程對應的用例文件夾中涮较,便于使用和管理稠鼻。
5、設計考慮到重用性和可測試性
在設計每個獨立的Bot時狂票,需要考慮這個Bot是可以單獨被測試的候齿,而不會影響B(tài)ot。如果一個Bot設計為松耦合的闺属,它在執(zhí)行的時候慌盯,則無需為其提供任何輸入信息,例如將URL掂器,用戶名和密碼放入自動化代碼中進行測試亚皂,然后可以獨立測試該任務。這可以使自動化的維護和部署更加容易国瓮。
6灭必、使用"步驟"
步驟Step是A2019中一個特性,可以把一組關聯(lián)的動作組合成一個步驟乃摹,來提高代碼的可讀性禁漓。
在代碼中自由使用“步驟”操作,將相關動作進行分組顯示孵睬。步驟應包含動作的標題播歼,并盡量限制在幾個字以內(nèi)。 如果需要更多詳細信息掰读,可以利用“注釋”信息荚恶。步驟的標題有具有意義箱沦,避免使用非描述性標題,例如“步驟1”毫别。在每個Bot中熄捍,頂層處理步驟可以使用大寫字母,子步驟使用大小寫混合廓潜。 此外抵皱,標題可以包含解決方案/技術設計文檔中處理步驟的參考編號。 這些步驟不僅提高了可讀性辩蛋,而且有助于確保所開發(fā)的Bot與解決方案設計之間的一致性呻畸。
7、使用“注釋”
機器人的維護是非车吭海花費時間的伤为,良好的注釋是提速閱讀代碼的一種最佳手段。
采用多行的注釋据途,說明一段處理邏輯的描述和定義绞愚,例如
采用單行的注釋,說明一些假設颖医,問題和邏輯說明位衩,例如
注釋需要具有意義,不能寫的過于簡單熔萧,無法讓其他人讀懂糖驴。
在Bot投產(chǎn)前,請務必刪除已經(jīng)禁用的命令佛致。
嘗試將注釋集中于操作塊的原因和作用贮缕,而不是操作方法。 嘗試幫助讀者了解為什么選擇某種解決方案或方法以及您要實現(xiàn)的目標俺榆。 如果適用感昼,還應提及可能的替代方案。
8肋演、“變量”定義
使用camelCasing的方式來定義變量抑诸,即首單詞的首字母小寫,例如backgroundColor爹殊。
避免使用單字符變量名蜕乡。 例如,切勿使用“ i”或“ x”梗夸。 讀者應該始終能夠查看變量名并了解其用途层玲,例如pStrEmployeeFirstName或pNumSocialSecurityNumber。
除非要定義常量值,否則避免在“創(chuàng)建變量”對話框中初始化變量辛块。 而是在適當?shù)牟襟E下使用“分配動作”來初始化變量(例如畔派,字符串,數(shù)字等)润绵。
變量定義中應定義描述线椰。
可以采用如下的范式來表達變量名稱。<type/scope indicator><data type><variable name>
<type/scope indicator>的示例如下:
- p = local variable(本地變量尘盼,既不是輸入或輸出)
- i = input variable(輸入)
- o = output variable(輸出)
- io = input and output variable(輸入輸出)
- c = constant(常量)
<data type>的示例如下:
- Str = String
- Num = Number
- Table = Table
- Dict = Dictionary
- List = List
- Date = Date Time
- Bool = Boolean
- File = File
- Rec = Record
- Win = Window
- Any = Any
一些變量命名的示例:
- iStrAuditLogPath – 用于輸入的審計日志存儲路徑的字符串
- oNumReturnValue - 數(shù)值類型的返回值
- pRecExcelRow – 本地處理的一個Excel記錄行變量
- pBoolFileExists –?本地處理的文件是否存在的標志變量(布爾類型)
- ioStrStatus – 作為輸入和輸出的表示狀態(tài)的字符串
- cStrNull – 代表了空值的字符串(通常用于不同變量的比對)
這種標準可以快速找到某個變量憨愉,例如
標識性變量,可以用Is, Has, Can, Allows或Supports卿捎,例如pBoolIsAvailable, pBoolIsNotAvailable, pBoolHasBeenUpdated配紫。
9、關于“事務”Session
可以將“Session”視為外部文件/數(shù)據(jù)的引用午阵,例如Excel Basic / Advanced:Open躺孝,XML:Start session等,一旦在此類操作中定義了該事務的名稱底桂,則后續(xù)操作(例如植袍,獲取單元格)中訪問相同的事務名。 因此戚啥,擁有唯一且有意義的事務名稱是重要的奋单。
不要使用“默認”Default作為事務名稱锉试。 可以使用“變量”代替“會話名稱”猫十。
確保在流程處理結束以后,關閉所有打開的事務呆盖,以釋放對外部數(shù)據(jù)源的鎖定/保持拖云。
10、文件目錄設計
通秤τ郑可以將目錄設為宙项,開發(fā),測試和生產(chǎn)三個文件夾株扛,里面包括輸入尤筐、輸出、日志洞就。例如:
可以專門設定一個標識環(huán)境的變量盆繁,如iStrEnvironment,建立一個GlobalSettings的Bot旬蟋,初始化這些環(huán)境變量油昂。
11、不同動作的準確性和穩(wěn)定性比較
操作最準確的是Record(記錄器-捕捉),AISense冕碟,Keystrokes(模擬擊鍵)拦惋,PDF,Clipboard(剪貼板)安寺,Terminal Emulator(終端仿真器)厕妖,Database(數(shù)據(jù)庫)。
其次準確的是Image Recognition(圖像識別)挑庶,OCR叹放,Wait for Screen Change(等待-屏幕變化)。
最差的是Mouse Clicks(鼠標點擊)挠羔,Mouse?Moves(鼠標移動)井仰,Mouse?Scroll(鼠標滾動),Co-ordinates(坐標)破加。
12俱恶、使用通配符*
當對于選定的窗口和標題,文件名稱等范舀,如果出現(xiàn)不確定時合是,可以采用通配符*來替代。比如打開一個word文檔锭环,但是由于word的名稱不一定聪全,但是一定以word結尾,所以可以將窗口名稱寫成“* - word”辅辩。
13难礼、Record(記錄器-捕捉)的使用
老的AA用戶應該了解,Record的使用方式和AAE中Object Cloning是一樣的玫锋。
如果是網(wǎng)頁的抓取蛾茉,抓取獲取回來的屬性通常為Name, Class, Type, HTML ID, DOMXPath等,由于A2019的查詢機制是下次會按照這些屬性查詢撩鹿,那么必須要找那些固定不變的變量谦炬,比如DOMXPath,Type节沦,而不建議勾選Path(可能會改變)键思。
在某個對象Set Text時,由于輸入過快可能會大致錯誤甫贯,所以set text需要加適當?shù)膁elay(延時)吼鳞。
14、日志記錄Logging
日志必須要適合于人的閱讀和分析获搏。日志文件有兩個接受者赖条,是“人”和“機器”失乾。如果接收者是人,可能是為了調(diào)試纬乍,分析或?qū)ふ义e誤的開發(fā)人員碱茁。也可能是分析師,查找審計信息或績效信息仿贬。無論哪種情況纽竣,日志都應易于查看和理解,并且可以使用其他工具進行解析或?qū)隕xcel茧泪。那么就需要日志標準蜓氨,以確保正確的運行日志記錄。
按照Log4j的標準队伟,日志的記錄可以大約分為五種不同類型的消息穴吹。根據(jù)類型,會進入單獨的日志文件嗜侮,日志文件的配置文件在以下的XML文件中有定義港令。
使用Automation Anywhere中內(nèi)置的LogToFile(記錄到文件)的操作。良好的記錄格式是“Start Time stamp執(zhí)行開始時間戳記”锈颗,“Date-Time stamp日期時間戳記”顷霹,計算機名稱,用戶名击吱,任務名稱和錯誤消息內(nèi)容淋淀。 如果允許只包含一個日志文件,則可以在日志記錄級別(調(diào)試/錯誤/信息/警告)中顯示一列覆醇。所有這些值都應以逗號(朵纷,)分隔,未來可以使用有效的CSV格式的日志文件叫乌,以便于導入或解析柴罐。任何可能包含逗號(徽缚,)的變量/文本憨奸,例如$ Error Details $,都必須使用一對雙引號(“”)進行限定凿试,以避免將該值分成CSV文件中的兩個單獨的列排宰。