源宝导读:明源云ERP建模平台提供了强大的页面联动规则引擎,原来需要编写代码完成的联动控制逻辑,现在只需要点点鼠标,通过配置完成。本文从实际案例的角度出发,介绍原始的代码逻辑如何转化为引擎规则的过程。

一、背景

明源云ERP建模平台提供了强大的规则引擎机制,开发或者实施人员只需要通过简单的界面配置就可以完成必填、显隐、颜色等界面交互控制,从需要代码开发转为界面配置,极大提高了业务的交付效率。

在行业中也存在类似规则配置解决方案,但是大部分支持简单的基于代码转换可视化配置,界面也十分复杂,并且缺少如业务参数、关键字等业务应用场景。所以我们如何深入的结合业务特性并且将界面的学习和使用成本降低到最小,就是我们面临的挑战。

本文从实际案例的角度出发,介绍原始的代码逻辑如何转化为引擎规则的过程。

二、规则引擎整体架构

  • 设计时(Design-Time):用于规则的可视化配置,配置内容将会存储到配置文件中;

    • 条件配置:规则对应的业务判断逻辑,如“表编辑模式”;

    • 行为配置:将条件绑定到控件对应的组件属性或行为上,如保存按钮在”表单编辑模式“时显示;

  • 元数据(Metadata)

    • 元数据作为设计时和运行时的桥梁,用于存储设计时布局、字段配置、条件配置信息,通过元数据配置文件进行存储,在运行时解析元数据文件输出布局及规则配置;

  • 运行时(Runtime):解析规则配置,将规则和用户行为绑定, 转化为对应代码可执行逻辑;

    • 解析引擎:将设计时中的规则条件、行为配置等解析为可执行函数,保障执行性能;

    • 事件映射:将组件事件、用户操作等交互行为和规则执行函数绑定,触发事件时执行对应规则逻辑;

    • 执行器:在组件触发事件时构造数据上下文,将上下文对象传递到解析引擎生成的可执行函数中,根据函数执行结果分发到对应组件行为;

三、通过代码实现规则业务

案例:折扣管理中折扣方案应用楼栋或者整栋楼或者单栋楼,涉及到隐藏规则及必填校验规则

“应用范围”为“整个项目”:

“应用范围”为“指定楼栋”:

通过脚本代码如何实现

首先我们尝试将需求转为代码实现设计:

  • 当”应用范围“为”整个项目“时,楼栋名称隐藏,并且取消必填;

  • 当”应用范围“为”指定楼栋”时,楼栋名称显示,楼栋名称为必填。

假设我们通过代码来实现上述场景的逻辑,首先我们会订阅“应用范围“的值更改事件,在事件中判断应用范围为”指定楼栋“时设置楼栋名称显示及必填。

// 订阅应用范围值更改事件
usedScope_valuechanged:function(e){// 获取楼栋名称控件var bldList = appform.get('BldList');switch(e.value){case 'all': // 应用范围:整个项目bldList.hide();bldList.setRequired(false);break;case 'one': // 应用范围:指定楼栋// 显示楼栋列表bldList.show();// 楼栋列表设置为必填bldList.setRequired(true);break;}
}

四、规则设计时配置

基于代码实现我们可以将逻辑抽象为两个部分:

  • 条件:当”应用范围“等于”指定楼栋“

  • 行为:”楼栋名称“设置”必填、显示“都属于对应执行的行为

如果我们需要将条件再做一次抽象,作为可视化界面可配置的,首先我们将条件翻译为代码:

// 当”应用范围“为”指定楼栋“
if(data.usedScop == 'one'){// todo
}

我们可以从代码中得出条件包含以下几点:

  • 条件数据来源类型 :条件匹配会有不同的数据来源,一般是当前表单的数据中某个字段,也有场景是通过URL参数或者业务参数作为判断条件;

  • 条件数据来源值:这里的值是字段名称 ”userScope“;

  • 操作符:用于比较的方式,这里是”=“等于符号,其他操作符还有大于、小于、为空判断等等;

  • 匹配值类型:匹配值常见为固定值或者URL参数值等;

  • 匹配值:匹配值类型对应的值,如果是固定值这里是对应的固定值文本。

我们这里的示例中只有一个条件,实际过程中条件一般会有多个并且还有不同逻辑的组合,所以我们需要考虑多个条件组合及复杂的判断逻辑。

规则行为配置

条件配置完成后,条件需要和对应控件行为做关联,如“隐藏、必填”等,具体配置逻辑如下:

“楼栋名称”控件显隐规则:如果“应用范围为指定楼栋”则“显示”:

  • 绑定控件:楼栋名称;

  • 绑定行为:显隐行为;

  • 对应条件:应用范围为指定楼栋;

  • 行为:显示。

五、规则运行时解析机制

刚才提到的条件及行为都属于设计时的配置或描述,那么在界面运行时如何应用这些配置呢,需要对配置进行解析绑定到对应控件上。

1、将规则配置解析为对应表达式:

// 通过new Function 将规则生成为可执行函数
function rule(e){return e.data.useScope == 'one';
}

2、将规则行为绑定到控件上:

// 订阅应用范围值更改事件
var control = appform.get('usedScope');
control.on('valuechanged', invokeRule);

3、控件触发值改变时执行规则:

//执行规则
function invokeRule(e){var result = rule(e);//执行行为invokeAction(e, result);
}

4、执行组件行为:

function invokeAction(e){var action = e.action;switch(action){case 'show':if(result){e.control.show();}else{e.control.hide();}break;}
}

六、小结

通过这个模型我们在必填、颜色、加粗、编辑模式、显隐等场景都实现了通过可视化配置,已经满足了80%的交互场景配置。后续面向更加复杂通过在线编码支撑,在规则条件上增加代码段在线编码,如API数据源、算法逻辑等,这样就可以通过规则引擎配置全面托管系统的交互逻辑配置,实现交互简单场景可视化配置、复杂场景低代码开发。

------ END ------

作者简介

文同学: 产品经理,目前负责建模平台的规划工作。

也许您还想看

【复杂系统迁移 NET Core平台系列】之界面层

.NET Core MVC扩展实践

如何解决大批量数据保存的性能问题

招商城科走进武汉研发中心,现场编码解锁平台内核技术

从案例角度解析建模平台动态规则引擎相关推荐

  1. 一个简单的规则引擎例子

    本例使用的规则引擎包是RulesEngine,关于RulesEngine的介绍,请自行补充,这里只是一个极简单使用场景. 例子大体就是用户有一些优惠券,系统会根据用户订单情况,筛选可以使用的优惠券供用 ...

  2. Java规则引擎工作原理及其应用

    摘 要 Java规则引擎是一种嵌入在Java程序中的组件,它的任务是把当前提交给引擎的Java数据对象与加载在引擎中的业务规则进行测试和比对,激活那些符合当前数据状态下的业务规则,根据业务规则中声明的 ...

  3. 规则就够用?还是必须上机器学习?46页ppt教你如何把规则引擎和机器学习融会贯通...

    来源:专知 本文附PPT,建议阅读5分钟 究竟是用简单有效的规则引擎就够了还是要上机器学习? 标签:机器学习 [ 导读 ]在实际的业务数据生产系统中,我们往往会碰到这样一个困境:究竟是用简单有效的规则 ...

  4. 从零构建FLINK整合Drools动态规则实时运营系统(项目案例)第2篇(业务介绍篇)

    项目简介 本案例是一个专注于flink动态规则计算的项目,核心技术组件涉及flink.hbase.clickhouse.drools等 项目可根据各类个性化需求进行二次开发后,直接用于实时运营,实时风 ...

  5. 从零构建FLINK整合Drools动态规则实时运营系统(项目案例)第1篇(项目介绍篇)

    1 整体架构 前言 项目介绍在线视频: https://www.bilibili.com/video/BV1zv41157yY 本案例是一个专注于flink动态规则计算的项目,核心技术组件涉及flin ...

  6. 从零构建FLINK整合Drools动态规则实时运营系统(项目案例)-第5篇(用户画像篇)

    前言 项目介绍在线视频: https://www.bilibili.com/video/BV1zv41157yY 本案例是一个专注于flink动态规则计算的项目,核心技术组件涉及flink.hbase ...

  7. 慕容小匹夫 Unity3D移动平台动态读取外部文件全解析

    Unity3D移动平台动态读取外部文件全解析 c#语言规范 阅读目录 前言: 假如我想在editor里动态读取文件 移动平台的资源路径问题 移动平台读取外部文件的方法 补充: 回到目录 前言: 一直有 ...

  8. 匹夫细说Unity3D(一)——移动平台动态读取外部文件全解析

    前言: 一直有个想法,就是把工作中遇到的坑通过自己的深挖总结成一套相同 问题 的解决方案供各位同行拍砖探讨.眼瞅着2015年第一个工作日就要来到了,小匹夫也休息的差不多了,寻思着也该写点东西活动活动大 ...

  9. 搭建一套基于 Groovy 规则引擎的业务风控平台

    黑灰产在互联网领域盛行,从反面推动了业务安全反欺诈领域的快速发展.互联网SAAS服务产品响应市场不断创新,也决定了业务风险的多样性.笔者所在财税领域常见的非财税业务互联网风控场景包括登陆注册.短信接口 ...

最新文章

  1. 第八章 Python 对象和类
  2. canoco5主成分分析步骤_R语言 PCA主成分分析
  3. python unit test_Python Unittest
  4. 游戏视觉控壁纸党可以开始行动!
  5. 雨松MOMO《Unity 3D游戏开发》源码公布
  6. 一个简单的搜索应用程序(http://www.ibm.com/developerworks/cn/java/j-lo-lucene1/)
  7. Java运算符和类型转换
  8. Chirp信号基础知识及matlab实现
  9. win7 64BIT下使用VC2005的问题
  10. label怎么换行 vb_ASP.NET Lable中进行换行解决方案
  11. OpenSSL解析X509证书
  12. j2ee是什么?(1)
  13. CppCheck的使用
  14. python字典根据值求键
  15. Linux发行版本及常用国产系统+系统优化
  16. java第三方类库Guava开源组件使用
  17. 大数据预测:未来最吸金的领域
  18. 动态规划--数位dp--二进制状态压缩
  19. 全志h3通用固件_全志H3固件解包打包方法
  20. final-期末大作业-制作AR射箭小游戏(Unity AR配置详细教程)

热门文章

  1. 项目手札2---关于分页显示时地址栏的风格
  2. 查询表结构的语句总结
  3. rabbitmq学习:
  4. mysql table alter_MySQL-ALTER TABLE命令学习[20180503]
  5. 什么是“ rpcsvchost”,以及为什么它在Mac上运行?
  6. 删除microsoft_如何从您的Microsoft帐户中删除设备
  7. vscode配置、使用git
  8. PHP 基础篇 - PHP 中 DES 加解密详解
  9. R 语言 相关入门资料
  10. 深入理解Magento-第十章-数据操作数据收集器