表达式使用指南
功能介绍
表达式作为千帆 aPaaS 除了拖拉拽之外的一种描述业务逻辑的方式,被广泛应用在对象建模、页面设计和流程编排中。可以通过一些简单的语法(例如:单行语法)来实现动态的数据计算以及各类规则的判断,并且表达式引擎内部预先支持了各类的常见函数,例如:日期与时间函数、数学函数、文本函数等。除此之外表达式引擎还允许用户根据一定规则自定义函数执行逻辑,并将其无缝融合至现有的表达式执行逻辑中。
使用场景
表达式在千帆 aPaaS 中有着多种使用场景,如下所示:
- 对象建模:校验规则、计算公式。
- 页面设计:组件标题展示、组件显示条件、组件默认值、组件校验规则。
- 流程编排:排他网关节点、弹窗消息节点、审批节点、表达式节点。
基础语法
目前表达式仅支持单行表达式,可以进行数值、逻辑、变量提取、函数调用及混合调用。
表达式在语法校验及执行时会判断操作对象的类型,例如:大于号(>)会判断左右操作类型是否为布尔类型,如果不为布尔类型会提示类型错误。
语法具体说明
大类 | 小类 | 运算符 | 示例 |
---|---|---|---|
优先级 | 变更优先级 | () | (1 + 2) * 3 |
数值计算 | 取负 | - | -1 |
乘法 | * | 2 * 3 | - |
除法 | / | 1 / 2 | - |
取模 | % | 23 % 2 | - |
加法 | + | 1 + 2 | - |
减法 | - | 1 - 2 | - |
逻辑运算 | 大于 | > | 1 > 2 |
大于等于 | >= | 1 >= 2 | - |
小于 | < | 3 < 99 | - |
小于等于 | <= | 1 <= -1 | - |
等于 | == | 1 == 1 | - |
不等于 | != | 1 != 2 | - |
非 | ! | !(2 > 1) | - |
与 | && | (2 > 1) && (3 < 8) | - |
或 | || | (2 > 1) || (3 < 8) | - |
文本运算 | 文本拼接 | + | 'hello ' + 'world' |
变量取值 | 基本变量取值 | # | #date |
变量属性取值 | # | #Person.age | - |
函数调用 | 内置函数调用 | FuncName(params) | Length('abc') |
自定义函数调用 | cloud.FuncName(params) | cloud.CleanData(#data) | |
混合调用 | - | - | If(7 < Length('abc'), 'abc', '321') |
支持变量类型说明
类型 | 说明 |
---|---|
数值类型 | 数值运算,函数调用会使用到的类型 |
文本类型 | 文本运算,函数调用会使用到的类型 |
布尔类型 | 逻辑运算,函数调用会使用到的类型 |
日期时间类型 | 函数调用会使用到的类型 |
选项集类型 | 函数调用会使用到的类型 |
对象类型 | 变量取值,函数调用会使用到的类型 |
集合类型 | 函数调用会使用到的类型 |
高级函数
日期与时间函数
Now
函数签名:Now() 函数说明:返回当前时刻的时间,返回值类型为日期时间类型。 使用示例:获取当前时间。
Now()
Date
函数签名:Date(year, month, day) 函数说明:根据指定年月日返回一个日期时间类型,返回值类型为日期时间类型。 使用示例:创建2021-5-17号的日期类型。
Date(2021, 5, 17)
Day
函数签名:Day(Date) 函数说明:获取输入日期的日,返回值为整数类型,范围为1-31。 使用示例:获取当天的日。
Day(Now())
Month
函数签名:Month(date) 函数说明:获取输入日期的月份,返回值为整数类型,范围为1-12。 使用示例:获取当天的月份。
Month(Now())
Year
函数签名:Year(date) 函数说明:获取输入日期的年份,返回值为整数类型,范围为1900~9999。 使用示例:获取当前的年份。
Year(Now())
DateDiff
函数签名:DateDiff(date1, date2) 函数说明:返回两个日期中相差的天数,返回值为整数类型。 使用示例:计算上下文中的开始时间(startDay),结束事件(endDay)相差的天数。
DateDiff(#startDay, #endDay)
SecondDiff
函数签名:SecondDiff(date1, date2) 函数说明:返回两个日期中相差的秒数,返回值为整数类型。 使用示例:计算上下文中的开始时间(startDay),结束事件(endDay)相差的秒数。
SecondDiff(#startDay, #endDay)
MonthDiff
函数签名:MonthDiff(date1, date2) 函数说明:返回两个日期中相差的月数,返回值为整数类型。 使用示例:计算上下文中的开始时间(startDay),结束事件(endDay)相差的月数。
MonthDiff(#startDay, #endDay)
Timestamp
函数签名:Timestamp(date) 函数说明:获取输入日期的时间戳,返回值为10位整数类型,精确到秒。 使用示例:获取当前时间的时间戳。
Timestamp(Now())
数学函数
ABS
函数签名:ABS(number) 函数说明:计算一个数值的绝对值,返回值类型为数值类型。 使用示例:计算数值-9.7的绝对值。
ABS(-9.7)
Ceiling
函数签名:Ceiling(number) 函数说明:获取一个数值的上取整,及获取大于等于自身的最小整数,返回值类型为数值类型。 使用示例:计算数值7.1的上取整,返回值为8。
Ceiling(7.1)
Floor
函数签名:Floor(number) 函数说明:获取一个数值的下取整,及获取小于等于自身的最大整数,返回值类型为数值类型。 使用示例:计算数值7.7的下取整,返回值为7。
Floor(7.7)
Max
函数签名:Max([number], ...) 函数说明:返回一组数据中的最大值,返回值类型为数值类型。 使用示例:获取1,15,100,100.6中的最大值,返回值为100.6。
Max(1,15,100,100.6)
Min
函数签名:Min([number], ...) 函数说明:返回一组数据中的最小值,返回值类型为数值类型。 使用示例:获取1,15,100,100.6中的最下值,返回值为1。
Min(1,15,100,100.6)
文本函数
Begins
函数签名:Begins(text, compareText) 函数说明:检查文本是否以指定文本开头,如果包含则返回 True,不包含则不返回 False。 使用示例:校验上下文中的订单对象(order)的订单号属性(no)是否以“SO”开头。
Begins(#order.no, 'SO')
Contains
函数签名:Contains(text, compareText) 函数说明:检查文本是否包含指定文本,如果包含则返回 True,不包含则不返回 False。 使用示例:校验上下文中的商机报备对象(opportunityRegister)的行业属性(profession)是否包含“教育”。
Contains(#opportunityRegister.profession, '教育')
Len
函数签名:Len(text) 函数说明:计算一个文本所包含的字符数。 使用示例:计算文本“腾讯科技”所包含的字符数。
Len('腾讯科技')
Text
函数签名:Text(text) 函数说明:将实数、整数、日期等其他类型的数据转换为文本类型。 使用示例:上下文中订单对象(order)中有两个字段,分别为数量(quantity)和(unit),需要将这两个字段进行拼接。
Text(order.quantity) + order.unit
Trim
函数签名:Trim(text) 函数说明:删除文本开头和结尾的所有空格和制表符。 使用示例:删除文本“ 腾讯科技 s ”前后的空格。
Trim('腾讯科技 s')
Value
函数签名:Value(text) 函数说明:将文本类型转化为数值类型。 使用示例:将字符串“12.34567”转化为数值12.34567
Value('12.34567')
Regular
函数签名:Regular(text, rule) 函数说明:判断文本类型是否符合指定的正则规则,如果符合则返回 True,不符合则返回 False。 使用示例:
Regular(#input.value, '^[0-9]*$')
IsNumber
函数签名:IsNumer 函数说明:判断输入文本是否为数值,如果为数值则返回 True,不为数值则返回 False。 使用示例:判断文本“123”是否为数值文本。
IsNumer('123')
枚举函数
Includes
函数签名:Includes(multi_option_field, text) 函数说明:判断枚举字段选项列表中当前选择的值中是否有值等于指定的文本,如果有,则返回 TRUE,否则返回 FALSE。 使用示例:在客户对象(account)中有多选类型字段个人兴趣(favorite),需要判断在个人兴趣当前选择的选项值中,是否有"体育"的选项。
Includes(#account.favorite, '体育')
IsPickVal
函数签名:IsPickVal(single_option_field, text) 函数说明:判断单选字段选项列表中当前选择的值是否等于指定的文本文字,如果等于,则返回 TRUE,否则返回 FALSE。 使用示例:在客户对象(account)中有单选类型字段国家(country),需要判断在国家当前选择的选项值中,是否有"俄罗斯"的选项。
IsPickVal(#customer.country, '俄罗斯')
集合函数
Size
函数签名:Size(list) 函数说明:计算输入集合中元素的个数。 使用示例:上下文中存在集合 persionList,计算 persionList 的元素数量。
Size(#persionList)
对象函数
GetStringValue
函数签名:GetStringValue(object, text) 函数说明:获取对象属性值,类型为文本类型。 使用示例:获取上下文对象 person 中的文本属性 name。
GetStringValue(#person, 'name')
GetBooleanValue
函数签名:GetBooleanValue(object, text) 函数说明:获取对象属性值,类型为布尔类型。 使用示例:获取上下文对象 person 中的布尔类型属性 isChinese。
GetBooleanValue(#person, 'isChinese')
GetNumberValue
函数签名:GetNumberValue(object, text) 函数说明:获取对象属性值,类型为数值类型。 使用示例:获取上下文对象 person 中的数值属性 age。
GetNumberValue(#person, 'age')
IsNull
函数签名:IsNull(data) 函数说明:判断输入对象是否为空,如果为空则返回布尔类型 True,为空则返回布尔类型 False。 使用示例:判断上下文中订单对象(order)是否为空。
IsNull(#order)
Equals
函数签名:Equals(object1, object2) 函数说明:判断两个对象是否相当,如果相等则返回 True,不相等则返回 False。 使用示例:判断上下文中的对象1(object1)和对象2(object2)是否相等。
Equals(object1, object2)