引言
在实际的 OA、流程管理、数据驱动系统中,我们经常遇到需要对字段进行动态计算、自动赋值、条件分支等逻辑操作。传统做法依赖技术人员手写脚本(如 JavaScript、Groovy、BeanShell 等),门槛高、维护难。
本篇文章将分享我们如何基于 BeanShell
和自研的 FormulaParser
构建了一套低门槛、高扩展性的公式引擎,并通过可视化拖拽方式让非技术用户也能“拼出”可执行的逻辑表达式。
一、需求背景
-
公式功能的高频使用场景:
-
表单字段联动计算;
-
审批流程中的动态条件判断;
-
报表字段的动态汇总和统计;
-
数据赋值规则定义。
-
-
传统方式的问题:
-
函数名/变量写错导致运行失败;
-
用户不懂 Java 语法;
-
无法统一复用函数;
-
安全风险:脚本中可能执行敏感类或反射操作。
-
二、架构设计:公式引擎 FormulaParser
我们使用了 bsh.Interpreter
执行脚本,核心功能包括:
-
✅ 支持变量注入与解析(通过
$变量名$
); -
✅ 支持函数扩展与统一管理;
-
✅ 执行前黑名单校验、防注入;
-
✅ 支持数据上下文绑定;
-
✅ 兼容公式的加密解密执行;