注意:说明:
注意:数据模型中“计算公式”类型字段已不再迭代,建议你使用自定义 js 方法实现相关功能。
一、计算公式
假设已有如下数据模型:
现在想在表格中显示姓名以及总价两个字段,分别是用姓氏+名字和单价*数量计算而来:
我们可以利用计算公式类型字段来实现
·姓名字段设置如下:
确定后在表达式编辑器编辑:
#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,返回值为 41。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.unitLower 转换为小写函数签名: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)