变量

1、前言

一个简单的示例:变量 一文中,我们向大家介绍了什么是变量,本文向大家详细介绍花漾灵动中关于 变量 的一些基础知识。

2、基础知识

尽管我们一直强调,在花漾RPA中编写一个流程定义就像搭积木一样简单,但需要指出的是,针对个别异常复杂的业务场景, 还是要用到“某种编程语言”进行逻辑条件与流程分支的判断,在花漾中,我们称其为“脚本语言”。 显然,最适合于花漾RPA的脚本语言是“JavaScript”(以下简称JS),因为通过 JS 不仅能够完成各种逻辑条件与流程判断,还能够操控浏览器网页中的各个元素。 因此,您可以理解成:花漾RPA的脚本语言是JavaScript的一个子集,只是针对RPA的业务场景做了一些定制、改造与限制。

在这里温馨提醒您的是,如果希望能够自如的掌握花漾RPA的强大能力,对 HTML/CSS/JavaScript 拥有一定的基础知识,将能够给您带来巨大的裨益。 顺便给您做一个推荐,W3School 是非常友好的 HTML/CSS/JavaScript 入门级教程,推荐您抽时间翻阅一下。

同JS一样的是,在花漾灵动RPA中可以声明变量,变量是存储数据值的容器,所有变量必须拥有唯一的名称作为标识, 我们称其为标识符。标识符可以是短名称(比如 xy),或者更具描述性的名称(比如 agenametotalVolume等)。

花漾RPA变量命名(唯一标识符)需要遵循的规则是(同JS变量命名规则一致):

  1. 名称可包含字母、数字、下划线和美元符号
  2. 名称必须以字母开头
  3. 名称对大小写敏感(a 和 A 是不同的变量)
  4. 保留字(比如 JS 的关键词)无法用作变量名称

变量的数据类型是“动态”的,也就是说,变量的数据类型是在程序运行过程中根据等号右边的值来确定的,这意味着变量的数据类型是可以动态变化的,如下所示:

x = 7; //此时,变量 x 的数据类型是数字
x = "hello world"; //此时,变量 x 的数据类型是字符串

花漾RPA将变量分为四类,分别是: 临时变量流程变量输入变量 、以及 系统变量 、 以下分别展开介绍。

3、临时变量

临时变量是在某个表达式或者某个代码片断中声明的变量,临时变量的声明周期仅在此表达式或者代码片断中有效。

如下图所示,我们在流程节点“RPA引擎脚本”中声明了一个临时变量 str ,并对其赋值为 "hello word" ,在这段脚本的其它地方, 便可以引用此变量,但需要注意的是,当该流程节点执行完毕后,此临时变量 str 将被销毁。

   

《声明临时变量》

4、流程变量

流程变量是由用户自行声明的、只在当前流程内有效、可读写的变量。如下图所示,我们声明了流程变量 agename , 并在声明时指定其初始值分别为 "kevin"24 ,显然,此时 age 的数据类型是数字,而 name 的数据类型是字符串:

   

《声明流程变量》

我们在打印日志中输出以下表达式:

var now = new Date();
var year = now.getFullYear();
"姓名:" + name + ",年龄:"  + age +  ",出生于: " + (year - age);

如下图所示:

   

《通过日志输出流程变量的值》

针对上述表达式,这里要展开介绍一下:

  1. 首先,请注意观察,左上角的 JS 图标处于激活状态,意味着此时对话框处于“JS表达式”输入模式
  2. 我们在上述表达式中声明了两个临时变量 nowyear,这两个变量仅在此表达式中有效,当“打印日志”的流程节点执行完毕后,这两个临时变量会被销毁
  3. 表达式中的最后一个语句就是表达式的值,这里引用了流程变量 nameage ,这两个变量在当前流程内有效

上述表达式的输出结果如下所示:

   

《表达式的输出结果》

5、输入变量

输入变量是一种特殊的流程变量,它也是由用户自行声明、只在当前流程内有效、可读写的变量,但与流程变量不同的是, 在流程执行前会要求用户对每个输入变量给予明确的赋值以增强流程的弹性。

我们还是以 一个简单的示例:变量 文章中的百度检索流程为例,在该示例中声明了两个输入变量,分别是: keywordmatching , 这样在每次执行流程前,用户可以通过输入不同的关键词与匹配内容,让流程执行不同的检索内容。

   

《声明输入变量》

在流程定义中声明的输入变量,在流程执行时会要求用户对输入变量进行赋值:

   

《流程执行时需要对输入变量进行赋值》

5.1 输入变量的高级设置

可以在输入变量的高级设置中,设置针对多个分身使用相同的输入变量值还是使用不同的输入变量值:

   

《输入变量的高级设置》

当指定“为多个分身使用相同的输入变量值”时,在执行流程定义时的向导页面中,默认显示如下图所示:

   

《为每个分身指定相同的变量值》

当指定“为多个分身使用不同的输入变量值”时,在执行流程定义时的向导页面中,默认显示如下图所示:

   

《为每个分身指定不同的变量值》

但需要提醒您的是,以上设置只是一种推荐形态,并不是强制形态。换言之,即便您设置“为多个分身使用相同的输入变量值”时, 在执行流程时,用户依然可以为多个分身分别输入不同的变量值。

5.2 对输入变量进行分组折叠

当输入变量过多时,您可以创建一个折叠分组,将部分输入变量放到此分组中,此分组可以通过收起/展开,将部分变量隐藏起来:

   

《对输入变量进行分组折叠》

使用折叠分组的最终效果如下图所示:

   

《对输入变量进行分组折叠的最终效果》

5.3 对输入变量进行互斥分组

当输入变量过多,且部分输入变量之间是互斥的关系时,可以创建单选分组,将部分互斥的输入变量放到不同的分组中。

举例,我们要收集人员的婚姻状况,如果已婚,则收集其配偶信息;如果未婚,则收集其联系人信息。最终的流程执行向导如下图所示:

   

《互斥的单选分组的使用效果》

针对上述场景,我们首先声明配偶(mate)与联系人(contact)两个输入变量,然后在输入变量的高级设置中,创建两个“单选分组”, 分别是“未婚”与“已婚”,指定单选分组的变量为 married,并给每个分组引入不同的变量:

   

《变量分组的高级设置》

当流程执行时,我们可以根据 married 的值,来判断用户选择了哪个分组:

   

《判断用户选择了哪个分组》

6、系统变量

系统变量是由系统预置、全局(跨主子流程)有效、只读的变量,可以通过点击右下角的 “变量” 区域唤醒变量对话框:

   

《系统变量》

系统变量主要用来传递当前上下文信息,如:您可以通过 account.name 查询当前正在执行此流程任务的浏览器分身名称, 通过 teamId 查询当前团队的唯一标识,通过 flow.name 查询当前流程的名称等等:

   

《通过日志输出部分系统变量的值》

上图所示流程的输出结果如下所示:

   

《通过系统变量获取上下文信息》

7、总结

花漾RPA将变量分为四类,分别是:

  1. 临时变量 :临时变量是在某个表达式或者某个代码片断中声明的变量,临时变量的声明周期仅在此表达式或者代码片断中有效
  2. 流程变量 :流程变量是由用户自行声明的、只在当前流程(不跨流程)内有效、可读写的变量
  3. 输入变量 :输入变量是一种特殊的流程变量,它也是由用户自行声明、只在当前流程(不跨流程)内有效、可读写的变量,但与流程变量不同的是,在流程执行前会要求用户对每个输入变量给予明确的赋值以增强流程的弹性
  4. 系统变量 :系统变量是系统预置、全局(跨主子流程)有效、只读的变量;系统变量主要用来传递当前上下文信息,如:您可以通过 account.name 查询当前正在执行此流程任务的浏览器分身名称

需要提醒您的是,当流程非常复杂、输入变量过多时,我们可以通过“折叠分组”,将某些不重要的变量折叠起来;再或者可以通过“单选分组”, 将部分互斥的变量放到不同的分组中,这样在执行流程时,能够给用户带来更好的使用体验。

行文至此,各位读者应该对花漾灵动RPA的变量有了一个比较全面的认识,一个很明显的问题是:无论是临时变量、流程变量、输入变量,还是系统变量,显然都只在流程执行期间内有效, 一旦流程结束,这些变量都会被销毁。那么,如果希望在流程执行过程中将某些变量存储起来,下次执行流程时能够获取上次流程的存储结果,该如何处理? 再或者,如果希望将一个变量能够在主子流程之间共享(全局变量可以,但全局变量是只读的),又该如何处理? 针对这些问题,都可以通过花漾RPA的 存储服务 得到答案。

最后更新于 2023-08-17 15:43
回到顶部