什么是表达式?
我们知道,一个业务系统的终极目标,就是对各种各样的数据进行高效的流转和处理;伙伴云也不例外。
而表达式,就是伙伴云在具体的业务自动化环节中,对数据进行精细、复杂、高效处理的最强大的工具;在伙伴云触发器、数据验证、填写向导、计算字段、自动填写等功能中均有广泛的使用。
伙伴云表达式跟 Excel 公式语法十分相似。以「根据分数,输出是否及格的文字描述」的简单表达式举例:
通过举例可以看出,表达式就像中学数学里学习的「方程式」y=f(x)
的右侧,通过对自变量x
们的各种计算,整个表达式将返回一个y
值。唯独不同的是,表达式内部不仅支持数学计算,还支持IF
这样的逻辑运算;返回的y
值也不一定是数字,还可以是'不及格'
这样的文字内容(字符串)、以及 真
/假
这样可用于条件判断的「布尔值」数据。
表达式的相关知识和大部分编程语言一样,大致可以分为:数据类型、变量、常量、运算符和函数。下面为大家逐一讲解。
数据类型
相信大家能看出来,表达式中存放数据唯二方式就是「常量」和「变量」,运算符、函数只是对数据进行加工的工具。
在介绍常量 / 变量之前,我们首先需要知道存储在常量、变量中的数据值,都有哪些类型:
数据类型 | 对应字段/函数/对象 | 常量示例 |
---|---|---|
文本 text | 文本(单行/多行/带格式)、号码、条码 | '你好' |
数字 number | 数值(数值/百分比)、金额 计算公式(结果为数字/百分比) |
99.12 |
日期 datetime | 日期和时间(仅日期/日期和时间) 或函数: TODAY() 、NOW() |
'2023-09-10' |
选项 option | 选项(单选/多选)、下拉菜单(单选/多选) | {C:订单表.订单状态.已完成} |
文件 file | 图片、附件;仅可在触发器执行操作赋值时使用 | {F:文件名称.docx} |
布尔值 bool | 表达式的逻辑运算、逻辑函数 | TRUE() |
空值 empty | 通过函数 EMPTY() 返回 |
EMPTY() |
用户 user | 工作区成员 | {U:张三} |
部门 department |
企业部门对象。不存在对应变量,仅可用于LEADERSOFDEP() 函数 |
{D:销售部} |
表格 table | 特定的一张表格 | {订单表} |
单条数据 item | 特定的一条数据 | {I:产品表/计算机-550W} |
数据类型的概念在表达式撰写中非常重要。很多时候,不同类型的数据不能放在一起运算,也无法互相比较、判断彼此是否相等。
常量与变量
「常量」顾名思义:就是一个已经明确的固定值。你在上面「数据类型」的示例里看到的,都是常量。比如99.12
这样一个数字,在程序的执行过程中它本身是不会变化的——这就是「常量」一词的由来。
「变量」则是一个可以变的值。比如{当前数据.产品单价}
,它会随每一次「当前数据」的不同而变化。
变量与常量结合使用,就可以实现特定的产品逻辑判断了。比如我们撰写这样一个表达式:
{当前数据.产品单价} > 99.12
这样就实现了如下业务逻辑:当「产品单价」大于 99.12
时,表达式判断通过,否则判断不通过。
伙伴云中的变量
伙伴云中的变量分为「内置变量」和「自定义变量」两类。前者是存储在伙伴云表格数据结构中的既有变量,可直接用于调取数据;后者是我们自行定义的变量,可在零代码程序执行过程中灵活使用。
内置变量
伙伴云的底座是表格,因此我们日常接触的变量,绝大部分都是表格中的内置变量。这些变量帮助我们从表格中提取数据,用以进行判断、计算和传递。内置变量主要有五种类型:
类型 | 对应数据类型 | 含义 | 示例 |
---|---|---|---|
表格 | 表格 table | 特定的一张表格 | {当前表格} |
表格的字段 | 跟随对应字段 | 特定表格中某个字段的值;用于统计/筛选场景 | {当前表格.产品单价} |
数据 | 单条数据 item | 特定的一条数据 | {当前数据} |
数据的字段值 | 跟随对应字段 | 某条数据某个字段的值 | {当前数据.产品单价} |
用户 | 用户 user | 工作区成员;大部分时候是一条 数据的字段值,但存在例外 |
{当前操作人} |
下面按「全局」、「单条数据」两个层级,分别解析伙伴云有哪些可用的内置变量。
1. 全局的内置变量
在自动化的全局层面,我们可以获取以下内置变量:
变量 | 语法 | 数据 类型 |
含义 |
---|---|---|---|
当前表格 | {当前表格} |
表格 table |
当前自动化所属的表格。可用于统计函数。 |
当前数据 | {当前数据} |
数据 item |
触发当前自动化的数据。仅在自动化基于数据触发 时可用。 |
当前操作人 | {当前操作人} |
用户 user |
触发当前自动化的操作人(用户)。仅在自动化基 于用户的操作(含数据增删改)触发时可用,定时 触发时不可用。 |
目标表格 | {目标表格} |
表格 table |
自动化执行操作中,选择的目标表格。 |
目标数据 | {目标数据} |
数据 item |
自动化执行操作中,正在被操作的目标数据。 |
查找数据表格 | {查找数据表格} |
表格 table |
仅在「用找到的数据批量创建新数据」这类场景中 可用。方便引入要查找数据的表格字段。 |
查找到的数据 | {查找到的数据} |
数据 item |
仅在「用找到的数据批量创建新数据」这类场景中 可用:引入找到的数据。 |
表格字段 | {表格名.字段名} |
同字段 | 对应一个表格的特定字段;作为变量,一般用于批 量操作 / 统计时,对表格数据进行筛选 / 统计计算。 特例:在 ITEM 函数中可作为字段对象使用。 |
2. 属于某条数据的内置变量
在{当前数据}
、{目标数据}
、{查找到的数据}
这些「数据」变量的基础上,我们还可以通过英文句点「.」带出如下变量:
变量 | 语法 | 数据类型 | 含义 |
---|---|---|---|
字段值 | {数据.字段名} |
同字段 | 该数据各字段的值。 |
创建时间 | {数据.创建时间} |
日期 datetime | 该数据的创建时间。 |
创建人 | {数据.创建人} |
用户 user | 该数据的创建人。 |
修改时间 | {数据.修改时间} |
日期 datetime | 该数据的修改时间。 |
修改人 | {数据.修改人} |
用户 user | 该数据的修改人。 |
数据ID | {数据.数据ID} |
文本 text | 该条数据的唯一标识。 详见 表达式中的「数据ID」 |
如果表达式的使用场景刚好是数据发生了修改,还可以通过「.」带出下列专门为修改场景设计的变量:
变量 | 语法 | 数据类型 | 含义 |
---|---|---|---|
字段(原值) | {数据.字段名-原值} |
同字段 | 字段的数据修改之前的值。 |
字段(新值) | {数据.字段名-新值} |
同字段 | 字段的数据修改之后的值。 |
修改时间(上次) | {数据.修改时间-上次} |
日期 datetime | 数据上次的修改时间。 |
修改时间(本次) | {数据.修改时间-本次} |
日期 datetime | 数据本次的修改时间。 |
修改人(上次) | {数据.修改人-上次} |
用户 user | 数据上次的修改人。 |
修改人(本次) | {数据.修改人-本次} |
用户 user | 数据本次的修改人。 |
小贴士:
如果想要判断「某字段值发生了修改」,表达式为:
{数据.字段名-新值} != {数据.字段名-原值}
自定义变量
除了使用表格和数据中的变量,我们还能在系统中人工自行定义一些变量,方便完成自动化的执行和表达式的撰写。根据变量可发挥作用的范围(作用域)的不同,分为临时变量、全局变量、执行参数三类。
1. 临时变量:
在触发器、数据验证、填写向导等自动化功能的具体表达式前,我们可以定义一些临时变量,存储一些表达式中需要反复用到的数据,让表达式撰写更轻松,同时自动化执行的性能也能够得到提升。一个表达式最多可以设置 10 个临时变量。
2. 全局变量
在触发器中,我们还有一个临时变量的「加强版」——全局变量。顾名思义,一旦定义,就可以在当前整个触发器范围的各种触发条件和执行操作中使用。一个触发器最多可以设置 20 个全局变量。
3. 执行参数
在临时变量/全局变量之外,我们还有一个自定义变量的「超级加强版」——执行参数。执行参数不仅可以在当前触发器范围使用,还可以实现在触发器和触发器之间、流程和触发器之间,跨触发器 / 流程、乃至跨工作区传递值。
具体请参考:配置触发手动执行工作流/触发器
运算符
运算符的概念非常简单,回到前面的例子:
{当前数据.产品单价} > 99.12
左边是变量,右边是常量,而中间的「>」,我们称之为运算符。
伙伴云的运算符分为逻辑运算符和数学运算符两类:
- 逻辑运算符:返回值为
真
或者假
(在条件判断中分别对应通过和不通过)。 - 数学运算符:返回值为数值。
具体支持的运算符如下:
分类 | 运算符 | 含义 | 适用场景 |
---|---|---|---|
逻辑运算符 | = | 等于 | 文本、数字、选项、日期、成员、图片、附件、 关联数据、扫码、手写签名等 |
逻辑运算符 | != | 不等于 | 文本、数字、选项、日期、成员、图片、附件、 关联数据、扫码、手写签名等 |
逻辑运算符 | > | 大于 | 数字、日期 |
逻辑运算符 | < | 小于 | 数字、日期 |
逻辑运算符 | >= | 大于等于 | 数字、日期 |
逻辑运算符 | <= | 小于等于 | 数字、日期 |
数学运算符 | + | 加 | 数字 |
数学运算符 | - | 减 | 数字 |
数学运算符 | * | 乘 | 数字 |
数学运算符 | / | 除 | 数字 |
函数
伙伴云有丰富的内置函数,可以用于统计、逻辑判断、数值计算、日期计算、文本处理、数组处理、数据查询等等大量的业务场景中。
在伙伴云的任何表达式编辑框下方,你都可以滚动查看和选择系统支持的所有函数:
选择特定的函数后,在界面中就可以看到函数的简明使用帮助:
所有函数的语法,都遵循类似这样语法结构:
CONCAT('文本1', '文本2', '文本3', '文本4')
英文小括号外为函数名,英文小括号内是参数。多个参数之间,用英文逗号 ,
进行分隔。参数的个数由不同函数自行约定。
在绿色语法示例中,一般用中括号 []
代表可选参数(IN、LIKE 等函数中的数组参数除外)
伙伴云表达式中函数的完整速查清单,请参阅:函数速查