默认值配置
默认值配置用于控制字段如何获得初始值或重新计算后的值。支持的字段类型在新建和编辑字段弹窗中会显示该配置。
当字段可以通过固定输入、关联记录、当前日期或读取其他字段的公式预填时,可以使用默认值配置。
编号、汇总、动态计算、辅助文本字段不显示默认值配置。
如何使用
- 打开表单的 字段设计
- 新建或编辑一个支持默认值的字段
- 在 默认值 中选择模式
- 选择默认值的应用时机
- 填写字面量值或公式表达式
- 保存字段
模式
| 模式 | 说明 |
|---|---|
| 无 | 不配置默认值 |
| 字面量 | 使用在编辑器中固定录入或选择的值 |
| 公式 | 通过公式表达式计算默认值 |
应用时机
| 应用时机 | 说明 |
|---|---|
| 创建时 | 新建记录时应用默认值 |
| 仅为空时 | 只有字段为空时才应用默认值 |
| 依赖变更时 | 依赖值变化后重新计算;该选项只在公式模式下可用 |
字面量值
字面量模式会根据字段类型显示不同的编辑器。
| 字段类型 | 字面量编辑器 |
|---|---|
| 文本、长文本、邮箱、链接 | 文本输入框 |
| 数字 | 数字输入框 |
| 开关 | 开关状态 |
| 单选下拉、单选 | 一个已配置选项 |
| 多选下拉、复选 | 一个或多个已配置选项 |
| 关联搜索、多选关联、外键 | 从已配置的来源表单中选择记录 |
| 部门、组织 | 组织结构选择器 |
| 日期、周、月、季度、年 | 日期选择器 |
| 日期时间 | 日期时间选择器 |
| 时间 | 时间选择器 |
| 数组和对象数据 | 暂不支持字面量编辑;可以使用公式模式,或不设置默认值 |
公式模式
公式模式通过表达式计算默认值。
| 工具 | 说明 |
|---|---|
| 插入函数 | 向表达式中插入支持的公式函数 |
| 插入字段 | 向表达式中插入字段引用;字段引用格式为 FIELD("api_name") |
| 公式表达式 | 返回默认值的表达式 |
| 解析 | 展示表达式的解析结果 |
| 公式试算 | 选择当前表单的一条记录,用真实数据测试公式 |
公式返回结果必须匹配当前字段的数据类型。例如,数字字段应返回数字,开关字段应返回布尔值。
公式函数
| 函数 | 用法 | 说明 |
|---|---|---|
FIELD | FIELD("api_name") | 按 API 名称读取其他字段的值 |
IF | IF(condition, whenTrue, whenFalse) | 根据布尔条件返回两个值中的一个 |
COALESCE | COALESCE(valueA, valueB, ...) | 返回第一个非空值 |
CONCAT | CONCAT(valueA, valueB, ...) | 拼接多个字符串值 |
TRIM | TRIM(value) | 移除字符串首尾空白 |
REPLACE | REPLACE(value, "old", "new") | 将字符串中的部分内容替换为另一个值 |
SUBSTRING | SUBSTRING(value, start, length) | 返回字符串的一部分 |
LENGTH | LENGTH(value) | 返回字符串或类字符串值的长度 |
NOW | NOW() | 返回当前日期时间 |
TODAY | TODAY() | 返回当前日期 |
FORMAT_DATE | FORMAT_DATE(value, "YYYY-MM-DD") | 将日期或日期时间格式化为文本 |
ADD_DAYS | ADD_DAYS(value, 1) | 对日期类值增加或减少天数 |
ADD_HOURS | ADD_HOURS(value, 1) | 对日期时间值增加或减少小时 |
ADD_MINUTES | ADD_MINUTES(value, 30) | 对日期时间或时间值增加或减少分钟 |
DATE_DIFF | DATE_DIFF(valueA, valueB, "days") | 返回两个日期类值之间的差值 |
ROUND | ROUND(value, 2) | 将数字值按固定精度四舍五入 |
ABS | ABS(value) | 返回数字的绝对值 |
MIN | MIN(valueA, valueB, ...) | 返回多个数字中的最小值 |
MAX | MAX(valueA, valueB, ...) | 返回多个数字中的最大值 |
FLOOR | FLOOR(value) | 将数字向下取整 |
CEIL | CEIL(value) | 将数字向上取整 |
TO_STRING | TO_STRING(value) | 将值转换为字符串结果 |
TO_NUMBER | TO_NUMBER(value) | 将值转换为数字结果 |
TO_BOOLEAN | TO_BOOLEAN(value) | 将值转换为布尔结果 |
UPPER | UPPER(value) | 将字符串结果转换为大写 |
LOWER | LOWER(value) | 将字符串结果转换为小写 |
IS_EMPTY | IS_EMPTY(value) | 检查值是否为空 |
AND | AND(valueA, valueB, ...) | 当所有值都为真值时返回 true |
OR | OR(valueA, valueB, ...) | 当任一值为真值时返回 true |
NOT | NOT(value) | 对布尔值取反 |
EQ | EQ(valueA, valueB) | 检查两个值是否相等 |
GT | GT(valueA, valueB) | 检查第一个值是否大于第二个值 |
GTE | GTE(valueA, valueB) | 检查第一个值是否大于或等于第二个值 |
LT | LT(valueA, valueB) | 检查第一个值是否小于第二个值 |
LTE | LTE(valueA, valueB) | 检查第一个值是否小于或等于第二个值 |
UUID | UUID() | 返回生成的唯一标识字符串 |
公式示例
| 场景 | 目标字段类型 | 公式 |
|---|---|---|
| 用当天日期生成展示编码 | 文本 | CONCAT("NO-", FORMAT_DATE(TODAY(), "YYYYMMDD")) |
| 默认复制客户名称 | 文本 | FIELD("so_customer_name") |
| 联系人为空时使用客户名称 | 文本 | COALESCE(FIELD("so_contact_name"), FIELD("so_customer_name")) |
| 计算含税金额 | 数字 | ROUND(FIELD("so_amount") * 1.13, 2) |
| 把评分限制在范围内 | 数字 | MIN(MAX(FIELD("so_score"), 0), 100) |
| 判断金额是否较高 | 开关 | GTE(FIELD("so_amount"), 10000) |
| 开始日期后 7 天作为截止日期 | 日期 | ADD_DAYS(FIELD("so_start_date"), 7) |
| 当前时间后 2 小时作为提醒时间 | 日期时间 | ADD_HOURS(NOW(), 2) |
| 把日期格式化成文本 | 文本 | FORMAT_DATE(FIELD("so_due_date"), "YYYY-MM-DD") |
| 生成随机标识 | 文本 | UUID() |
校验
公式编辑器会在保存前检查常见问题。
| 问题 | 含义 |
|---|---|
| 括号不匹配 | 左括号和右括号必须成对出现 |
| 不支持的函数 | 表达式中使用了当前不支持的函数 |
| 引用自身 | 字段不能通过 FIELD("current_api_name") 直接引用自身 |
| 字段不存在 | 引用的 API 名称在当前表单中不存在 |
| 结果类型不匹配 | 公式返回结果和当前字段数据类型不一致 |
| 表达式为空 | 公式模式必须填写公式表达式 |
使用建议
| 建议 | 说明 |
|---|---|
| 使用插入字段 | 避免手写 API 名称出错 |
| 匹配字段类型 | 文本字段返回文本,数字字段返回数字,开关字段返回布尔值 |
| 保存前先试算 | 使用真实记录测试公式是否符合预期 |
| 谨慎使用依赖变更时 | 该模式会让字段跟随依赖值变化,适合需要持续更新的默认值 |
| 保持表达式可读 | 如果公式过长,可以拆成中间字段分步计算 |
命令中的公式校验
通过系统命令设置公式默认值时,设置 defaultValue.mode 为 formula,并提供非空的 defaultValue.formulaExpression;缺少表达式时返回 FORMS_FIELD_FORMULA_EXPRESSION_REQUIRED。