Skip to main content

表达式使用指南

功能介绍

表达式作为千帆 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)