A2019機器人開發(fā)最佳實踐

本文目的是為開發(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)容或桌面的清理”

例如:

Master Bot 示例

對于任何調(diào)用子Bot的“ Run TaskBot”操作咆蒿,需要指定一個詞典來保存子Bot可能返回的任何值。 至少蚂子,建議任何子Bot都向其調(diào)用的父Bot返回一條消息(例如oStrResult)沃测,以指示是否發(fā)生任何錯誤,并在適用的情況下提供錯誤行號食茎。例如:

子Bot調(diào)用返回值設置樣例

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今缚。

例如:

主核心處理流程Bot樣例

3)子Bot算柳,負責執(zhí)行某一職責的處理步驟。

根據(jù)需要設計這些Bot姓言,以執(zhí)行自動化所需的實際業(yè)務邏輯瞬项。將輸出變量的結果返回到調(diào)用的父機器人(“Main Bot或另一個子Bot),例如oStrResult何荚。 如果處理不成功(發(fā)生錯誤或異常)囱淋,則該值可能包含錯誤消息。例如:

子Bot的處理示例

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文件中有定義港令。

Log配置文件

使用Automation Anywhere中內(nèi)置的LogToFile(記錄到文件)的操作。良好的記錄格式是“Start Time stamp執(zhí)行開始時間戳記”锈颗,“Date-Time stamp日期時間戳記”顷霹,計算機名稱,用戶名击吱,任務名稱和錯誤消息內(nèi)容淋淀。 如果允許只包含一個日志文件,則可以在日志記錄級別(調(diào)試/錯誤/信息/警告)中顯示一列覆醇。所有這些值都應以逗號(朵纷,)分隔,未來可以使用有效的CSV格式的日志文件叫乌,以便于導入或解析柴罐。任何可能包含逗號(徽缚,)的變量/文本憨奸,例如$ Error Details $,都必須使用一對雙引號(“”)進行限定凿试,以避免將該值分成CSV文件中的兩個單獨的列排宰。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市那婉,隨后出現(xiàn)的幾起案子板甘,更是在濱河造成了極大的恐慌,老刑警劉巖详炬,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盐类,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機在跳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門枪萄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人猫妙,你說我怎么就攤上這事瓷翻。” “怎么了割坠?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵齐帚,是天一觀的道長。 經(jīng)常有香客問我彼哼,道長对妄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任敢朱,我火速辦了婚禮饥伊,結果婚禮上,老公的妹妹穿的比我還像新娘蔫饰。我一直安慰自己琅豆,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布篓吁。 她就那樣靜靜地躺著茫因,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杖剪。 梳的紋絲不亂的頭發(fā)上冻押,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音盛嘿,去河邊找鬼洛巢。 笑死,一個胖子當著我的面吹牛次兆,可吹牛的內(nèi)容都是我干的稿茉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼芥炭,長吁一口氣:“原來是場噩夢啊……” “哼漓库!你這毒婦竟也來了?” 一聲冷哼從身側響起园蝠,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤渺蒿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后彪薛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茂装,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡怠蹂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了少态。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褥蚯。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖况增,靈堂內(nèi)的尸體忽然破棺而出赞庶,到底是詐尸還是另有隱情,我是刑警寧澤澳骤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布歧强,位于F島的核電站,受9級特大地震影響为肮,放射性物質(zhì)發(fā)生泄漏摊册。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一颊艳、第九天 我趴在偏房一處隱蔽的房頂上張望茅特。 院中可真熱鬧,春花似錦棋枕、人聲如沸白修。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兵睛。三九已至,卻和暖如春窥浪,著一層夾襖步出監(jiān)牢的瞬間祖很,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工漾脂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留假颇,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓骨稿,卻偏偏與公主長得像笨鸡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子啊终,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345