Q:RPA支持多线程吗?如何实现?
A:在UiBot中,既支持多个流程并行运行(多个流程同时运行),也支持多个流程串行运行(先运行一个,再运行另一个)。
前者称之为“辅助流程”,后者称之为“子流程”,两者各有不同的用途。
首先,我们先来了解“辅助流程”。
辅助流程
辅助流程可以理解为主流程的“助手”。
多个流程同时运行,有“主流程”就有“辅助流程”。在UiBot中,辅助流程的用途通常是帮助主流程完成一些额外的任务,起到“辅助”的作用。
在UiBot Creator 的流程图上,有且仅有一个称为“主流程开始”的组件。这是流程的起点。可以把多个流程块用箭头连接到“主流程开始”的后面,让这些流程块依次运行,构成一个主流程。
如何创建辅助流程?
在流程图左侧的组件面板中,设有“辅助流程开始”组件,可以拖动到流程图中。
在一个流程图中,可以没有,也可以有一个或多个“辅助流程开始”的组件。创建了多少个“辅助流程开始”组件,在运行的时候就产生多少个辅助流程。
创建辅助流程,同样需要先创建若干个流程块,并用箭头将其依次连接到“辅助流程开始”之后。
图1:一个主流程和一个辅助流程
值得注意的是:在流程图中可能有多个流程块,每个流程块要么隶属于主流程,要么隶属于某个辅助流程,却不能同时隶属于主流程和辅助流程,也不能同时隶属于多个辅助流程。
换言之,一个流程块一旦被连接到了“主流程”后面,就无法再将其连接到“辅助流程”后面了。
辅助流程如何工作?
当流程开始运行时,主流程和所有的辅助流程都会同时开始,同时从“主流程开始”和每个“辅助流程开始”的组件处,根据箭头指向,依次运行每个流程块中的内容。
如果主流程结束了,会自动通知每个辅助流程,要求它们也结束。而辅助流程结束后,则不会影响到主流程或者其他辅助流程。
辅助流程数量越多越好?
并非如此。
UiBot的辅助流程是采用操作系统的多线程机制实现的,每个辅助流程都是一个独立的线程。
线程的数量增加并不一定会带来工作效率的提升,甚至线程数量过多,反而会带来效率的下降。因此,辅助流程的数量不宜过多。
++++++++++++++++分+++++割+++++线+++++++++++++++++++++
在了解了“辅助流程”后,我们在一起来了解下“子流程”。
在开发较为复杂的流程时,为了能提高效率,确保流程尽快完成,通常把流程划分为多个步骤,由不同的人去编写不同的步骤,再把这些步骤组装在一起。
如果将每个步骤用流程块实现,再将流程块逐一导入到同一张流程图中,则可能存在以下问题:
· 若流程块内容有更新,需要每次在流程图中,删掉旧的流程块,重新导入新的流程块;
· 若一个步骤比较复杂,用一个流程块描述起来不太方便,必须要用多个流程块才更清晰;
· 若在流程图中定义了一个变量(每个流程块都能使用这个变量),但如果两个人之间缺乏协调,互相不知道彼此是如何使用这个变量的,会造成数据相互覆盖等冲突。
正确地使用UiBot Creator中的子流程,能够避免上述问题,更有助于多人协作。
子流程
子流程是包含在“总流程”中的相关步骤的组件,可以将子流程视为单独的新流程。每个子流程都有一张完整的流程图,里面可以包含多个流程块,以及条件判断等。
当子流程结束时,只是跳出子流程返回“总流程”,并不会结束整个流程。直到总流程遇到“结束”块,才会真正结束。
值得注意的是:总流程及各个子流程的变量都是彼此隔离的。也就是说,如果在总流程和子流程里面都定义一个变量a,无论a是流程图变量,还是流程块变量,它们在总流程或者子流程里面各有各的取值,不会互相影响。
如此一来,在编写流程或子流程的时候,即使由不同的人完成,也不用担心大家凑巧给变量起了相同的名字而导致冲突。
如何创建子流程?
使用UiBot,可以先创建子流程(包含其中的流程块),然后再在总流程中去引用子流程;也可以在总流程编写的过程中,创建一个子流程并引用它。而且,子流程中还可以再创建其他子流程,创建顺序没有限定。
图2:多级子流程示意
在UiBot Creator左边的组件面板中,有个“子流程”组件图标(如下图),可以引入“子流程”。
图3:多级子流程示意
如果之前已经建好了子流程,可选择“打开”,并选择已有的子流程;否则,可以选择“空白创建⇒流程”或者“从模板创建⇒企业级流程模板”来创建一个子流程。
图4:创建或打开子流程
注意:
在UiBot Creator中,会使用一个Windows文件夹来放置一个流程。这个流程包含的所有文件都在这个文件夹下面。所以,如果是选择已有的子流程,UiBot Creator会立即弹出一个“选择文件夹”的对话框,其含义是确定被引入的子流程在哪个文件夹下面。
如果是新建子流程,同样是在“位置”一栏指定流程所在路径,并点击“创建”即可。无论是选择已有的子流程还是创建子流程,完成操作后, 流程图中就多了一个“子流程”的图标。在流程沿着箭头运行的过程中,每当遇到这个图标,即开始运行这个子流程,直到子流程运行完毕,再回到这一张流程图。
在流程图中加入一个子流程之后,UiBot并没有把子流程中的所有内容都复制到流程图中,而是采取了“引用”的方式,只记录子流程的路径信息。也就是说,创建子流程之后,如果子流程又发生了修改,不需要做任何额外动作,再次运行的时候,子流程已经是修改之后的内容。
如何修改子流程?
在流程图中加入一个子流程之后,在表示子流程的方块上,有一个显示为纸和笔的按钮(如下图所示)。点击此按钮即可对子流程进行修改。
图5:修改子流程的按钮
嵌套层数太多,忘记子流程层级结构?
不必担心,UiBot Creator记得清清楚楚。
无论是编辑流程图还是编辑流程块,左侧都有一个“流程”选项卡(可以通过拖动,放置到其他位置,但默认位置在左侧)。
切换到该选项卡,会显示一个树形结构:从总流程到子流程,再到每个子流程里面的流程块,都清清楚楚。
“流程”选项卡有两个主要作用:
· 显示整个流程的结构,并且以加粗的字体来表示当前正在编辑的流程图或流程块在整个流程里面的位置;
· 双击其中的任何一个流程图或者流程块,可以马上开始编辑(方便在不同子流程间快速跳转)。
图6:“流程”选项卡的作用
友情提醒:若在UiBot Creator中编写好总流程和子流程,并希望在UiBot Worker中使用,需要使用UiBot Creator的企业版,并将流程打包成一个独立的、扩展名为.bot的文件。