跳到主要内容

逻辑控制

前文中讲过,一个流程块通常包含多条命令,在前面的例子中,流程块中的多条命令都是一条一条按顺序来执行的,比如一个流程块完成Excel数据写入的功能,依次执行了“打开Excel”、“读取单元格”、“保存Excel”、“关闭Excel”四条命令。通常,我们把这种顺序执行的流程结构叫做顺序结构。但是实际的RPA场景远比这种情况要复杂,本章介绍稍微复杂一点的流程结构,以及在UiBot中如何使用逻辑控制来实现这些复杂一点的流程结构。

条件分支

首先介绍的这种流程结构叫做条件分支,什么叫做条件分支呢,顾名思义,指的是流程结构运行到某一步骤时,按照一定的条件进行分支:当条件满足时,按照其中一条分支走下去;当条件不满足时,按照另一条分支走下去。

我们来看具体的命令用法。在“流程创造者”的命令列表中,选中“基本命令”并展开,再选中“语法词法”并展开,找到“如果条件成立”,用这条命令就可以建立一个条件分支。

条件分支命令

在命令组装区,可以清晰地看到这条命令的作用。条件满足时的分支处写着:根据条件判断,然后下面一行写着:如果 条件成立 则,它的作用很明显:运行到这里的时候,会去判断当前的条件,当“条件成立”时,才会运行下一行命令。我们试着在下面插入“条件成立”时要运行的命令,例如可以插入一条“输出调试信息”命令,其输出内容为"条件成立时,输出这条消息"。注意,在插入这条命令的时候,有一条蓝色的实线和虚线,标明了插入的位置,此时按住鼠标左键不放,将鼠标左右移动到虚线所在的位置,可以对插入的位置进行调整。必须把“输出调试信息”命令插入到如果 条件成立 则的右下方(称为“缩进”),表示它是从属于上一条命令的(如下图A所示。此时点击如果 条件成立 则左侧的减号,会把从属于它的命令折叠起来,说明它们之间有从属关系)。而不能把它插入到如果 条件成立 则的正下方或者左下方(如下图B所示),这样两者之间就没有从属关系了,“输出调试信息”命令会在条件判断之后才运行。

条件分支命令的从属关系

有的时候,条件分支只需要在符合条件时,运行指定的命令;而有的时候,还需要在不符合条件时,运行其他指定的命令。此时,需要再从“流程创造者”的命令列表中,找到“否则执行后续操作”的命令,并将其拖入组装区。注意左右移动鼠标,使其插入位置与上面的如果 条件成立 则左侧对齐,代表两者是并列关系。此时组装区会显示否则,还可以在下面再插入一条从属于否则的“输出调试信息”命令,这条命令输出内容"条件不成立时,输出这条消息" 。同理,注意调整其左右位置,使其与否则命令具有从属关系。完成之后,命令组装区大致如下图所示:

条件分支命令 — 添加输出调试信息

我们试着运行一下,没有输出预想的内容,并且看到了一个警告信息(用橙黄色表示):

条件分支命令 — 运行结果

为什么会出现这样的结果呢?因为这个时候,“条件分支”命令最重要的属性“判断表达式”,我们还根本没有填写。打开“条件分支”命令的属性区,在“判断表达式”属性这里,UiBot帮我们默认填了一个条件成立的文字,但这仅仅给我们一个提示而已。我们要把条件成立这句话替换成真正的条件表达式,比如x > 1。如果不替换,在运行的时候,会把条件成立当成一个变量(因为这确实是一个合法的变量名),并判断它的值是不是为True。如果读者对变量、表达式的概念还比较生疏,可以参考作为附录的编程基础知识

条件分支命令 — 条件表达式

为了方便演示,我们在这里点击条件成立右边的“关闭”按钮,将其清除。然后填写一个True,代表这里的条件永远为“真”。

条件分支命令 — 条件表达式为真

这个时候可以看到,在命令组装区,条件满足时的分支处写着:如果 真 则,表明“判断表达式”属性已经生效。运行这条命令,得到正确结果,输出调试信息:"条件成立时,输出这条消息"

需要说明的是,“条件分支”命令的两条分支,是两个命令块。在命令块中,根据需要,可以放置一条命令,也可以顺序放置多条命令,当然也可以一条命令都不放,空着。“否则执行后续操作”的命令是可选的,可以放置,也可以不放置,可以根据实际需求选用。

循环结构

我们再来介绍另一种重要的流程结构,叫做循环结构,什么叫做循环结构呢,顾名思义,指的是流程按照一定的规则循环执行。按照循环规则的不同,又可以分为计数循环、条件循环两种,遍历数组和遍历字典其实也是两种特殊的计数循环,但是由于现在我们还没讲到数组和字典,因此遍历数组和遍历字典也放到后面再讲。

计数循环

先来看看计数循环。在“流程创造者”的命令列表中,选中“基本命令”并展开,再选中“语法词法”并展开,找到“从初始值开始按步长计数 继续计数直至到结束值停止”,用这条命令就可以建立一个计数循环。将这条命令添加到命令组装区后,我们再在它的从属范围内添加一条“输出调试信息”命令,这条命令会把“索引名称”i依次作为调试信息输出。

计数循环

这里引出了“索引名称”的概念。我们打开这条命令的属性列表框可以看到,该命令有四个属性:“索引名称”是用来计数的数值,这里用变量 i 表示,i在循环体中也可以使用(上面的例子中我们就将i依次显示出来);“初始值”和“结束值”标定了循环的范围,“步进”默认值为1,也可以修改为其它值。这三个值合起来的含义是:i从“初始值”开始,每循环一次自动增加“步进”的值,直到大于“结束值”,循环才会结束。我们运行这条命令,可以看到,打印出0到10,循环一共执行了11次。

计数循环的属性

条件循环

再来看看条件循环。在“流程创造者”的命令列表中,选中“基本命令”并展开,再选中“语法词法”并展开,找到“当前置条件成立时 循环执行操作”,用这条命令就可以建立一个条件循环。将命令添加到命令组装区后,我们再在它的从属范围内添加一条“输出调试信息”命令,这条命令输出内容"条件为真,继续循环"

条件循环

“条件循环”命令的属性区与“条件分支”一样,有且只有一个属性:“判断表达式”。“判断表达式”为真,循环才会执行,为了让循环执行起来,我们在“判断表达式”处填入True

条件循环的属性

执行这条命令,我们发现,会一直不停的输出字符串"条件为真,继续循环",而不会自动停止。需要我们点击"流程创造者"工具栏的“停止”按钮,才能强行停止流程的执行。这是因为,所谓“条件循环”,是指满足一定条件时,将会循环执行某一语句块。相应的,如果条件不满足,将不会执行那个语句块。在刚才的示例中,我们为了让循环执行起来,我们在“判断表达式”属性处填写了一个固定值True,而这个值是永远为“真”的,不会随着循环变化,因此“判断表达式”一直为真,循环也无休无止的运行下去。

那怎么解决这个问题呢?第一种方法,UiBot提供了多种跳出循环的命令,包括“继续循环”、“跳出循环”、“跳出返回”和“退出流程”等。这些方法会在下一节讲到;第二种方法,也是更加通用的做法,在“判断表达式”中填入一个表达式,最开始这个表达式的值为真,随着循环的进行,表达式的值不断发生变化,当循环达到某种状态时,表达式不再为真,这个时候循环就结束了。

我们来举个例子:首先定义一个变量a,并给这个变量赋初值为1;然后在“判断表达式”中填入a < 5,一开始这个表达式是成立的(因为这个时候a等于1),循环开始执行;接着在循环中给a的值加上1;就这样,经过几次循环后,a的值不再小于5,循环随之退出。

同样需要说明的是,不管是“计数循环”还是“条件循环”,其循环体都是命令块。命令块中可以放置一条命令,也可以顺序放置多条命令,命令块中的命令也可以是“条件分支”命令或者“计数循环”、“条件循环”本身,即逻辑控制命令是可以嵌套的。

循环的跳出

我们在上一节说过,UiBot提供了多种跳出循环的命令,包括“继续循环”、“跳出循环”、“跳出返回”和“退出流程”等命令。其中有些命令不仅可以用以循环的跳出,甚至可以用于流程块和流程的退出。下面我们就分别来讲解一下。

首先是“继续循环”命令,所谓“继续循环”,指的是在执行循环体的过程中,不再执行本次循环,而是在终止本次循环后,跳回到循环体开始处,继续执行下一次循环。

继续循环

其次是“跳出循环”命令,所谓“跳出循环”,指的是在执行循环体的过程中,不再执行循环命令,而是直接跳出循环体,继续执行循环语句后面的命令。

跳出循环

再次是“跳出返回”命令,所谓“跳出返回”,指的是在执行循环体的过程中,不再执行循环命令,而是直接跳出所在的流程块,并返回retValue这个值。

跳出返回

最后是“退出流程”命令,所谓“退出流程”,指的是在执行循环体的过程中,不再执行循环命令,而是直接退出流程,中止流程的执行。

退出流程

需要注意的是:“跳出返回”命令和“退出流程”命令不仅可以用于循环体当中,也可以用于条件分支和顺序结构中,也就是说流程块的任何位置,只要有需要,都可以随时通过“跳出返回”命令和“退出流程”命令达到跳出本流程块和退出流程的目的。