• .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上运行, 所以对应的版本显示应该有所不同.

标签: none 阅读量: 3617

添加新评论