计算和决策
计算和决策非常类似,所以它们的编辑方式几乎相同。这两者均基于表达式,但存在两个关键区别。首先,计算是一个可能会得出任意值的表达式,但决策是一个结果必须为 TRUE 或 FALSE 的表达式。第二,计算的结果会存储在数据项中,但决策的结果不会被存储,而是仅用于决定流程的执行方向。
表达式可通过多种方式来创建。您可以直接在表达式编辑器中输入表达式,也可以通过拖放函数列表或数据项列表中的项目来构建表达式。函数列表会显示 Blue Prism 中可供使用的所有函数。当您将某个函数拖放到表达式编辑器中时,系统会在屏幕上自动输入相应的默认函数文本。同样地,您可以拖放数据项列表中的数据项,其名称将自动输入到表达式编辑器中。
您也可以在屏幕中央的函数构建器区域中编写函数。从函数列表中选择某个函数后,函数本身及其用法说明和所有参数会随即显示在函数构建器中。您可以直接在出现的字段中进行输入,或从数据项列表中拖放相应的数据项,以便为参数指定具体的值。函数构建完成后,可以使用“粘贴”按钮将函数转移到表达式编辑器中。
计算必须指定要用来存储求值结果的数据项。“结果存储位置”字段可以通过在数据项名称中输入相应内容或通过拖放右侧列表中的数据项来进行填充。
表达式编写完成后,应该检查其是否存在任何错误,而这项检查可通过选择“流程验证”按钮来进行。随后,Blue Prism 将会检查表达式,并突出显示可能存在错误的位置。
完成检查后,还可以通过选择“测试表达式”按钮来为表达式求值。如果在表达式中使用了任何数据项,系统将会显示一个新的表达式测试向导,好让您为各个数据项指定临时值,从而获得表达式的求值结果。如果没有在表达式中使用任何数据项,求职结果将会以弹出式消息的形式来显示。如果您只想测试表达式中的某个部分,则可通过拖动鼠标以突出显示相应内容来选择这个部分。当表达式测试向导出现时,它只会使用表达式中已被选中的那个部分。
表达式
表达式由数据项、运算符、函数和常量构建而成。
数据项
数据项会通过名称来加以引用,而且必须用方括号括起来,例如 [帐户编号]。
运算符
运算符会通过它们各自的字符来加以引用,例如 1 + 2。
函数
函数会以“函数名称(参数 1,参数 2)”的形式出现,例如 Mid("Hello", 1, 2)。
大部分函数的语法都一目了然。下面将会详细介绍几个较为复杂的函数。
要确定两个日期、时间或日期时间之间的差值,建议将这两者相减
例如,MakeDate(26,5,1999) - MakeDate(29,5,1968) 将会返回时间间隔 11319.00:00:00
如果需要按照非固定时间间隔(会因一年中的具体时间而异)来确定差值,DateDiff 函数可提供一些有用的间隔。这些间隔已列在下方 DateAdd 函数部分的表格中。如果 date2 > date1,返回的数字将为正数。
如果使用的是间隔“一年中的一周”,则返回的值表示的是 date1 所在的一周中的第一天与 date2 所在的一周中的第一天之间相隔的周数。
如果使用的是间隔 2“工作日”,则返回的值表示的是两个日期之间相隔的完整日历周数(例如,如果 date1 是星期一,则会计算直到(包含)date2 为止一共有多少个星期一)
例如,如果 date1 是 2/3/2017 星期四,date2 是紧随其后的那个星期二,也就是 7/3/2017,那么使用间隔“一年中的一周”的 DateDiff(1, date1, date2) 将会返回 1,因为对应两个日历周的第一天之间相隔一周。
但是,使用间隔“工作日”的 DateDiff(2, date1, date2) 将会返回 0,因为 date1 与 date2 之间的星期二个数为 0。
参数
三个参数的具体含义如下所示:
参数 |
描述 |
---|---|
Interval |
用于指定所需的返回值单位的代码。这些值会在 DateAdd 函数部分进行详细介绍。 |
date1 |
要比较的两个日期中的第一个日期。 |
date2 |
要比较的两个日期中的第二个日期。 |
示例
要计算 29/5/1968 与 26/5/1999 之间相隔的周数,请使用 DateDiff(1, MakeDate(29,5,1968), MakeDate(26,5,1999))。这个函数将正确地返回 1617。
要在某个日期、时间或日期时间的基础上增加一段时间,建议直接加上具体的时间间隔
例如,MakeDate(26,5,1999) + MakeTimeSpan(3, 0, 0, 0) 将得到 29/05/1999。
对于时间,MakeTime(12,30,0) + MakeTimeSpan(0, 1, 5, 3) 将得到 13:35:03。
如果需要加上一个非固定的时间间隔(会因一年中的具体时间而异),DateAdd 函数可提供一些有用的间隔。各个间隔类型会以下方所列的编号来表示。
Interval | DateAdd | DateDiff |
0 | 年 | 年 |
1 | 周 | 一年中的一周(日历周) |
2 | (不适用) | 工作日(7 天一周) |
3 | (不适用) | 第二 |
4 | 季度 | 季度 |
5 | 月 | 月 |
6 | (不适用) | 分钟 |
7 | (不适用) | 小时 |
8 | (不适用) | 一年中的一天 |
9 | (不适用) | 天 |
如上所示,某些间隔不适用于 DateAdd 函数,但是这些间隔仍被选用了,这样便可为 DateAdd 函数和 DateDiff 函数使用相同的编号集。
例如,使用间隔编号 5 为某个日期加上几个月。所以,要为 26/5/1999 加上 2 个月,请使用 DateAdd(5, 2, MakeDate(26,5,1999))。这个函数将正确地返回 26/7/1999。
同样地,通过为间隔数量使用负值可以减去相应的间隔时间。例如,DateAdd(5, -2, MakeDate(26,5,1999)) 会返回 26/3/1999。
DateAdd 函数不会返回无效日期。例如,如果使用 DateAdd(5,1,MakeDate(31,1,2005)) 为 2005 年 1 月 31 日加上 1 个月,这个函数将会返回 28/2/2005(而非返回 31/02/2005—一个并不存在的日期)。
这个函数用于将日期的格式转变为所需的形式,或从完整的日期中提取一小部分信息(如一周中的一天)。
参数
两个参数的具体含义如下所示:
参数 |
描述 |
---|---|
Date |
要转变为文本值格式的日期值 |
Format |
格式字符串,可指定所需的输出形式。可以为这个参数输入一个表示标准日期格式的单个字母,也可以输入一个表示自定义日期格式的字符串。 |
示例
- FormatDate("02-11-2016", "D") 将返回“02 November 2016”
- FormatDate("02 Nov 2016","d") 将返回“2/11/2016”
- FormatDate("02-11-2016", "M") 将返回2 November”
- FormatDate("02-11-2016", "dddd") 将返回“Wednesday”
- FormatDate("02/11/2016", "yyyy-MM-dd") 将返回“2016-11-02”
- FormatDate("02/11/2016", "MMM dd, yyyy") 将返回“Nov 02, 2016”
格式字符串
- 有关标准日期和时间格式字符串的完整列表,请参阅 https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/standard-date-and-time-format-strings。
- 有关如何创建自定义日期和时间格式字符串的进一步信息,请参阅 https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/custom-date-and-time-format-strings。
这个函数用于将日期时间的格式转变为所需的形式,或从完整的日期时间中提取一小部分信息(如一周中的一天)。
参数
两个参数的具体含义如下所示:
参数 |
描述 |
---|---|
Date |
要转变为文本值格式的日期时间值 |
Format |
格式字符串,可指定所需的输出形式。可以为这个参数输入一个表示标准日期时间格式的单个字母,也可以输入一个表示自定义日期时间格式的字符串。 |
示例
- FormatDate("02-11-2016 09:23:43", "t") 将返回“09:23”
- FormatDate("02 Nov 2016 09:23:43","F") 将返回“02 November 2016 09:23:43”
- FormatDate("02-11-2016 21:23:43", "h:m tt") 将返回“9:23 PM”
- FormatDate("02-11-2016 21:23:43", "dd/MM/yy HH:m:s") 将返回“02/11/16 21:23:43”
格式字符串
- 有关标准日期和时间格式字符串的完整列表,请参阅 https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/standard-date-and-time-format-strings。
- 有关如何创建自定义日期和时间格式字符串的进一步信息,请参阅 https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/custom-date-and-time-format-strings。
MakeDate() 用于根据数字创建日期。
参数
三个参数的具体含义如下所示:
参数 |
描述 |
---|---|
Day |
要使用的一个月中的某一天。这个值对于所选月份而言必须有效;如果月份为 2(即 2 月份),则 30 不是一个有效的值 |
Month |
所需的月份,从 1 开始索引(即 4 对应 4 月份)。不得超过 12。 |
Year |
所需的年份,如 2001。 |
以两位数表示的年份
为了兼容旧流程,MakeDate 函数将接受以两位数表示的年份,并采用 2029 规则对其进行解释。但是,强烈建议您不要使用这个功能。请始终使用完整的年份(指明所属的世纪)。如果年份获取自采用两位数格式的其他系统,请确定这个系统所遵循的约定,并在读取数据后立即应用这个约定。
示例
- MakeDate(21,6,2005) 将返回日期 21st June 2005
- MakeDate(21,6,1995) 将返回日期 21st June 1995
- MakeDate(5,12,29) 将返回日期 5th December 2029
- MakeDate(5,12,30) 将返回日期 5th December 1930
提示
MakeDate 函数是指定新日期的首选方式;请不要使用“02/03/2007”这样的字符串,它会因当前的区域设置而导致值存在歧义(例如,美国人对于这个日期的解读可能会不同于英国人)。
Mid() 用于将较长的字符串(即字母序列)缩短为其所包含的较短字符串(即子字符串)。例如,Mid() 可用于将字符串“Customer Name:John Smith”缩短为子字符串“John Smith”。
参数
三个参数的具体含义如下所示:
参数 |
描述 |
---|---|
string |
要从中提取子字符串的较长字符串。 |
startpoint |
所需的第一个字母,从 1 开始索引。 |
maxcharacters |
所需字符的最大个数。这个函数返回的值将包含相应数量的字符,除非较长的字符串先行结束(在这种情况下,此值将变为理论上的最大字符个数)。 |
提示
如果用户指定的最大长度超过所提供的字符串的长度,Blue Prism 会将这个长度缩短为所提供的字符串的长度。因此,为免对太多的字符进行计数,常会简便地为最后一个参数写入一个较大的数字:Mid("Customer Name:John Smith", 16, 100)。可以使用 Mid("Customer Name:John Smith",16,4) 获取字符串“John”。注意: 这里的参数会向上取整,所以 Mid("abcdefg", 1.2, 1.8) 的求值结果将为“ab”。
示例
Mid("Customer Name:John Smith", 16, 25)—返回“John Smith”
Left() 用于返回一个较长的字母字符串的前几个字母。
参数
两个参数的具体含义如下所示:
参数 |
描述 |
---|---|
string |
要从中提取子字符串的较长字符串。 |
maxcharacters |
所需字符的最大个数。这个函数返回的值将包含相应数量的字符,除非较长的字符串先行结束(在这种情况下,此值将变为理论上的最大字符个数)。 |
提示
如果 maxcharacters 的值超过(或等于)字符串中的字符个数,这个函数将在未作修改的情况下直接返回这个字符串。如果需要,可以为 maxcharacters 指定值 0(返回空字符串),但不能指定负数。
示例
Left("Blue Prism empowers business users to achieve more in less time", 10) 会返回“Blue Prism”
Right() 的行为与 Left() 完全一致,但前者会返回字符串结尾处的字母(按照指定的长度),而不是开头的字母。
Len() 会返回字符串中的字符个数。例如,Len("Blue Prism") 会返回数字 10。
Instr() 会测试较短的字符串 substring 是否包含在较长的字符串 string 中。如果包含,则 Instr() 会返回从左侧开始算起会在第几个字符找到第一个 substring。
参数
两个参数的具体含义如下所示:
参数 |
描述 |
---|---|
string |
要从中提取子字符串的较长字符串。 |
substring |
较短的字符串,此函数会检测较长的字符串中是否包含这个较短的字符串。 |
示例
Instr("Calculations are much faster with Blue Prism than with an abacus", "are") 将返回 14,因为单词“are”第一次出现在第 14 个字符。
提示
如果在 string 中没有找到 substring,则 Instr() 将返回 0。所以说,Instr() 是一种非常有用的方式,可以测试较长的字符串中是否包含某个较短的字符串:例如,Instr("Apples", "Bananas") > 0 将返回 FALSE。
这个函数将为所选日期加上一定的天数。
参数
两个参数的具体含义如下所示:
参数 |
描述 |
---|---|
date |
应该要添加天数的日期。 |
numDays |
要增加的天数。 |
示例
AddDays("01/01/2006", 10) 将返回日期“11/01/2006”。
提示
与函数 DateAdd() 相同,这个函数只会返回有效的日期。例如,在闰年,为 2 月 28 日加上一天后,得到的结果将会是 2 月 29 日;在所有其他年份,得到的结果则是 3 月 1 日。
这个函数将为所选日期加上一定的月数。
参数
两个参数的具体含义如下所示:
参数 |
描述 |
---|---|
date |
应该要添加月数的日期。 |
numMonths |
要增加的月数。 |
示例
AddMonths("01/01/2006", 10) 将返回日期“01/11/2006”。
提示
与函数 DateAdd() 相同,这个函数只会返回有效的日期。例如,如果使用 AddMonths("31/01/2005",1) 为 2005 年 1 月 31 日加上 1 个月,这个函数将会返回“28/2/2005”(而非返回“31/02/2005”- 一个并不存在的日期)。
Now ();
这个函数将以文本格式呈现某个数字。通常,在处理货币时以及在 1 等数字更常以“1.00”的形式显示时,这个函数非常有用。
参数
两个参数的具体含义如下所示:
参数 |
描述 |
---|---|
number |
要以文本格式呈现的数字。 |
numPlaces |
所需的最大小数位数。 |
示例
- DecPad(1.296,2) 将返回文本“1.30”。
- DecPad(1.1111,2) 将返回文本“1.11”
提示
如果以自然表示法呈现时小数位数过多,这个函数将相应地删除一定的小数位数,并将数字四舍五入为相应的精度。
这个函数会将数字向下舍入为所需的小数位数。所返回值的数据类型为数字。
参数
两个参数的具体含义如下所示:
参数 |
描述 |
---|---|
number |
要舍入的数字。 |
numPlaces |
所需的最大小数位数。 |
示例
- RndDn(9.19996,3) 将返回数字 9.199
- RndDn(9.1345,2) 将返回数字 9.13
- RndDn(3.14159,10) 将返回 3.14159(数字没有任何变化)
提示
如果数字已达到所需的精度级别,数字将保持不变,尤其是它的格式也不会发生有所改变(和使用函数 DecPad 时一样)。另请参阅函数 Round 和 RndUp。
这个函数会将数字向下舍入为所需的小数位数;它的行为与 RndDn() 函数类似。
参数
两个参数的具体含义如下所示:
参数 |
描述 |
---|---|
number |
要舍入的数字。 |
numPlaces |
所需的最大小数位数。 |
示例
- RndDn(9.19996,3) 将返回数字 9.200
- RndDn(9.1345,2) 将返回数字 9.14
- RndDn(3.14159,10) 将返回 3.14159(数字没有任何变化)
提示
如果数字已达到所需的精度级别,数字将保持不变,尤其是它的格式也不会发生有所改变(和使用函数 DecPad 时一样)。另请参阅函数 Round 和 RndDn。
这个函数会将数字舍入为最为相近且拥有所需小数位数的数字。
参数
两个参数的具体含义如下所示:
参数 |
描述 |
---|---|
number |
要舍入的数字。 |
numPlaces |
所需的最大小数位数。 |
示例
- Round(9.1345,2) 将返回数字 9.13
- Round(9.19996,3) 将返回数字 9.200
- Round(3.14159,10) 将返回 3.14159(数字没有任何变化)
提示
如果数字已达到所需的精度级别,数字将保持不变,尤其是它的格式也不会发生有所改变(和使用函数 DecPad 时一样)。另请参阅函数 RndUp 和 RndDn。
这个函数将返回所提供数字的平方根。数字的平方根是一个唯一正数,将这个正数乘以自身后会得到最开始的数字。
示例
- Sqrt(100) 会返回数字 10
- Sqrt(2) 会返回 1.4142135623731
针对指定的底数值,计算数字的对数。如果值 v 和底数 b,则会计算以 b 为底 v 的对数—写作 Log(v, b)—即回答问题:“满足 bx = v 的值 x 时什么?”。
示例
- Log(1000, 10) = 3,因为 103 = 1000。
- Log(1/4, 2) = -2,因为 2-2 = 1/4
这个函数将返回所提供文本的大写形式。所提供文本中已经是大写形式的所有字母都不会发生变化,那些不是大写形式的字母则会做出相应改变。
示例
- Upper("software") 将返回文本“SOFTWARE”
- Upper("aBcDeFg") 将返回文本“ABCDEFG”
提示
另请参阅 Lower() 函数。
这个函数将返回所提供文本的小写形式。所提供文本中已经是小写形式的所有字母都不会发生变化,那些不是小写形式的字母则会做出相应改变。
示例
- Lower("SOFTWARE") 将返回文本“software”
- Lower("aBcDeFg") 将返回文本“abcdefg”
提示
另请参阅 Upper() 函数。
常量
文本和密码会通过括在双引号中的文本来提供,例如 "This is my text"。
数字则会通过输入普通数字的方式来提供,例如 5 或 1.2
标志会以单词 True 或 False 来表示
日期会以格式为 dd/mm/yyyy 的文本表达式的形式来提供,例如“12/03/2004”
强制转换
如果将某一数据类型的实体置于需要另一数据类型的表达式中,就会发生强制转换。
例如,为文本函数提供了一个数字。
Len(100)
这个数字 100 会自动强制转换为文本“100”,然后 Length 函数将会返回“3”,因为文本“100”包含 3 个字符。