企业级自定义表单引擎解决方案(十二)--表单规则引擎2
.net core研发的自定义表单引擎,采用强大的规则引擎将所有的业务串联起来的,和其他低代码平台是有本质的区别的,目标是完全解放繁琐的CRUD工作。
规则引擎是自定义表单最为核心的内容,也是与其他低代码工具最为本质的区别,非常重要的内容,对于读者来说也是最难理解内容。
没有规则引擎的低代码工具,即使前端做得再花哨,也仅仅是解决了一些复制粘贴的问题
视图和表单都可以定义规则,规则将所有业务串联起来,至关重要。
接上一篇文章,企业级自定义表单引擎解决方案(十二)--表单规则引擎1
规则执行管理
- 绑定数据(actionType=3)
绑定数据主要是定义数据从一个地方绑定到另一个地方,一个绑定数据规则可以定义执行多条绑定逻辑
绑定数据由两个参数:fromTrans:定义绑定数据来源,fromTransType:值为1,2,3,4,1代表绑定数据源为方法执行结果,2代表绑定数据源从其他控件获取,3代表绑定数据源从触发事件绑定的数据获取,4代表从表达式获取值,toTrans:定义将数据绑定到哪里
例1:
配置:
[{"fromTrans":{"methodRuleId":1,"fromTransType":1},"toTrans":{"subFormId":"084beddb-c518-46df-8647-de73739c3631","subViewId":"d2b0b615-4678-462d-a795-34bb3b46f75e"}}]
说明:此配置用在ListView列表视图,点击列表编辑按钮触发的事件的其中一个规则执行,前面还有设置弹出框显示规则执行和执行后端get方法,此规则定义从get方法获取结果赋值给子表单XX子视图XX,即将Get方法结果赋值给编辑表单的ItemView编辑视图,ItemView编辑视图即可绑定表单数据。
例2:
配置:
[{"fromTrans":{"propertyName":"id","fromTransType":3},"toTrans":{"subFormId":"af1756bb-da48-4b5f-821d-78aeeaddbd2e","subViewId":"b022e1c3-ea6f-4f59-b2ef-67efec2701e0","propertyName":"oTN1_Id","type":"setparam"}}]
说明:此配置用于一对多对主表数据进行编辑,将编辑主表时主表Id传递给子表的列表表单ListView视图的参数,参数名为oTN1_Id
例3:
配置:
[{"fromTrans":{"fromTransType":2,"transType":"getparam","propertyName":"oTN1_Id"},"toTrans":{"subFormId":"084beddb-c518-46df-8647-de73739c3631","subViewId":"d2b0b615-4678-462d-a795-34bb3b46f75e","propertyName":"oTN1_Id"}}]
说明:此配置用于一对多对主表数据进行编辑,编辑时可以新增子表数据,新增或者编辑子表数据规则自动将主表的Id赋值给子表的oTN1_Id,大致逻辑: 打开主表编辑对话框,将主表Id赋值给子表表单的ListView视图的参数,新增子表时,将ListView参数oTN1_Id的值赋值给子表编辑表单的ItemView视图的oTN1_Id字段 。
例4:
配置:
[{"fromTrans":{"fromTransType":3},"toTrans":{"subViewId":"e79df39e-d855-4a86-880d-046f60a9e2e8","propertyName":"reset"}}]
说明:弹出新增数据对话框,重置子视图ItemView的值
例5:
配置:
[{"fromTrans":{"fromTransType":4,"expressionType":0,"config":"新增"},"toTrans":{"subFormId":"bbb537c4-078e-4694-882a-b7677057b198","subViewId":"cea92081-7f3b-420d-a5c2-48912a4435ec","propertyName":"state"}}]
说明:例子功能为将子表单的编辑子视图的状态字段赋值为新增
- 停止执行(actionType=5)
停止配置为空,当执行到停止执行Action时,结束事件后续规则执行,直接中断事件 - 执行其他规则(actionType=7)
触发其他事件,执行到此规则时,先触发新的事件,执行新的事件的一系列规则,再接着执行后续本事件的规则
例:
配置:
{"eventName":"click"}
对象:查询按钮Id
说明:此配置用于ListView列表视图,当执行到此规则时,触发查询按钮的click事件,先执行查询按钮的click事件配置的规则,再执行后续规则
- 弹出消息提示(actionType=14)
弹出消息提示,提示错误、警告、提示等消息,参见ant消息提示
例:
配置:
{"content":"数据保存成功","msgType":"success"}
说明:此配置用于ItemView编辑视图保存方法执行成功好提示用户
- 条件判断(actionType=4)
定义一个表达式,和一个trueActions集合和falseActions集合,表达式执行结果为true时,执行trueActions的规则集合,表达式结果为false时,执行falseActions的规则集合,执行完成之后,再接着执行条件判断规则后续规则。
表达式定义如下:
- expressionType:定义表达式类型
- config:定义表达式配置
- expressionType为同值具体说明:
值为0:固定值,定义一个常量,比如true,1,'aa'等
值为1:值从方法执行结果获取,config配置:methodRuleId定义方法ruleId,propertyName定义从方法结果哪个属性获取值,多层级用冒号:隔开。
值为2:从对象获取值,可以从不同的表单、视图、控件获取特定的值,不同的对象定义的可获取值不同。config配置对象信息以及额外的参数
值为3:从事件绑定的数据获取,config的propertyName定义从事件对象的(触发事件时,会将特定事件的关联数据绑定到事件对象中,比如点击列表视图某行的编辑按钮,会将当前行的数据绑定的事件对象中)哪个属性获取值,多层级用冒号:隔开
值为4:定义转换函数,将数据从一种类型转换为另外一种类型。config的配置:expressionFuncName,转换的目标类型,bool、string、date、number,后续还可以扩展其他特定转换函数,children,子表达式集合,转换函数只有一个子表达式
值为5:定义关系表达式,执行结果为true或者false,config的配置:expressionFuncName,关系运算符,=、!=、>、>=、<、<=。children,子表达式集合,转换函数只有两个子表达式,第一个子表达式定义关系运算左边的值,第二个表达式结果定义关系表达式右边的值。
值为6:定义逻辑表达式,执行结果为true或者false,config的配置:expressionFuncName,逻辑运算符&&、||、!,&&和||可定义多可children,多个children的结果执行&&或者||运算,!只能定义一个children
值为7:集合相关函数计算,config的配置:expressionFuncName,length获取集合数量,后续可定义其他函数,children子表达式集合只有一个
- 弹出确认提示(actionType=6)
同条件判断规则,只是这里弹出用户确认对话框,提示用户选择是否确认,再定义trueActions和falseActions规则集合
例:
配置:
{"content":"是否确认删除?","trueActions":[{"actionType":2,"actionConfig":{"aplicationCode":"Default","isTransaction":true,"methods":[{"ruleId":1,"objectName":"Depts","methodId":"Delete","transfors":[{"paramName":"paramValues","transfors":[{"parentParamName":"paramValues","paramName":"id","transType":"eventData","transTypeParam":"id"}]}]}]}},{"actionType":7,"objId":"fd616db9-52f1-4f40-84f6-6a5c6016753d","actionConfig":{"eventName":"click"}}],"falseActions":[{"actionType":5}]}
说明:弹出是否确认删除提示,用户选择是,则执行删除方法,然后触发查询按钮点击事件,执行查询按钮点击事件规则,用户选择否,则停止执行
- 重新加载页面(actionType=8)
重新加载页面会销毁前端所有组件,重新渲染界面,即重新载入vue页面,相当于第一次打开某个页面。常常绑定到列表页面的“刷新”按钮上。 - 执行导出Excel方法(actionType=9)
同【执行方法(actionType=2)】方法参数,导出Excel通常执行ListWhere后端默认方法,另外会额外传递Excel模版信息参数,模版配置定义在ListView的属性设置中,exportexcel。
例:
配置:{"aplicationCode":"Default","isTransaction":true,"methods":[{"ruleId":1,"objectName":"TemplateTests","methodId":"ListWhere","transfors":[{"transType":"exportexcel"}]}]}
实际请求:{"routeName":"SingleTemplateTest","applicationCode":"Default","isTransaction":true,"methods":[{"methodId":"ListWhere","ruleId":1,"objectName":"TemplateTests","paramModel":"local","datas":{"sqlWheres":{"sqlExpressType":1,"children":[]},"excelDicts":[{"dict":"edu","field":"education"},{"dict":"sex","field":"sex"},{"dict":"post","field":"post"}],"excelName":"单表测试Excel数据","excelTemplate":[{"name":"string字段","field":"field1","fieldType":5,"isRequred":true,"validateType":0},{"name":"string2字段","field":"field2","fieldType":5,"validateType":0},{"name":"Int字段1","field":"fieldInt1","fieldType":1,"validateType":1},{"name":"int2字段","field":"fieldInt2","fieldType":1,"validateType":1},{"name":"datetime字段1","field":"fieldDatetime1","fieldType":7,"validateType":10},{"name":"datetime字段2","field":"fieldDatetime2","fieldType":7,"validateType":10},{"name":"bool字段","field":"fieldBool1","fieldType":4,"validateType":1},{"name":"学历","field":"education","fieldType":5,"validateType":11},{"name":"性别","field":"sex","fieldType":5,"validateType":11}]}}]}
- 执行导出Excel模版方法(actionType=13)
同【执行导出Excel方法(actionType=9)】方法,只是这里的transType值为downexceltemplate
例:
配置:
{"aplicationCode":"Default","isTransaction":true,"methods":[{"ruleId":1,"objectName":"TemplateTests","methodId":"ListWhere","transfors":[{"transType":"downexceltemplate"}]}]}
- 获取数据(actionType=12)
一般情况用在条件表达式规则执行的地方,另外可以用于流程引擎执行表单验证方法(不是需要获取值,只是触发表单验证)
例:
配置:
{"fromTransType":2,"fromTrans":{"transType":"validate"}}
- 打开工作流(actionType=10)
从表单处,有两种方式打开工作流,一种是发起流程,一种是查询流程,打开流程管理对话框
例1:
配置:
{"isCreate":true,"flowDefineId":"5da7e6b8d6b444c9866b15ab028dd6c6"}
说明:发起流程,isCreate标识为创建流程,flowDefineId为流程定义Id,发起时,找流程定义最新发布的流程版本发起流程实例
例2:
配置:{"formIdFieldName":"id"}
说明:以表单Id打开流程管理界面,流程都会挂载一个表单,传递表单Id可以找到流程实例,然后打开流程管理界面。
- 获取后端方法执行(actionType=11)
此规则同【执行方法(actionType=2)】,这里只是获取执行方法的参数,不正真的触发后端方法执行,真正的执行在其他地方控制执行。目前只用在流程引擎提交或者保存时,流程引擎需要同时保存表单方法和流程数据,在流程引擎执行时调用自定义表单方法。
例:
配置:
{"aplicationCode":"Default","isTransaction":true,"methods":[{"ruleId":1,"objectName":"Vacation","methodId":"CreateOrUpdate","paramModel":"local","execType":"workflow_formId","transfors":[{"paramName":"paramValues","transType":""}]},{"ruleId":2,"objectName":"Vacation","methodId":"Fact","paramModel":"server","execType":"workflow_fact","serverParams":[{"ruleId":"1","targetFields":"datas:paramValues:id"}]}]}
wike文档地址:https://gitee.com/kuangqifu/sprite/wikis/pages
开源地址:https://gitee.com/kuangqifu/sprite
体验地址:http://47.108.141.193:8031 (首次加载可能有点慢,用的阿里云最差的服务器)
自定义表单文章地址:https://www.cnblogs.com/spritekuang/
流程引擎文章地址:https://www.cnblogs.com/spritekuang/category/834975.html (采用WWF开发,已过时,已改用Elsa实现,https://www.cnblogs.com/spritekuang/p/14970992.html )
posted on 2022-07-03 17:41 spritekuang 阅读(538) 评论(0) 编辑 收藏 举报