当前位置: 首页 > news >正文

蓝凌EKP产品:低门槛、可扩展、可视化公式引擎应用示例

引言

在实际的 OA、流程管理、数据驱动系统中,我们经常遇到需要对字段进行动态计算、自动赋值、条件分支等逻辑操作。传统做法依赖技术人员手写脚本(如 JavaScript、Groovy、BeanShell 等),门槛高、维护难。

本篇文章将分享我们如何基于 BeanShell 和自研的 FormulaParser 构建了一套低门槛、高扩展性的公式引擎,并通过可视化拖拽方式让非技术用户也能“拼出”可执行的逻辑表达式。

一、需求背景

  • 公式功能的高频使用场景:

    • 表单字段联动计算;

    • 审批流程中的动态条件判断;

    • 报表字段的动态汇总和统计;

    • 数据赋值规则定义。

  • 传统方式的问题:

    • 函数名/变量写错导致运行失败;

    • 用户不懂 Java 语法;

    • 无法统一复用函数;

    • 安全风险:脚本中可能执行敏感类或反射操作。

二、架构设计:公式引擎 FormulaParser

我们使用了 bsh.Interpreter 执行脚本,核心功能包括:

  • ✅ 支持变量注入与解析(通过 $变量名$);

  • ✅ 支持函数扩展与统一管理;

  • ✅ 执行前黑名单校验、防注入;

  • ✅ 支持数据上下文绑定;

  • ✅ 兼容公式的加密解密执行;

三、拖拽公式编辑器:降低使用门槛

为了解决“不会写脚本”的问题,我们设计了公式可视化编辑器:

  • 拖动变量、字段组件到编辑区;

  • 支持基本运算符、函数调用、嵌套表达式;

  • 实时预览脚本内容;

  • 支持一键调试;

        

左侧栏拖动变量

拖拽即可见

一键提供模拟执行

不想要模拟只想要校验快速返回结果

四、函数扩展机制:面向开发者友好

我们定义了函数扩展接口 IFormulaFuncProvider,并支持动态注册,有现成的可扩展配置实现。

<?xml version="1.0" encoding="UTF-8"?>
<pluginxmlns="http://www.example.org/plugin-config"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.example.org/plugin-config ../../plugin.xsd "><extensionpoint="com.landray.kmss.sys.formula"model="com.landray.kmss.km.review.model.KmReviewMain"><itemname="function"><paramname="className"value="com.landray.kmss.km.reviewex.formula.CRMFunctions" /></item></extension>
</plugin>

com.landray.kmss.km.reviewex.formula.CRMFunctions 为类名,方法为静态类,主要方便脚本执行,静态类不需要创建对象,函数相当于静态工具类。

扩展函数列表

        

五、底层执行流程图


六、安全机制:黑名单与语法限制

  • 禁止脚本中执行危险操作(如 Runtime.getRuntime() 等);

  • 支持配置黑名单关键字,动态屏蔽;

  • 禁止 Unicode 绕过注入;

七、总结

本文介绍了我们如何基于 BeanShell 实现一套高度可定制、支持可视化拖拽的公式引擎。通过技术与体验的结合,我们大幅降低了业务配置逻辑的门槛,也提升了系统的灵活性与安全性。

相关文章:

  • 【系统介绍】IBMS智能建筑集成管理平台-智能化子系统的大脑
  • Gartner<Reference Architecture Brief: Data Integration>学习心得
  • RTX4060安装cuda12.3 cudnn8.9
  • Chrome 优质插件计划
  • 【深度学习】深度学习中的张量:从多维数组到智能计算单元
  • jpeg与 Mjpeg数据格式有什么区别
  • 【电力物联网】SDN架构与工作原理介绍
  • PHP基础-语法变量
  • MVVM 分层思想详解
  • Python自动化测试数据驱动解决数据错误
  • 超级神冈探测器2025.6.11
  • 2025年- H81-Lc189--279.完全平方数(动态规划)--Java版
  • 学习日记-day27-6.11
  • leetcode_283.移动零
  • 选择与方法(4) 职场内篇 沿着赤道走,到不了北极,找准职场方向,建立可迁移技能
  • 各项目变更频繁时,如何保持整体稳定
  • 技术研究 | 一种检测大模型是否泄露训练数据的新方法
  • 【AI大模型入门指南】概念与专有名词详解 (一)
  • 雷卯针对易百纳EB-SS528-DC-175开发板防雷防静电方案
  • AI视频生成API:一站式视频生成解决方案