后台脚本是 Linker 的服务端规则能力。它基于 AviatorScript 表达式引擎运行,用来在不修改系统源码的前提下,实现字段计算、条件判断、统计回填、创建记录时的数据加工等逻辑。
和表单脚本不同,后台脚本运行在服务端,主要用于:
- 事件执行器中的字段赋值
- 事件执行器中的统计脚本
- 自动创建记录时的字段映射
- 批量编辑中的脚本赋值
适合解决什么问题
后台脚本适合处理以下类型的业务规则:
- 根据多个字段计算一个结果字段
- 根据记录内容动态决定赋值结果
- 从当前记录或关联记录中提取值
- 对一组匹配记录做统计后回填
- 在自动创建记录时生成结构化内容
如果需求只是“新增一个固定字段”或“手工录入”,通常不需要脚本。
只有当规则会变化、依赖条件较多、或者需要自动计算时,才建议使用后台脚本。
执行原理
后台脚本的一般执行过程如下:
- 业务动作发生,例如创建记录、更新记录、执行批量编辑。
- 系统把当前记录、可用字段值和内置函数注入脚本环境。
- 脚本返回一个结果。
- 返回结果被用于赋值、判断或回填。
这意味着脚本本身通常只负责“计算结果”,真正的保存、更新、通知等动作仍由系统模块完成。
内置函数
系统在标准 AviatorScript 基础上提供了一些与业务密切相关的函数。
caller()
返回当前系统用户的 ID。
date_add(field, i, unit)
对时间值做加减计算。
field:时间字段值i:间隔数值unit:单位,支持s、m、h、d、M、Y
date_diff(startDate, endDate, unit)
计算两个时间之间的差值。
startDate:开始时间endDate:结束时间unit:差值单位,支持s、m、h、d、M、Y
queryById(id, fields)
按 ID 查询一条记录的指定字段。
query(sql, params)
执行自定义查询语句并返回结果。
该能力较强,建议只在确实需要时使用,并确保 SQL 逻辑清晰可维护。
dictValue(entityName, fieldName, text)
根据单选字段的显示文本,获取其实际存储值。
可用变量
当脚本围绕某条业务记录执行时,系统会自动注入当前记录数据。
__CURRENT_RECORD
表示当前记录本身,例如:
javascript
__CURRENT_RECORD.amount级联字段值
如果需要读取关联字段,可以直接使用点路径。例如:
javascript
createdBy.dept.deptName系统会在执行前解析这些字段值。
__RECORDS
在部分统计类事件脚本中,系统会额外提供 __RECORDS,表示当前匹配到的源记录集合。
这个变量通常用于:
- 汇总一组记录
- 取最新一条记录
- 自定义复杂统计逻辑
脚本示例
示例场景:根据订单金额和客户等级计算折后金额。
javascript
let discount = userLevel == "VIP" ? 0.8 : (userLevel == "Regular" ? 0.9 : 1.0);
let finalAmount = amount * discount;
finalAmount > 0 ? finalAmount : 0;如果把这段脚本配置在字段赋值事件中,系统就会在记录保存时自动算出目标字段值。

编写建议
- 让脚本只做一件事,避免把多段业务混写在一起
- 优先使用字段和内置函数,不要一开始就写复杂查询
- 对金额、日期、状态类字段,先确认字段类型再写脚本
- 如果脚本需要复用,尽量保持变量命名一致
- 配置前先明确“输入字段是什么,输出结果要写到哪里”
常见使用场景
- 字段赋值:自动生成到期时间、金额、状态
- 引用统计:把子表统计结果回填到主记录
- 字段匹配统计:按业务字段匹配后做汇总
- 创建记录:自动带出来源记录中的部分字段
- 批量编辑:批量重算某些字段
与表单脚本的区别
- 后台脚本:运行在服务端,适合保存后规则和自动化处理
- 表单脚本:运行在表单交互阶段,适合页面联动、必填切换、实时回填
如果目标是“用户填写时立即看到变化”,优先用 表单脚本。
如果目标是“数据保存后自动处理”,优先用后台脚本。
