目录
基础功能
开发机器人需准备以下东西,不管是练习还是开发都需要,可以提前准备
应用 | 说明 |
---|---|
uipath | 2019学习版,全网都没有19以上的,官网可以弄到24版的60天试用期,但没必要,两个版本相差太多,本文主要介绍19版 |
mysql | 数据库,可以安装新的,也可以使用现有连接;有的用就行,新的可以在甲骨文官网下载 |
navicat | 数据库可视化应用,一样的找学习版 |
vscode | 代码编辑器,微软官网可以下载,应用本身是开源免费的 |
chrome | 谷歌浏览器,也可以在谷歌官网下载 |
网页操作
想对网页操作首先推荐使用chrome浏览器,需要安装扩展
扩展安装成功后,可以在这里看见
在后续使用过程中,可能会出现uipath无法操作浏览器的情况,或者正确的元素无法验证成功等怪异的问题;此类情况大概率是uipath的浏览器扩展出现异常导致的,可以尝试关闭扩展->刷新浏览器->开启扩展->刷新浏览器
数据库
安装数据库
进入官网,选择数据库版本,推荐使用5.7.xx版本,点击download下载程序包
如果有可用的数据库连接,不需要安装数据库的请跳过此步骤
详细安装教程请查阅其他博主的教程《windows环境下msi方式安装Mysql》
完成MySQL安装后,查看数据库,还需要一个可视化工具,否则就只能在cmd窗口操作数据库,可视性不高,操作也不便捷
MySQL的可视化工具推荐使用Navicat Premium,下载和安装方法:链接 不会请参考十年前如何下单机游戏
打开navicat后新建mysql连接
连接完成后就可以看见可视化的数据库了
安装ODBC
uipath想要连上数据库,必须配置odbc,配置好后可以使用odbc储存的账号密码,uipath连接时可以不配置账号
根据自己的MySQL版本安装,MySQL网上有很详细的安装教程,这里不过多介绍,注意uipath只支持32位ODBC!!!
设置ODBC
打开ODBC开始设置,有的操作系统会自带64位的odbc,一定要使用刚才安装的32位odbc,注意不要选错
在用户DSN中添加数据源
选择Unicode编码的ODBC源
填写红框内容,测试出现Connection Successful代表测试成功,不成功则可能是密码不对,没有问题便可以直接保存
安装sql扩展包
打开流程,选择管理扩展包进行安装
此步骤需要连接公网,只有内网可以复制已安装过的电脑下的C:/Users/你的用户名/.nuget文件夹
点击保存后开始下载,速度很慢等等就行
连接数据库
在流程中添加选择连接数据库
再配置连接
测试连接是否可用
下面出现绿色succeeded则连接成功了
基础操作
新建流程
一般来说,新建空白流程就行,其余的流程会自带一些画布,可能对自己需要开发的流程有出入
画布
画布是每个流程的基础,在创建好流程之后拖入状态机即可创建一个空白画布
也可以使用流程图作为画布,但是相较于状态机,还是状态机自由一点
初始状态下的画布会报错,是因为以状态机作为画布的时候需要这个画布中的流程有最终状态流程块或每个状态都需要有下一步,也就是初始化的画布不完整
流程块
状态机中只有状态与最终状态两个流程块
两个流程块里面都可以放入组件,区别在于最终状态没有下一步连线,而状态机必须有至少一条通往下一个状态的连线
流程判断
每一个状态都可以拉取更多连线来进行流程上的判断
当流程只有一条连接下一个流程的连线时,不需要添加连线的判断
当流程出现一条以上的连线时,所有连线都需要设置判断条件
冷知识:一个状态机最多可以拉94条线,当然一般用不上那么多,能用上说明你在堆屎山,你的流程需要进一步优化
!!!特别注意!!!
如果你有两条线,并且他们的条件是连线一:a="周一"和连线二:a="周二",那么请确保a只会出现周一或周二,如果a="周三"的话,两条线的条件均不满足,流程将会卡在两条线之间进入死循环
变量/参数/导入
创建变量
变量需要指定生效范围,而参数是全局生效,但参数的作用更多是函数数据传递,变量与参数混用容易出现问题,并且参数在调试时是不可见的,在非必要时尽量使用变量存储数据
由此处创建变量,创建变量的同时需要指定变量的类型和作用域
创建参数
参数的作用域是全局的,请勿将参数当作全局变量使用!!!与变量不同,参数需要设置使用方向,输入还是输出,输入方向的参数无法写入新的数据,并且参数在流程调试时是不可见的,在非必要的情况下,优先考虑使用变量。
参数更多是起到函数中的input和return的作用的
导入
导入类似于python的import,也有点像环境变量,下面是两个比较常用的导入命名空间
- Newtonsoft.Json
导入后可以通过表达式将字符串转为datatable,表达式为:
JsonConvert.DeserializeObject(of DataTable)(字符串变量) - System.Text.RegularExpressions
导入后可以更加便捷地使用正则,未导入时正则表达式为:
System.Text.RegularExpressions.Regex.Match("abc123","\d{3}").ToString
导入后便可简写为:Regex.Match("abc123","\d{3}").ToString
作用范围
作用范围视情况决定,如图我创建了一个a变量,并指定他的作用范围是序列二,那么序列一是无法访问这个序列二中的a变量的
赋值
赋值要求左右类型相同,变量是什么类型,右侧的数据则是什么类型
let a = {}
a = "test"
// 错误示范
数据库
连接
命令:连接到数据库
命令位置
命令ui
命令属性
属性中只需要对连接的返回结果赋值,将变量名填入【输出->数据库连接】即可,变量的作用域一般为全局,一次连接可供后续使用,变量类型为UiPath.Database.DatabaseConnection
数据库连接在之前的【基础功能->数据库->4.连接数据库】中已经讲过了,这里不再赘述
增删改
命令:运行命令
特点:不支持查询命令,无法返回查询结果,只能返回影响条数
命令位置
命令ui
命令属性
需填写以下数据
1.输入
SQL命令(必填
参数(选填
2.连接配置
现有连接(必填
现有连接直接填入【数据库连接】输出的变量即可
SQL命令中需要"英文半角双引号"注明这是字符串,SQL的命令教程请移步这里
SQL命令下方参数非常重要,若想将下图中的id替换为变量,则需要使用?代替id的值
替换为问号后,开始设置参数,参数名称只提供方便开发者记忆的功能,没有SQL是id 参数就必须是id这种说法,问号在SQL语句中第几次出现,就对应从上向下第几个参数
查
命令:运行查询
特点:只能运行查询命令(也许),能返回查询到的结果
命令位置
命令ui
命令属性
除了需要使用变量储存输出结果,其余和增删改命令完全一致
变量类型为System.Data.DataTable
浏览器
执行js
执行js作用域很广,因为uipath是拖拽的方式编写流程,复杂的逻辑使用拖拽可视化编辑可能会显得流程很臃肿,故而复杂的数据处理逻辑可以通过执行js来实现;一些uipath难以实现的浏览器操作也可以使用js实现,比如增加或删除HTML结构
uipath还可以运行vb.net代码块,这个语言太过冷门,还是建议使用js
执行js除了目标以外,有3个重要属性,属性类型都要求是字符串
脚本代码(必填废话)因为是字符串类型,uipath把双引号使用掉了,编写的js脚本中不能含有双引号
function(element,input){
// element和input是必填参数,element是uipath执行js所需的,有就行了;input是输入参数,参数内容一定是字符串,但可以通过js转换得到其他格式的入参
var output
// input传入数组,uipath输入参数示例值:"123,125,236,45,467"
var arr = input.split(',')
console.log(arr)
// input传入字典,uipath输入参数示例值:"target:test,nbr:153,id:1"
var arr = input.split(','),dic = {},cut
arr.forEach(v=>{
cut = v.split(':')
dic[cut[0]] = cut[1]
})
console.log(dic)
// ruturn会将结果放入脚本输出,但一定要确保output是字符串,否则得到的结果会是空
return output
}
// 不需要输入输出的话可以直接放入js命令
document.querySelect('button.putoff').click()
举个uipath难以实现的例子,uipath的元素操作无法点击confirm()的确定,元素选择器直接无法选中,出现这个弹窗后浏览器中的元素都是冻结状态无法继续操作
这种情况可以用uipath执行下面的js,向网页的DOM注入新的confirm函数,覆盖掉原来的confirm功能后,uipath便不再需要点击这个确定了
function(){
var n = document.createElement('script')
n.innerHTML = `
function confirm (e){
console.log(e)
}
`
document.body.append(n)
console.log('deconfirm ---------------------')
}
异步js
js调用接口、大量点击操作等功能,都需要一定的执行时间,这种需要等待的情况一般都通过异步函数实现
uipath执行js是不会等待异步js执行完毕的,想要实现等待异步js稍微有点麻烦,以下是其中一种方法的思路
function(element,input){
function sleep(time){
return new Promise((resolve)=>setTimeout(resolve,time))
}// 异步等待函数
!async function(){
console.log('进入js,等待10秒')
await sleep(10000)
console.log('等待结束')
!function(){
var d = document.createElement('div')
d.id = 'uipath_wait_sync_js'
d.onclick = function(){
this.remove()
}
document.body.append(d)
}() //在异步函数执行完毕后,向body中插入一个div,点击div后移除此div;uipath外部再做一个循环点击,点击成功后跳出循环,即可实现异步等待
}()
return
}
此案例执行异步js后马上进入循环,循环中判断id为uipath_wait_sync_js是否存在,并以此元素不存在作为循环条件
当异步函数执行完毕后,js创建uipath_wait_sync_js元素
此时循环中的存在元素返回值为true
满足if条件,uipath点击后元素会移除自身
循环不再满足条件,退出循环,等待完毕
界面元素
关于页面操作的组件基本上都有以下属性
出错时继续:可填入布尔值或布尔变量,默认是false,是true时会忽略因元素不存在导致的错误
在此之前、后延时:以毫秒为单位,属性的功能就是字面意思,执行之前等待,执行之后等待
显示名称:组件在画布中的名称,建议每个组件都修改为所对应实现的功能,可便于查阅流程,功能类似于注释
超时(毫秒):尝试寻找元素的时间,在此时间内组件会一直尝试对元素执行操作,若超出时间还是没有操作成功,则组件会报错,此时如果出错时继续是true,那么则会忽略异常并开始执行下一个组件,此属性的默认超时时间是30000(30秒)
元素定位
元素定位是网页操作中的基础,并且想要熟练运用,必须掌握css选择器,也必须知道html的基本知识,css和html可以看看菜鸟教程,链接放下面了
CSS 选择器 | 菜鸟教程https://www.runoob.com/cssref/css-selectors.html
HTML 教程 | 菜鸟教程https://www.runoob.com/html/html-tutorial.html
元素定位总共有三种选择器方法定位,三种选择器相辅相成,可以独立使用,也可以混合使用
默认选择器
uipath的默认选择器,拖入元素操作组件后点击指明在屏幕上则是默认选择器定位,定位完成后会以缩略图替换指明在屏幕上
选择完成后需要点出 选取器编辑器 来验证选取器是否可用
注意:以下几种情况选取器不能直接使用
<html app='chrome.exe' title='QQ邮箱 - 收件箱' />
<webctrl id='ui-id-96' tag='A' /><!-- id是自动递增的,不同的加载顺序会导致id不同 -->
-----------------------------------------------------------------------------------------
<html app='chrome.exe' title='QQ邮箱 - 收件箱' />
<webctrl parentid='ui-id-54' tag='A' /><!-- parentid和id同理 -->
-----------------------------------------------------------------------------------------
<html app='chrome.exe' title='QQ邮箱 - 收件箱' />
<webctrl class='block url_link' tag='A' idx='3' /><!-- idx的出现说明满足这个选取器条件的元素有复数个,尽量避免使用含有idx的选取器 -->
-----------------------------------------------------------------------------------------
<html app='chrome.exe' title='QQ邮箱 - 收件箱' />
<webctrl css-selector='body>div>div>div>div>a' tag='A' /><!-- css-selector是css选择器,按照规范写出的css选择是可以用的,但这种从body开始的层级选择器是不能使用的,某些情况下页面的层级是会发生变化的 -->
-----------------------------------------------------------------------------------------
<html app='chrome.exe' title='QQ邮箱 - 收件箱' />
<webctrl aaname='发送邮件' tag='A' /><!-- aaname和innerText是一样的,但是极低概率下aaname会出现异常,导致元素失效,尽量把aaname替换为innerText -->
用户界面探测器
默认选择器选出的元素若是无法使用,则需要点击在用户界面探测器中打开进行深度编辑
编辑器中的最后一条是目标元素,目标元素的上方则是父级,上上方则是父级的父级,以此类推直到html整体框架结束
点击选取器某一条后,右侧会提供对应元素的属性,可供勾选;一定是先点击左侧选取器,再设置右侧属性,一般情况下只勾上innertext、class、tag即可
若是勾上innertext、class、tag后出现idx,则需要向上定位父级,父级同样只勾选innertext、class、tag,当然固定id(纯英文id)是可以使用的,若还是不行则一直向上查找
用户界面探测器还有一个锚点功能,通过锚定关联元素也可以快速定位
添加锚点后下方会多出锚点元素
css选择器
划重点,css选择器相对于uipath原生的两个选择器而言是最自由的,选择器的规则完全遵循css选择器规则,使用方法则是在uipath选择器中直接加入css-selector
如何确定css选择器
通过浏览器F12控制台确定,可在控制台使用js代码:document.querySelector()或document.querySelectorAll()来确定选择器内容,确定好之后直接向uipath的css-selector粘入js代码括号中的内容即可
以下是常用的css选择器(搬的菜鸟教程)
选择器 | 示例 | 示例说明 |
---|---|---|
.class | .intro | 选择所有class="intro"的元素 |
#id | #firstname | 选择所有id="firstname"的元素 |
element | p | 选择所有<p>元素 |
element.class | p.hometown | 选择所有 class="hometown" 的 <p> 元素 |
element element | div p | 选择<div>元素内的所有<p>元素 |
element>element | div>p | 选择所有父级是 <div> 元素的 <p> 元素 |
element+element | div+p | 选择所有紧跟在 <div> 元素之后的第一个 <p> 元素 |
[attribute] | [target] | 选择所有带有target属性元素 |
[attribute^=value] | a[src^="https"] | 选择每一个src属性的值以"https"开头的元素 |
[attribute$=value] | a[src$=".pdf"] | 选择每一个src属性的值以".pdf"结尾的元素 |
[attribute*=value] | a[src*="runoob"] | 选择每一个src属性的值包含子字符串"runoob"的元素 |
这些选择器可以自由搭配,效果如下,这个选择器同时使用了标签、类、id、属性选择器,选择了一个标签是div,类名是blankBlock,id是queryBox,标签中的style属性包含display:block;的元素
document.querySelector(`div.blankBlock#queryBox[style*='display:block;']`)
这个例子比较复杂,平常使用中大多是几个标签加类、标签加id或者标签加属性来选择
document.querySelector(`div.blankBlock div#queryBox div[style*='display:block;']`)
document.querySelector(`div.blankBlock>div#queryBox>div[style*='display:block;']`)
尽管这几个例子的css选择器非常相似,但他们指向的元素却不是同一个
<!-- 示例一指出的元素 -->
<div id="queryBox" class="blankBlock" style="dispaly:block;"></div>
<!-- 示例二指出的元素 -->
<div class="blankBlock">
...
<div id="queryBox">
...
<div style="dispaly:block;"></div>
</div>
</div>
<!-- 示例三指出的元素 -->
<div class="blankBlock">
<div id="queryBox">
<div style="dispaly:block;"></div>
</div>
</div>
使用变量定位
除了提前确认好的元素之外,开发过程中我们也容易遇到运行流程后才能确定的点击目标,此时我们需要向选择器中加入变量,有两种方法
第一种是通过+拼接字符串:删除选取器的一个单引号后,组件会报错,此时再点击选取器旁边的三个点,选取器就会变成文本编辑器,可以直接在文本编辑器中编辑文本,因为是字符串,所以只需要将字符串与变量拼接起来即可
第二种是通过{}拼接字符串
这种方法需要先打开选择器,将需要设为变量的字符串替换为{{}},再将变量放入括号中间即可
单击双击
单击双击都可以通过单击组件实现
单击组件的可选属性
单击类型
CLICK_SING ##单击
CLICK_DOUBLE ##双击
CLICK_DOWN ##按下
CLICK_UP ##弹起
鼠标键
BTN_LEFT ## 左键
BTN_RIGHT ## 右键
BTN_MIDDLE ## 中键
发送窗口消息:勾选后由模拟鼠标移动点击变更为后台操作,点击时会将目标窗口置顶
模拟单击:勾选后是后台操作,大部分情况下都勾这个
模拟单击这个单选应该是翻译背锅,勾了是后台,不勾是模拟,很反直觉
获取文本
通过此组件可获取浏览器中的文本,并将其存入变量中
获取文本可用属性
输出:填入变量即可将获取到的文本存入其中,变量必须是字符串类型
输入文本
通过此组件可向浏览器中的输入框中填写文本
输入文本可用属性
输入:只支持字符串,将输入的内容放入对应目标的功能
获取表单
此组件可以批量获取页面上的文本数据
点击下一步后在页面上选择数据
此时会有两种情况,如果目标元素是tabel,那么将会出现如下提示,点击是即可抓取整个tabel
点击否,或者目标元素不是tabel则会出现下一步操作,此时需要点击下一步后在页面上指出同级的元素,如以下html所示,数据一与数据二为同级元素,数据三与数据一、数据二都没有同级关系
<div>
<div>
<h1>标题一</h1>
<span>数据一</span>
</div>
<div>
<h1>标题二</h1>
<span>数据二</span>
</div>
<h1>标题三</h1>
<span>数据三</span>
</div>
选择第二个元素之后,可以自定义列名,建议每次抓取都自行定义一下,便于后期从dataTable中取值
点击下一步后,可以在编辑数据定义中自定义抓取数据
<extract>
<column exact="1" name="Column1" attr="text"><!-- name定义列名,可以复制整个column标签来快速选择第二列数据 -->
<webctrl tag="div" class="tf no" idx="1"/>
<webctrl tag="u" class="black tt " idx="1"/><!-- webctrl是元素选取器,在复制时通过修改webctrl改变选择的列 -->
</column>
</extract>
<extract>
<row exact="1">
<webctrl tag="table" class="i M"/>
<webctrl tag="tbody" idx="1"/>
</row>
<column exact="1" name="Column1" attr="text">
<webctrl tag="div" class="tf no" idx="1"/>
<webctrl tag="u" class="black tt " idx="1"/>
</column>
<column exact="1" name="Column2" attr="text">
<webctrl tag="div" class="tf no" idx="1"/>
<webctrl tag="u" class="black tt " idx="2"/>
</column>
</extract>
<!-- 复制column示例,粘贴后需自行修改webctrl与name的值,并增加row标签 -->
复制列之后的示例,当然也可以直接通过提取相关数据来抓取更多的列,数据选择完毕后点击完成即可
系统
对话框
powerShell
基础功能
流程跳转
uipath的流程讲解比较抽象,这里就用代码示例,实现逻辑是一样的,流程跳转大致可以理解为:在if中通过return提前终止或跳过当前代码块的功能
!function(){
var a = Math.rand()
if(a > 0.5){
console.log('a>0.5')
return
}
a + Math.rand()
console.log('a增加后为',a)
return
}()
然而uipath是不支持这个功能的,大部分情况下,都会使用try+throw来实现
try {
!function(){
var a = Math.rand()
if(a > 0.5){
console.log('a>0.5')
throw
}
a + Math.rand()
console.log('a增加后为',a)
throw
}()
} catch (error) {
console.log(error)
}
可视化示例,通过检查false这个组件实现throw的功能
计次循环
同上,uipath没有这样的计次循环的功能
for(var i=0; i<10; i++){
console.log(i)
}
想要实现计次循环无非就两种方法
for(var i of [1,2,3,4,5,6,7,8,9,10]){
console.log(i)
}
var i = 0
while (i<10) {
i ++
console.log(i)
}
函数
uipath中的函数是工作流,选中流程中的组件后,按右键创建
函数的数据传输通过参数实现,参数需要选择是输入还是输出
创建好函数和函数的参数后,可在此处向流程中拖入函数
点击导入参数,可以快速初始化参数列表
转义
uipath中特殊情况下需要对字符串转义,比如判断等于这个文本:判断文本"测试",文本自带了双引号,想要判断则需要转义:"判断文本"+chr(34)+"测试"+chr(34) ,uipath的转义使用的是ASCII码
以下是常用的转义
ASCII码 | 键值 |
chr(9) | Tab缩进 |
chr(10) | 换行 |
chr(13) | 回车 |
chr(32) | 空格 |
chr(34) | 双引号 |
chr(39) | 单引号 |
chr(46) | . |
chr(47) | / |
chr(96) | ` |
表达式
uipath几乎所有可以打字的组件都可以使用表达式,前提是表达式的最终结果必须和组件一致
可以放入表达式的组件:
几乎所有可以填入文本的地方都可以放入表达式
常用的表达式清单如下
表达式 | 示例 | 说明 |
.ToString | int.ToString | 转为文本,int、boolean可以直接转为字符串 |
.Contains() | str.Contains("1") | 检查str中是否包含"1",返回boolean |
.Count | row.Count | 作用于row时则返回row中object的数量,作用于str则返回str的长度 |
.Length | str.Length | 与count效果类似 |
.Split() | str.Split(","c) | 使用","分割str,split的参数是char,所以需要在双引号后面加c |
.StartsWith | str.StartsWith("1") | 用于检测str是否以"1"开头,返回boolean |
.EndsWith | str.EndsWith("1") | 同startswith,判断结尾 |
.Replace | str.Replace("1","2") | 将str中的"1"替换为"2" |
.Trim | str.Trim("1"c) | 参数是char,删除str中的"1" |
.TrimEnd | str.TrimEnd("1"c) | 同上,删结尾 |
.TrimStart | str.TrimStart("1"c) | 同上,删开头 |
.Select | datatable.select("co1 = '123' ") | 查找datatable中co1列等于"123"的行,返回结果是row |
Regex.Math | Regex.Math(str,"\d") | 正则表达式,返回str中的正则匹配结果,使用前需先在导入空间导入System.Text.RegularExpressions |
JsonConvert.DeserializeObject | JsonConvert.DeserializeObject(of DataTable)(str) | 将str转为datatable,str必须是json字符串才能成功转换,使用前需先在导入空间导入Newtonsoft.Json |
常用变量
变量含义
一、什么是变量?
变量就是可以变化的量,量指的是事物的状态,比如人的年龄、性别,游戏角色的等级、金钱等等
二、为什么要有变量?
为了让计算机能够像人一样去记录事物的某种状态,并且状态是可以发生变化的
详细地说:
程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来
举例:
替换A与B的值
直接使用A=B,B=A后AB的值都等于B
则需要使用一个变量C作为暂存值的容器
C=A
A=B
B=C
变量类型
各程序的常用变量类型
//UiBot
Dim 变量 = "" //变量
Dim 变量 = '' //变量
Dim 变量 = 1 //数字
Dim 变量 = true //布尔
Dim 变量 = [] //数组
Dim 变量 = {} //字典
Traceprint "123"
Traceprint '123'
Traceprint 123
Traceprint true
Traceprint [1,2,3]
Traceprint {'a':1,'b':2,'c':3}
//输出窗口
——————————————————————————————————————————————————————————
第一行:"123"
第二行:"123"
第三行:123
第四行:true
第五行:[
1,
2,
3
]
第六行:{
"a":1,
"b":2,
"c":3
}
'UiPath
Dim 变量 AS String = "" '字符串
Dim 变量 AS Int = 1 '数字
Dim 变量 AS Boolean '布尔
Dim 变量 AS Array<Int> '数组
Dim 变量 AS Dictionary<String:Int> '字典
Dim 变量 AS DataTable '数据表
//Javascript
var 变量 = "" //字符串
var 变量 = '' //字符串
var 变量 = 1 //数字
var 变量 = true //布尔
var 变量 = [] //数组
var 变量 = {} //字典
--MySQL
int --数字
varchar --字符串
enum --字符串(数据验证)
time --时间
text --字符串
longtext --长文本
longblob --二进制大对象,可存储图片或小型表格文档
uipath底层代码为VB.NET,变量类型繁多,下方仅介绍常用部分;代码作用域与传统代码大致一致,分为全局变量和局部变量,通过创建变量时选择作用域,作用于最上级目录则为全局变量,作用于下级目录则为局部变量
字符串
类型 | string |
示范值 | "Abc" |
解释 | 只能用半角(英文)双引号包裹住,uipath中大部分操作都需要涉及字符串,由于数据的多样性,大多数情况下需要使用字符串类型的数据时,数据非字符串,则需要使用ToString命令转化为字符串后再处理 |
数字
类型 | int |
示范值 | 123 |
解释 | 直接输入数字即可,中间不能参杂数字以外的值 |
布尔
类型 | boolean |
示范值 | true |
解释 | 只有true和false两个值,分别对应真和假 |
字典
类型 | dictionary |
示范值 | {"a":"1","b":"2"} |
解释 | 由若干个 键:值 组成,括号内可存在多组 键:值 如{键1:值,键2:值},键作为唯一值无法重复出现,新建键存在则默认覆盖原键的值,uipath中并不常用 |
数组
类型 | array |
示范值 | {1,2,3,4} |
解释 | 由若干个值组成,值按照顺序一一对应,从0开始,区示范值中的1,则需要区第0位 |
数据表
类型:datatable
示范值:
title1 | title2 | title3 |
123 | abc | true |
详情:类似于表格,同数据库一样没有可视化软件时不可见,uipath中数据库查询、批量抓取都需要使用datatable存储输出数据
变量操作
输出数据
以写入行组件为例,如何将各种变量放入写入行并运行
类型 | 输出方法 | 解释 |
---|---|---|
字符串 | 字符串通用性较高,基本操作都可通用,多数组件直接放入变量名即可使用 | |
数字 | 数字变量.toString | 数字想要使用或输出时,需要转化为字符串才可使用 |
布尔 | 布尔值大多使用在判断中,表达式只有布尔变量时等效为判断 布尔=true | |
字典 | 字典("a") | 使用括号加键值进行取值,例如 字典={"a":"1","b":"2"} 获取1的表达式则为:字典("a") |
数组 | 数组(3) | 使用花括号创建数组,使用括号加数字取值,数字从0开始,0代表数组中的位置1,依次类推,例如 数组={1,2,3,4} 获取4的表达式则为:数组(3) |
数据表 | 数据表较为特殊,下方单独解释 | |
正则表达式 | Regex.Match("13ab54","[0-9]{2}").ToString | uipath中存在正则表达式命令,需要先导入System.Text.RegularExpressions,可以不用靠组件实现 |
假设有一个名为数据表的dataTable类型数据,数据表的数据如下表
id | name | pnbr |
1 | 张三 | 17702356606 |
2 | 李四 | 19923608988 |
数据表所有的取值方式如下
表达式 | 输出结果 | 解释 |
---|---|---|
数据表.Rows(0)("name").ToString | 张三 | .Rows()命令把整个数据表看作一个数组。 取第一条则是.Rows(0),这种状态下的数据无法直接使用,因为目前的数据类型为object,使用.ToString命令转化后值为"object"也无法使用。 需要更进一步精确到列名.Rows(0)("name"),完成此步后再使用.ToString命令即可输出内容"张三" |
数据表.Select(" id = '2' ")(0)("pnbr").ToString | 19923608988 | 此方法在没有id等于2时运行会直接报错!!! id有2这行数据时会返回19923608988,可通过提前判断 数据表.Select(" id = '2' ").Count 是否等于 0 来规避报错,Select中的语法与mysql类似,可以加入多个条件:Select("id = '2' and name like '%张%' and pnbr like '177%' "),这句话的查询条件是:id等于2并且name包含张并且pnbr以177开头 |
数据表.Rows.Count | 2 | 可以查询数据表有多少行 |
数据表.Columns.Contains("pnbr") | True | 可查询数据表是否存在pnbr这列,不存在会返回false |
流程逻辑
uipath中的流程图有两种,分别为【流程图】和【状态机】
流程图主要由【判断块】【流程块】组成,每一个判断都对应两种结果,结构示意如下
状态机主要由【状态】 组成,每一个状态可以分出若干分支,每个分支可以指定分支条件,状态机主要优势为存在多个判断条件时,不需要逐个添加判断块,每个分支都有很强的指向性,外观相比【流程图】更加简洁易懂,但需要较强的流程逻辑,结构示意如下
需要注意的是,状态机中的【状态】有三个板块entry、exit、transition,三个板块并不是按顺序执行的,其顺序为
先执行entry
再进行transition判断
进入下一个流程前再执行Exit
另外transition中的多个判断也不是按顺序执行,若【未知】的条件是有报错信息,【失败】的条件是报错信息为xxx,那么运行时很有可能出现【失败】满足条件,但先执行了【未知】的判断,导致本应执行【失败】,却执行了【未知】
想要避免执行了错误的流程的情况,需要限制条件最广的【未知】,在条件中的trigger中加入判断,判断已经把其他判断执行过一次,以and追加限制条件;当所有判断都执行过一次,并且没有判断成功,再进入限制条件最广的那个判断
练习
这里放入一些实践练习场景,可以尝试一下
WEB
可以同时练习js+css能力,uipath开发中这两项能力是很重要的,js可以实现复杂的逻辑运算或uipath无法实现的东西,html和css可以丰富元素定位知识
项目结构如下
代码分别是html、css、js的初始化代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>title</title>
<link rel="stylesheet" href="/css/style.css">
<script src="/js/script.js"></script>
</head>
<body>
</body>
</html>
* {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
document.onload = function(){
console.log("onload")
}
vscode中安装live server扩展,可以实时预览html
在html中右键,再点击open with live server即可开启服务,浏览器访问http://127.0.0.1:5500查看预览,一般开启服务后会自动打开网页;停止服务的话点击右键中的stop live server即可
web实操练习的话,可以尝试手搓一个加减乘除计算器试试,样式参考系统自带的计算器
UIPATH
1.操作上一步制作的计算器在三分钟内完成0+1+2+3+...+999+1000的计算
2.操作qq邮箱,将邮件的标题和发件人存入数据库中,uipath不能主动结束运行,在uipath运行期间自动获取新邮件并存入数据库
3.在上一步的基础上,打开每一封即将存入数据库的邮件,获取其正文内容,并存入数据库,只要文字内容即可