[UiBot]RPA基础概念

71人参与 |分类: 产品百科|时间: 2019年09月24日

2 基本概念

是不是已经开始跃跃欲试,想赶快用UiBot实现您的流程自动化了?

别急,别急,磨刀不误砍柴功。在这一章,我们会介绍UIbot中的一些基本概念,掌握这些概念,阅读后面的内容才会事半功倍。这一章的内容不会太长,请务必耐心,不要轻易跳过哦!

2.1 流程

Uibot中,我们首先需要了解以下几个概念:

  • 流程

  • 流程块

  • 命令

  • 属性

这四个概念之间都是包含关系,一个流程包含多个流程块,一个流程块包含多个命令,一个命令包含多个属性。四个概念的具体含义,我们会在本章之中逐渐展开,并且,在后面的章节中,会反复的使用这四个概念作为基本术语,所以请务必牢记。

第一个概念是流程。所谓流程,是指您要用UiBot来完成的一项任务。虽然可以用UiBot陆续建立多个流程,但同一时刻,只能编写和运行一个流程。将来在使用UiBot Worker和UiBot Commander的时候,也是以流程为基本单元来使用的。

启动UiBot之后,只要点击左边的“新建流程”按钮,并且指定存放路径,即可建立一个流程,如图所示。

用UiBot新建流程
用UiBot新建流程

如果您之前用过按键精灵,那么“流程”大致相当于按键精灵中的“脚本”。当然,UiBot中的“流程”和按键精灵中的“脚本”又有一定的差异,比如“流程”包含一个文件夹,而不只是一个文件。更重要的差异是:UiBot中的流程,都是采用流程图的方式来显示的。

2.2 流程图

新建或打开UiBot中的流程后,可以看到,每个流程都用一张流程图来表示。在流程图中,包含了“开始”、“结束”、“流程块”和“判断”四种元素,它们之间是用箭头连起来的。如图:

UiBot的流程图
UiBot的流程图

每个流程图中,都必须有一个、且只能有一个“开始”元素。顾名思义,流程从这里开始运行,并且沿着箭头的指向,依次运行到后续的各个元素。每个流程图中,可以有(当然也可以没有)多个“结束”元素,一旦运行遇到了“结束”元素,自然,就会停止运行了。

流程图中可以有(当然也可以没有)多个“判断”元素。在运行的过程中,“判断”元素将根据一定的条件,使后面的运行路径产生分支。条件为真的时候,沿着“yes”箭头,运行后续元素;否则,沿着“no”箭头,运行后续元素。如果您是UiBot的新手,可能暂时还用不到“判断”元素。没关系,我们先就此跳过,在后面的进阶内容中再详细叙述。

最后,也是最重要的,流程图中必须有至少一个“流程块”,流程块是本章要介绍的第二个概念。

我们可以把一个流程分为多个步骤来完成,其中的每个步骤,在UiBot用一个“流程块”来描述。比如,假设我们的任务是“把大象装进冰箱里”,那么,可以把这个任务分为三个步骤,每个步骤就是一个流程块:

  • 把冰箱门打开

  • 把大象塞进去

  • 把冰箱门关上

当然,这个例子只是开个玩笑,UiBot并不能帮我们把冰箱门打开。但通过这个例子,可以看出,在UiBot中,一个步骤,或者说一个流程块,只是大体上描述了要做的事情,而不涉及到如何去做的细节。

UiBot并没有规定一个流程块到底要详细到什么程度。比如,一个流程里面可以只有一个流程块(在这种情况下,流程和流程块实际上已经可以看作是同一个概念了),也可以把一个流程拆分成很多流程块。究竟要拆分成多少个,取决于您的个人喜好。一般来说,我们推荐把相对比较独立的流程逻辑放在一个流程块里,但流程块的总数不宜太多,比如,一个流程最好不要超过20个流程块。

为什么这样建议呢?因为UiBot中“流程图”的初衷,是为了让设计RPA流程的“业务专家”和使用rpa的“一般工作人员”能够更好的沟通。双方在设计初期就确定大致步骤,划分流程块,然后,业务专家再负责填写每个流程块里面的细节,而一般工作人员就无需关注这些细节了。显然,在这个阶段,如果流程块的数量过多,沟通起来自然也会更加困难。

在UiBot的工具栏上,有一个“运行”按钮,在流程图界面中,按下这个按钮以后,会从“开始”元素开始,依次运行流程中的各个元素。而每个流程块上还有一个蓝色小三角形,实际上也是一个按钮,按下之后,就会只运行当前的流程块。这个功能方便我们在开发RPA流程时,把每个流程块拿出来单独测试。

每个流程块上还有一个形状类似于“纸和笔”的按钮,按下之后,可以查看和编写这个流程块里面的具体内容。具体的编写方法,是通过“可视化视图”来完成的。

2.3 可视化视图

当使用UiBot编写一个流程块的时候,您会看到如下图所示的界面:

编写流程块(可视化视图)
编写流程块(可视化视图)

我们在图中用三个红框标明了三个主要区域,从左到右分别是命令区、组装区、属性/变量区。

这里我们需要引入第三个重要概念:命令。所谓命令,是指在一个流程块当中,我们需要告知UiBot具体每一步该做什么动作、如何去做。UiBot会遵循我们给出的一条条命令,去忠实的执行。继续前面的例子,假如我们的流程块是“把冰箱门打开”,那么具体的命令可能是:

  • 找到冰箱门把手

  • 抓住冰箱门把手

  • 拉开冰箱门

当然,和前面一样,这个例子只是打个比方,UiBot并不能把冰箱门打开。UiBot所能完成的几乎所有命令,都列在左侧的“命令区”,也就是上图中的第一个红框。包括模拟鼠标、键盘操作,对窗口、浏览器操作,等等多个类别。每个类别包含的具体的命令还可以进一步展开。

图中第二个红框所包含的区域,称之为“组装区”,我们可以把命令在这里进行排列组合,形成流程块的具体内容。可以从左侧的“命令区”,双击鼠标左键或者直接拖动,把命令添加到“组装区”,也可以在组装区拖动命令,调整它们的先后顺序,或者包含关系。具体的操作方式在软件使用说明书中有图文描述,这里不再赘述。

命令是我们要求UiBot做的一个动作,但只有命令还不够,还需要给这个动作设定目标等具体细节,这些细节就是我们要引入的第四个概念:属性。如果说命令只是一个动词的话,那么属性就是和这个动词相关的名词、副词等,它们组合在一起,UiBot才知道要做什么动作。

还用上面的例子来说,对于命令“拉开冰箱门”,它的属性包括:

  • 用多大力气

  • 用左手还是右手

  • 拉开多大角度

在编写流程块的时候,只需要在“组装区”用鼠标左键单击某条命令,将其置为高亮状态,右边的属性变量区即可显示当前命令的属性,包含“必选”和“可选”两大类。一般来说,UiBot会为您自动设置每一个属性的默认值,但“必选”的属性还是请关注一下,可能经常需要您根据需要进行修改。对于“可选”的属性,一般保持默认值就好,只有特殊需求的时候才要修改。

您目前看到的组装区的展示方式,称为“可视化视图”。在这种视图中,所有命令的顺序、包含关系都以方块堆叠的形式展现,且适当的隐藏了其中的部分细节,比较容易理解。“可视化视图”要体现出UiBot作为RPA工具的“简单”这一重要特点,为此,UiBot的设计者们在“可视化视图”的表现方式、详略程度、美观程度方面都有过认真的思考和碰撞,达到了相对比较均衡的状态。即使是没有任何编程经验的新手,看到“可视化视图”,也可以大致掌握其中的逻辑。

2.4 源代码视图

您也许已经注意到了,在组装区的上面,有一个可以左右拨动的开关,左右两边的选项分别是“可视化”和“源代码”,默认是在“可视化”状态。我们可以将其切换到“源代码”状态,属性变量区会消失,组装区会变成如下图所示的样子:

编写流程块(源代码视图)
编写流程块(源代码视图)

采用这种方式展现的组装区,称为“源代码视图”。和“可视化视图”类似,“源代码视图”实际上也展现了当前流程块中所包含的命令,以及每条命令的属性。但没有方块把每个命令标识出来了,也没有属性区把每个属性整齐的罗列出来了,而是全部以程序代码的形式来展现。

可视化视图和源代码视图描述的都是同一个流程块,它们实际上是同一事物的两种不同展现方式,其内涵都是一模一样的。可视化视图以图形化的方式,突出了各个命令,以及它们之间的关系,适合展现流程块的整体逻辑;源代码视图以程序代码的方式,突出了流程块的本质,并充分展现了其中的所有细节。

飞机的两种视图
飞机的两种视图

打个比方,可视化视图和源代码视图就像是上面这张飞机的视图一样。其实这架F-16飞机的左右两翼是基本对称的,但为什么看起来不一样呢?因为它的右翼采用外观视图绘制,展现整体造型,左翼采用透视视图绘制,展现内部构造。同一架飞机,用两种视图展现不同的内容,才能兼顾不同观众的关注点。

同样道理,同一个流程块,用两种视图展现不同的内容,才能兼顾RPA平台的“简单”和“快捷”两大指标。 如果您对UiBot已经比较熟悉了,那么切换到源代码视图,手不离开键盘即可书写命令和属性。UiBot对源代码视图进行了很多体验上的优化,能帮您快速选择所需的命令,快速填写各个属性(如下图),让您以快意的心情书写一条条的命令。

在源代码视图中添加命令
在源代码视图中添加命令

有的读者可能会问,究竟我要使用可视化视图,还是源代码视图呢?其实,您大可不必纠结于此。因为无论您使用哪种视图,都可以随时切换到另一种视图。您在一种视图上无论编写了什么内容,切换到另一种视图以后,这些内容都会100%保留,并以另一种视图的形式展现出来,反之亦然。所以,您完全可以先用可视化视图,稍微熟悉一点儿以后,切换到源代码视图尝尝鲜,也了解一下内部原理,如果觉得暂时还有困难,再切换回可视化视图就好了。完全没有选择恐惧症!

另外,源代码视图还有一个好处,当您在论坛上、QQ群里向其他人求助的时候,只要切换到源代码视图,把源代码复制粘贴,即可以文本的方式展现您的流程块。对方可以直接阅读源代码,也可以把源代码的文本粘贴到自己的UiBot中,并切换到可视化视图查看。这样交流的效率会大大提高。

在源代码视图中使用的编程语言,是UiBot自研的BotScript语言,具体的语言特性,将在后文详细描述。

2.5 小结

我们在这一章学习了四个概念:流程、流程块、命令、属性。还看到了三种视图:流程图、可视化视图、源代码视图。它们之间的关系如下图所示:

基本概念和视图的关系
基本概念和视图的关系

一个流程包含多个流程块,一个流程块包含多个命令,一个命令包含多个属性。流程图是流程的展现,可视化视图和源代码视图都是流程块的展现。

2.6 进阶:流程图的输入和输出

本节是附加内容,当您需要在流程图中加入判断,或者在多个流程块之间传递数据的时候,请阅读本节内容。如果您是UiBot的初学者,可以跳过不读。

实际上,您可以在流程图中使用变量。流程图中的变量,其作用域也仅限于当前流程中,在流程块里面是无法直接使用的。

当一个流程块开始运行的时候,可以把一个值(可以是变量或者表达式)“输入”到流程块中;而当一个流程块运行结束的时候,也可以把一个值“输出”到流程图中的某个变量中。还可以在流程图中加入一个“判断”,根据某个值,来决定究竟后面要找哪条路径去运行。

在流程图中,用鼠标左键选中一个流程块,右边的“属性”栏会出现这个流程块的属性。其中包含“输入”、“输出”两项,如下面左图所示。如果需要把数据传递进入一个流程块,那么把要传入的数据填写到“输入”栏中(可以是变量、表达式等),在这个流程块中使用一个特殊的变量 Self.Input,这个变量里就会自动存放输入的值。如果需要把数据从一个流程块中传出,那么只需要在流程块中书写 Return <输出值>,并且在流程图的“属性”栏填写一个变量名,即可把输出值保存到这个变量中。

后文会讲到,UiBot用到的编程语言是不区分关键字、变量名的大小写的,所以您也可以写 SELF.INPUTself.input,或者 RETURN <输出值>,等等。

流程图的属性栏
流程图的属性栏

类似的,您也可以在流程图中使用“判断”元素。把“判断”元素拖到流程图中,并且用鼠标左键选中,即可在属性栏中看到该元素的属性。如上面的右图所示。其中“条件表达式”这一栏很关键,您可以填写一个变量或者表达式。在流程运行到此判断时,将根据这个变量或表达式的值是否为真,来决定后面是沿着yes所示的出箭头继续运行,还是沿着no所示的出箭头继续运行。

如下图所示,“判断”元素有两个出箭头,一个标有yes,一个标有no,当其属性中的“条件表达式”为真时,沿着yes箭头往后运行,否则,沿着no箭头往后运行。

根据条件表达式来决定流程
根据条件表达式来决定流程

下面,我们将举例说明流程图输入和输出的具体用法。假设有一张流程图,包含两个流程块,分别命名为“流程块1”和“流程块2”,且“流程块1”先运行,“流程块2”后运行,如下图所示。 我们希望“流程块1”能够获得当前系统时间,转换为字符串格式后,输出到“流程块2”。然后,“流程块2”把“流程块1”的输出在UiBot Creator中以调试信息的方式显示出来。

两个依次运行的流程块
两个依次运行的流程块

我们首先选中“流程块1”,在其“输出”属性中,填写一个变量名,假设是X;然后选中“流程块2”,在其“输入”属性中,填写同样的变量名(不区分大小写)。这样,通过变量X,就把“流程块1”的输出和“流程块2”的输入连接起来了。如下图所示。 这个变量X仅在当前流程图中有效,其作用仅仅是把两个流程块连接起来。在流程块1和流程块2中,均无法直接使用X来设置或者获取其值。

通过同一个变量,连接流程块1的输出和流程块2的输入
通过同一个变量,连接流程块1的输出和流程块2的输入

那么,要如何让流程块1输出,又如何让流程块2输入呢?

我们先点击“纸和笔”图标进入流程块1,只需要插入一条“获取系统时间”和一条“格式化时间”命令(在“时间”分类下),并把“格式化时间”中的“时间”属性设为“获取系统时间”的结果,即可得到当前时间,并以容易阅读的格式保存在变量sRet中。 然后,再插入一条“跳出返回”命令(在“词法语法”分类下),并把sRet设为返回值,即可让流程块1正确输出。如下图所示。为了方便读者理解,图中同时列出了这个流程块的可视化视图和源代码视图,读者可根据掌握程度任选其一。

在流程块1中输出当前时间
在流程块1中输出当前时间

再点击“纸和笔”图标进入流程块2,只需要插入一条“输出调试信息”命令,并把“输出内容”属性设为Self.Input(不区分大小写)即可。如下图所示。同样,我们也列出了这个流程块的可视化视图和源代码视图,以方便理解。

在流程块2中输出调试信息,信息来自于流程块1
在流程块2中输出调试信息,信息来自于流程块1

回到流程图界面,然后点击“运行”按钮,即可看到运行结果。注意,由于流程块2需要获得流程块1的输出,所以,在流程图中运行的结果是正确的。虽然流程块2也可以单独运行,但在单独运行时,由于缺乏流程块1的输出,结果可能会有不同。


来源:[jane小姐](微信/QQ号:1055692322),转载请保留出处和链接!

地址: