功能介绍
表达式可以通过一些简单的语法(例如:单行语法)来实现动态的数据计算以及各类规则的判断,并且表达式引擎内部预先支持了各类的常见函数,例如:日期与时间函数、数学函数、文本函数等。
使用场景
数据模型
计算公式
假设已有如下数据模型:
现在想在表格中显示姓名以及总价两个字段,分别是用姓氏+名字和单价*数量计算而来:
我们可以利用计算公式类型字段来实现姓名字段设置如下:
确定后在表达式编辑器编辑:
#lastname + #firstname
总价字段设置如下:
确定后在表达式编辑器编辑:
#amount * #price
说明:
表达式需要返回字段设置中结果类型相同的数据类型,例如:文本/数字/日期时间。
事件处理
数据模型 > 事件处理能设置数据模型事件(新增、删除和更新等)触发工作流,同时也支持设置执行前条件来判断在何种情况下才需要触发工作流。例如下图表示当单价 * 数量 > 10000才触发工作流:
编辑器内设置:(#amount * #pric) > 10000
说明:
执行前条件需要表达式返回布尔值 Boolean 类型数据。
工作流
属性配置
假设已有开始节点配置了输入变量的工作流。
如果想在审批节点中设定审批人为该输入变量中的某字段,将审批节点任务接收人类型选为表达式。
在表达式编辑器页面,从右侧参数列表可以选择流程中的变量,从右侧函数列表对变量进行函数公式处理。
表达式元素
基础语法
目前表达式仅支持单行表达式,可以进行数值、逻辑、变量提取、函数调用及混合调用。
说明:
表达式在语法校验及执行时会判断操作对象的类型,例如:大于号(>)会判断左右操作类型是否为布尔类型,如果不为布尔类型会提示类型错误。
支持的语法
大类 | 小类 | 运算符 | 示例 |
优先级 | 变更优先级 | () | (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') |
混合调用 | - | - | If(7 < Length('abc'), 'abc', '321') |
支持的变量类型
类型 | 说明 |
数字类型 | 数值运算,函数调用会使用到的类型。 |
文本类型 | 文本运算,函数调用会使用到的类型。 |
布尔类型 | 逻辑运算,函数调用会使用到的类型。 |
日期时间类型 | 函数调用会使用到的类型。 |
对象类型 | 变量取值,函数调用会使用到的类型。 |
数组类型 | 函数调用会使用到的类型。 |
函数列表
时间日期
Date 使用年月日创建日期时间
函数签名:Date(数字,数字,数字)
函数说明:根据输入的年月日数值返回一个日期时间类型的数据。
返回值类型:日期时间
使用示例:创建 2021-5-17 号的日期类型。
Date(2021, 5, 17)
DateText 日期时间格式化
函数签名:DateText(日期时间,文本)
函数说明:格式化日期时间类型为指定格式的字符串。
返回值类型:文本
使用示例:指定创建日期格式为 YYYY-MM-DD HH:mm:ss。
DateText(#createdTime, 'YYYY-MM-DD HH:mm:ss')
Timestamp 获取时间戳
函数签名:Timestamp(日期时间)
函数说明:根据输入的日期返回该日期的时间戳,精确到秒。
返回值类型:数字
使用示例:获取当前时间的时间戳。
Timestamp(Now())
DateDiff 天数差
函数签名:DateDiff(日期时间,日期时间)
函数说明:返回两个日期中相差的天数。
返回值类型:数字
使用示例:计算开始时间(startDay),结束时间(endDay)相差的天数。
DateDiff(#startDay, #endDay)
SecondDiff 秒数差
函数签名:SecondDiff(日期时间,日期时间)
函数说明:返回两个日期中相差的秒数。
返回值类型:数字
使用示例:计算开始时间(startDay),结束时间(endDay)相差的秒数。
SecondDiff(#startDay, #endDay)
MinuteDiff 分钟差
函数签名:MinuteDiff(日期时间,日期时间)
函数说明:计算两个日期中间的相差的分钟部分。
返回值类型:数字
使用示例:计算开始时间(startDay),结束时间(endDay)相差的分钟数。
MinuteDiff(#startDay, #endDay)
HourDiff 小时差
函数签名:HourDiff(日期时间,日期时间)
函数说明:计算两个日期中间的相差的小时数。
返回值类型:数字
使用示例:计算开始时间(startDay),结束时间(endDay)相差的小时数。
HourDiff(#startDay, #endDay)
DateAdd 增加 X 天
函数签名:DateAdd(日期时间,数字)
函数说明:在传入的日期时间上增加 X 天,支持负数。
返回值类型:日期时间
使用示例:开始时间(startDay)减少一天。
DateAdd(#startDay,-1)
MonthAdd 增加 X 月
函数签名:MonthAdd(date1,number)
函数说明:在传入的日期和时间上增加 X 月,支持负数。
返回值类型:日期时间
使用示例:在开始时间(startDay)基础上减少一个月。
MonthAdd(#startDay,-1)
YearAdd 增加 X 年
函数签名:YearAdd(date1,number)
函数说明:在传入的日期和时间上增加 X 年,支持负数。
返回值类型:日期时间
使用示例:在开始时间(startDay)基础上减少一年。
YearAdd(#startDay,-1)
DateTimeValue 使用时间日期文本创建日期时间
函数签名:DateTimeValue(文本,文本)
函数说明:将日期时间文本根据指定格式转化为日期时间。
返回值类型:日期时间
使用示例:将字符串"'2021-12-1 1:9:12'"转换为日期时间类型。
DateTimeValue('2021-12-1 1:9:12', 'yyyy-MM-dd HH:mm:ss')
DateValue 使用日期文本创建日期时间
函数签名:DateValue(文本,文本)
函数说明:将日期文本根据指定格式转化为日期时间。
返回值类型:日期时间
使用示例:将字符串"'2021-12-1'"转换为日期时间类型。
DateValue('2021-12-1', 'yyyy-MM-dd')
IsToday 是否为今天
函数签名:IsToday(日期时间)
函数说明:判断某个日期时间是否为今天。
返回值类型:布尔值
使用示例:判断今天日期是否为 2020-1-1。
IsToday(Date(2020,1,1))
AgeOfNow 计算当前年龄
函数签名:AgeOfNow(日期时间)
函数说明:计算用户当前的年龄。
返回值类型:数字
使用示例:计算用户当前的年龄,用户出生日期为 1980-3-24。
AgeOfNow(Date(1980,3,24))
Age 计算年龄
函数签名:Age(日期时间,日期时间)
函数说明:计算用户在某一天的年龄。
返回值类型:数字
使用示例:计算用户在 2021-3-24 日的年龄,用户出生日期为 1980-3-24,返回值为 31。
Age(Date(1980,3,24), Date(2021,3,24))
Now 获取现在时间
函数签名:Now()
函数说明:返回当前时刻的时间。
返回值类型:日期时间
使用示例:获取当前时间。
Now()
Second 获取秒数
函数签名:Second(日期时间)
函数说明:根据输入的日期时间返回该时间的秒部分。
返回值类型:数字
使用示例:返回当前时间的秒数。
Second(Now())
DateTime 使用时间戳创建日期时间
函数签名:DateTime(数字)
函数说明:将数值类型的时间戳转化为日期时间类型。
返回值类型:日期时间
使用示例:计算时间戳 12345 所在日期,返回值为 1970-01-01 08:00:12。
DateTime(12345)
Year 获取年份
函数签名:Year(日期时间)
函数说明:获取输入日期的年份,范围为 1900~9999。
返回值类型:数字
使用示例:获取当前的年份。
Year(Now())
Minute 获取分钟数
函数签名:Minute(日期时间)
函数说明:根据输入的日期时间返回该时间的分钟部分。
返回值类型:数字
使用示例:返回当前时间的分钟数。
Minute(Now())
Hour 获取小时数
函数签名:Hour(日期时间)
函数说明:根据输入的日期时间返回该时间的小时部分,24 小时制。
返回值类型:数字
使用示例:返回当前时间的小时数。
Hour(Now())
Day 获取天数
函数签名:Day(Date)
函数说明:获取输入日期的日,范围为 1-31。
返回值类型:数字
使用示例:获取当天的日。
Day(Now())
Month 获取月数
函数签名:Month(日期时间)
函数说明:获取输入日期的月份,范围为 1-12。
返回值类型:数字
使用示例:获取当天的月份。
Month(Now())
YearDiff 年数差
函数签名:YearDiff(日期时间,日期时间)
函数说明:计算两个日期中间的相差的年数。
返回值类型:数字
使用示例:计算开始时间(startDay),结束时间(endDay)相差的年数。
YearDiff(#startDay, #endDay)
MonthDiff 月数差
函数签名:MonthDiff(日期时间,日期时间)
函数说明:返回两个日期中相差的月数。
返回值类型:数字
使用示例:计算开始时间(startDay),结束时间(endDay)相差的月数。
MonthDiff(#startDay, #endDay)
DayOfWeek 获取星期数
函数签名:DayOfWeek(日期时间)
函数说明:根据输入的日期时间返回该时间的星期数。
返回值类型:数字
使用示例:返回当前时间的星期数。
DayOfWeek(Now())
计算
Rand 随机数
函数签名:Rand(数字)
函数说明:获取一个伪随机数。
返回值类型:数字
使用示例:获取一个 10 以内的随机数。
Rand(10)
Average 平均值
函数签名:AgeOfNow(数字,[数字...])
函数说明:返回一组数据中的平均值。
返回值类型:数字
使用示例:获取 1,15,100,100.6 的平均值,返回值为 54.15。
Average(1,15,100,100.6)
ABS 绝对值
函数签名:ABS(数字)
函数说明:计算一个数值的绝对值。
返回值类型:数字
使用示例:计算数值-9.7 的绝对值。
ABS(-9.7)
Min 最小值
函数签名:Min(数字, [数字...])
函数说明:返回一组数据中的最小值。
返回值类型:数字
使用示例:获取 1,15,100,100.6 中的最小值,返回值为 1。
Min(1,15,100,100.6)
Max 最大值
函数签名:Max(数字, [数字...])
函数说明:返回一组数据中的最大值。
返回值类型:数字
使用示例:获取 1,15,100,100.6 中的最大值,返回值为 100.6。
Max(1,15,100,100.6)
Sum 求和
函数签名:Sum(数字, [数字...])
函数说明:获取一组数据中的求和。
返回值类型:数字
使用示例:获取 1,15,100,100.6 的和,返回值为 216.6。
Sum(1,15,100,100.6)
Ceiling 向上取整
函数签名:Ceiling(数字)
函数说明:获取一个数值的上取整,及获取大于等于自身的最小整数。
返回值类型:数字
使用示例:计算数值 7.1 的上取整,返回值为 8。
Ceiling(7.1)
Floor 向下取整
函数签名:Floor(数字)
函数说明:获取一个数值的下取整,及获取小于等于自身的最大整数。
返回值类型:数字
使用示例:计算数值 7.7 的下取整,返回值为 7。
Floor(7.7)
Round 四舍五入
函数签名:Round(数字,数字)
函数说明:计算一个值的四舍五入结果,也可使用第二个参数指定小数点后位数。
返回值类型:数字
使用示例:计算 216.6 四舍五入的值,返回值为 217。
Round(216.6)
文本
Regular 匹配正则
函数签名:Regular(文本, 正则文本)
函数说明:判断文本类型是否符合指定的正则规则,如果符合则返回 True,不符合则返回 False。
返回值类型:布尔值
使用示例:
Regular(#input.value, '^[0-9]*$')
Ends 匹配结尾
函数签名:Ends(文本, 文本)
函数说明:检查文本是否以特定字符或者字符串结尾,如果包含则返回 True,不包含则不返回 False。
返回值类型:布尔值
使用示例:例如检查对象 “订单” 中的字段 “订单号” 是否以 “SO” 结尾。
Ends(#Order.order_id, 'SO')
Begins 匹配开头
函数签名:Begins(文本, 文本)
函数说明:检查文本是否以指定文本开头,如果包含则返回 True,不包含则不返回 False。
返回值类型:布尔值
使用示例:校验上下文中的订单对象(order)的订单号属性(no)是否以“SO”开头。
Begins(#order.no, 'SO')
TrimStarts 删除开头空格/制表符
函数签名:TrimStarts(文本)
函数说明:删除文本字符串开头的所有空格及制表符。
返回值类型:文本
使用示例:删除文本" 腾讯科技 s"开头的空格。
TrimStarts(' 腾讯科技s')
TrimEnds 删除结尾空格/制表符
函数签名:TrimEnds(文本)
函数说明:删除文本字符串结尾的所有空格及制表符。
返回值类型:文本
使用示例:删除文本"腾讯科技 s "结尾的空格。
TrimEnds('腾讯科技s ')
Upper 转换为大写
函数签名:Upper(文本)
函数说明:将字符串中的字符转化为全大写。
返回值类型:文本
使用示例:将字符串"abc"转化为"ABC"。
Upper('abc')
SubString 文本截取
函数签名:SubString(文本,数字,数字)
函数说明:根据输入位置截取部分文本。
返回值类型:文本
使用示例:获取字符串"您好,我的世界"中的"您好"。
SubString('您好,我的世界', 0, 2)
Text 转换为文本
函数签名:Text(数字/日期时间)
函数说明:将数字、日期时间等其他类型的数据转换为文本类型。
返回值类型:文本
使用示例:上下文中订单对象(order)中有两个字段,分别为数量(quantity)和(unit),需要将这两个字段进行拼接。
Text(order.quantity) + order.unit
Lower 转换为小写
函数签名:Lower(文本)
函数说明:将字符串中的字符转化为全小写。
返回值类型:文本
使用示例:将字符串"ABC"转化为"abc"。
Lower('ABC')
UUID 生成唯一标识
函数签名:UUID()
函数说明:生成一个 UUID 文本。
返回值类型:文本
使用示例:生成一个 UUID 文本。
UUID()
Len 获取文本长度
函数签名:Len(文本)
函数说明:获取传入文本的字符数。
返回值类型:文本
使用示例:计算文本“腾讯科技”所包含的字符数。
Len('腾讯科技')
Contains 是否包含指定文本
函数签名:Contains(文本, 文本)
函数说明:检查文本是否包含指定文本,如果包含则返回 True,不包含则不返回 False。
返回值类型:布尔值
使用示例:校验上下文中的商机报备对象(opportunityRegister)的行业属性(profession)是否包含“教育”。
Contains(#opportunityRegister.profession, '教育')
Split 拆分文本
函数签名:Split(文本, 文本)
函数说明:根据指定字符串将原字符串拆分成字符串数组。
返回值类型:文本
使用示例:用","将字符串"您好,我的世界,我来了"拆分成字符串数组,返回结果为["您好","我的世界","我来了"]。
Split('您好,我的世界,我来了', ',')
Trim 删除开头/结尾空格和制表符
函数签名:Trim(文本)
函数说明:删除文本开头和结尾的所有空格和制表符,文本中间的空格和制表符不会删除。
返回值类型:文本
使用示例:删除文本“ 腾讯科技 s ”前后的空格。
Trim('腾讯科技 s')
Value 转换为数字
函数签名:Value(文本)
函数说明:将文本类型转化为数字类型。
返回值类型:数字
使用示例:将字符串“12.34567”转化为数值 12.34567。
Value('12.34567')
逻辑
If 条件分支
函数签名:If(判断条件, 满足时返回的值, [不满足时返回的值])
函数说明:按判断条件进行逻辑比较,满足时返回一个值,不满足时返回另一个值。
返回值类型:不定类型
使用示例:判断 1 是否等于 1,正确返回"您好",错误返回"hello",结果返回"您好"。
If(1==1, '您好', 'hello')
Equals 是否相等
函数签名:Equals(值1, 值2)
函数说明:判断两个值是否相等。
返回值类型:布尔值
使用示例:判断上下文中的对象 1(object1)和对象 2(object2)是否相等。
Equals(object1, object2)
IsNumber 是否为数字
函数签名:IsNumber(文本)
函数说明:判断输入文本是否为数值,如果为数字则返回 True,不为数字则返回 False。
返回值类型:布尔值
使用示例:判断文本“123”是否为数值文本。
IsNumer('123')
IsNull 是否为空(Null)
函数签名:IsNull(值)
函数说明:判断输入对象是否为空。
返回值类型:布尔值
使用示例:判断上下文中订单对象(order)是否为空。
IsNull(#order)
集合函数
Size 获取个数
函数签名:Size(数组)
函数说明:计算数组中元素个数。
返回值类型:数字
使用示例:上下文中存在数组 persionList,计算 persionList 的元素数量。
Size(#persionList)
Merge 合并对象/数组
函数签名:Merge(对象/数组, 对象/数组)
函数说明:合并两个对象或两个数组为一个数组。
返回值类型:数组
使用示例:合并对象 1(#object1)、对象 2(#object2)成一个列表。
Merge(#object1, #object)