2021年3月
ASCII 160特殊的空格: 不间断空格
https://blog.csdn.net/lewky_liu/article/details/79353151
不同于ASCII 32, ASCII 160是页面上的
产生的不间断空格, 这个玩意儿如果读到你的字符串里, 你想用普通空格去找是怎么也找不出来的哈哈, 160的16进制是a0
,转义是\xa0
Python 字符转Ascii码
ord('a') # 97
关闭输入法的快捷键Alt+Shift
关闭输入法的快捷键Alt+Shift, 直接切换到英文状态
思科DevNet认证
https://developer.cisco.com/certification/
似乎是一个和CCxx体系对等的认证体系, 价格没找到, 50多美金?
关于Uibot编程语言
坑
- .task作为公共函数库, 似乎只能被当前流程调用,不能跨父子调用
- 在一个task中的全局变量i似乎是有些奇怪的, 在其所在的task X中的funtion A调用i没有问题, 然而在另一个task Y中调用task X的funtion A时, i就会变成未定义状态. 似乎跨task调用function 并不会将task整体运行一遍,而只是截取其中需要运行的function来运行.
- .flow是一个json
- .flow级别的全局变量是所有本flow下的task公用的, 但不能给其他子flow或父flow用.
- flow之间传递值, 就需要将.flow的变量定义为输入或者输出. 输入变量即相当于flow的形参, 输出变量即相当于flow的返回值.但是,要想使flow中的变量生效, 必须运行flow而不是task.如要父flow的参数能传递到子flow,必须从父flow开始运行.
- flow里面的操作是不是ctrl-z的
对默认企业级框架的说明
概述
- 虚线异常导到异常流程快这个功能似乎只有在企业级框架里面才有, 自己编写框架的话是弄不出来虚线的
- 在配置
配置初始化/目标程序初始化/获取新数据
三个阶段发生异常就会直接退出 - 在主业务流程运行时发生异常就会进行按次数重试, 重试从
目标程序初始化
开始
配置初始化
- 企业版需要修改
config.xlsx
的读取方式为从commander中读取. - 流程是
读取config.xlsx->读取并设置logLevel->读取并设置g_iRetryNumber->config.xlsx的内容赋值给全局变量g_dicConfigData
- 从
res\data\config.xlsx
中读取配置. 这个文件已有的默认参数不要修改, sheet名不要修改, 其他流程块会有用的. 不过可以在已有sheet里增加新的参数, 也可以增加新的sheet名. 增加新参数不需要改代码, 增加sheet名需要修改sheetsName
数组 - logLevel和g_iRetryNumber后面直接用, 不要用g_dicConfigData里存的副本了, 因为这儿进行了一些健壮性的处理,比如有没有值啊, 值对不对啊之类
- 截图存储位置还是用
g_dicConfigData["常量设置"]["ExScreenshotsFolderPath"]
吧, 似乎这儿又没有专门给一个短一点儿的变量用了. - 从这个流程快的描述来看, 复杂业务数据不推荐也存储在
config.xlsx
中, 最好另建立文件. 我看似乎也不那么绝对, 如果业务数据不多的话, 放在一个文件里, 用户也比较好管理吧
目标程序初始化
- 一般不需要修改
- 默认的代码就是杀掉
config.xlsx/本地参数/appsName
中的进程 - 进程名是用逗号分隔, 从代码看没有对空格处理, 所以在config.xlsx中写这个参数的时候不要留空格
首次运行判断g_bFirstRun
- 不需要修改
- 在
配置初始化
中赋值True, 在获取新数据
中赋值False, 而由于配置初始化
只运行一次, 意味着这个判断只会有一次为True. 这次为True的目的只是为了在初次运行前获取新数据
重试判断g_bRetryStatus
- 不需要修改
- 在
配置初始化
中赋值False, 在重试计数中按最大重试计数进行翻转. 即: 未达到最大重试次数时为True,并把g_iCount++, 达到了为False并将重试计数器g_iCount清零.
重试计数
- 这个块需要修改, 主要是使能截图上传代码
- 这个块只能通过主执行流程的异常进入
- 默认代码是重试判断和计数的操作
- 有一部分被隐藏的可选代码,是按
config.xlsx["常量设置"]["ExScreenshotsFolderPath"]
的配置路径保存本地截图并上传给commander截图的.If (shotsPath <> "") And (Not IsNull(shotsPath)) Upload.UploadScreenShot("image_"&sRet,shotsPath,True,{"sDescribe":"最后一次重试后的现场截图"}) End If
- 这个Upload.UploadScreenShot函数按其说明是会自动截图并上传的, 其实名字叫ShotScreenAndUpload比较好些吧...
- 在
config.xlsx["常量设置"]["ExScreenshotsFolderPath"]
中写配置路径的\
是不需要转义的,写一个\
就行了 - 重试计数后会进入
目标程序初始化
,目的应该是杀一下app清洁一下运行环境. 根据是否重试,决定再操作一遍还是操作下一组数据
获取新数据
- 这个块是需要修改的
- 主要是从自定义的xlsx文件中读取一行数据, 代码需要补充自定义的xlsx文件名和读取的位置, 以及多条数据读取是不是要循环一下? 要有个静态变量存储一下当前读到那一行了? 当然uibot没有静态变量, 故而又要定义一个全局的了...
objExcelWorkBook = Excel.OpenExcel("",True,"Excel","","") arrayRet = Excel.ReadRow(objExcelWorkBook,"Sheet1","A1") Excel.CloseExcel(objExcelWorkBook,True)
g_dicTransactionItem["TransactionData"] = arrayRet
* 当然我觉得为了读取一行数据就开关一次excel(这么耗费CPU和时间的操作)似乎有些傻, 是我的话就在`配置初始化`里面一次从Excel读取所有数据,然后再进行内存操作, 所以上面这段excel读取代码可以删掉,重写为变量读取代码.
## 是否有数据判断
* **需要修改键值**
如下:
```vb
Not IsNull(g_dicTransactionItem["TransactionData"])
- 其中
TransactionData
是需要修改为实际的键名的, 如出发地
之类的,如果找不到这个键名就认为没有数据 g_dicTransactionItem
这一项在配置初始化/获取新数据
中都会初始化为null. 当然这样看在配置初始化
中再初始化为null显得很多余, 且不说在flow定义全局变量的时候本来就会初始化一次, 这样就至少初始化为null 3次了.
异常处理
- 企业流程需要修改, 添加截图上传操作
- 这个模块只能通过异常进入, 包括
配置初始化/目标程序初始化/获取新数据
三个模块的异常 - 异常处理后的结果就是
流程结束
了
流程结束
- 如果运行完没什么特别要做的可以不用修改
- 不过这儿的注释里有几个非常重要和有趣的系统变量! 尤其是有版本号! 似乎系统变量/常量都是
$
开头的$BlockInput: 上一个实线连接的流程块的Return值,或者上一个虚线连接的流程块抛出的异常 $UB.InstallPath: UiBot的安装路径 $UB.Version: UiBot的版本信息,将会得到一个Dict变量,里面包含不同的字段,标明版本信息的不同组成部分。今后还会扩充 $Flow.WorkPath:当前运行的流程或者子流程的所在路径。如果是流程,就是流程所在路径。如果是子流程,就是子流程所在路径。 $Flow.ElaspedTime:当前运行的流程或者子流程已经运行的时间,以毫秒为单位。比如 $Flow.ElaspedTime 的值为100,代表从当前流程开始运行,到目前为止已经过了100毫秒。
- 版本$UB.Version的值举例:
{ "InstructionBits" : 64, "Product" : "UiBot Creator Community 5.5.0" }
因为能在worker和store上运行, 所以对应的版本显示应该有所不同.