spritekuang

导航

企业级自定义表单引擎解决方案(十二)--表单规则引擎2

.net core研发的自定义表单引擎,采用强大的规则引擎将所有的业务串联起来的,和其他低代码平台是有本质的区别的,目标是完全解放繁琐的CRUD工作。


规则引擎是自定义表单最为核心的内容,也是与其他低代码工具最为本质的区别,非常重要的内容,对于读者来说也是最难理解内容。
没有规则引擎的低代码工具,即使前端做得再花哨,也仅仅是解决了一些复制粘贴的问题
视图和表单都可以定义规则,规则将所有业务串联起来,至关重要。
接上一篇文章,企业级自定义表单引擎解决方案(十二)--表单规则引擎1

规则执行管理

  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"}}]
说明:例子功能为将子表单的编辑子视图的状态字段赋值为新增

  1. 停止执行(actionType=5)
    停止配置为空,当执行到停止执行Action时,结束事件后续规则执行,直接中断事件
  2. 执行其他规则(actionType=7)
    触发其他事件,执行到此规则时,先触发新的事件,执行新的事件的一系列规则,再接着执行后续本事件的规则
    例:

配置:{"eventName":"click"}
对象:查询按钮Id
说明:此配置用于ListView列表视图,当执行到此规则时,触发查询按钮的click事件,先执行查询按钮的click事件配置的规则,再执行后续规则

  1. 弹出消息提示(actionType=14)
    弹出消息提示,提示错误、警告、提示等消息,参见ant消息提示
    例:

配置:{"content":"数据保存成功","msgType":"success"}
说明:此配置用于ItemView编辑视图保存方法执行成功好提示用户

  1. 条件判断(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子表达式集合只有一个

  1. 弹出确认提示(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}]}
说明:弹出是否确认删除提示,用户选择是,则执行删除方法,然后触发查询按钮点击事件,执行查询按钮点击事件规则,用户选择否,则停止执行

  1. 重新加载页面(actionType=8)
    重新加载页面会销毁前端所有组件,重新渲染界面,即重新载入vue页面,相当于第一次打开某个页面。常常绑定到列表页面的“刷新”按钮上。
  2. 执行导出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}]}}]}

  1. 执行导出Excel模版方法(actionType=13)
    同【执行导出Excel方法(actionType=9)】方法,只是这里的transType值为downexceltemplate
    例:

配置:{"aplicationCode":"Default","isTransaction":true,"methods":[{"ruleId":1,"objectName":"TemplateTests","methodId":"ListWhere","transfors":[{"transType":"downexceltemplate"}]}]}

  1. 获取数据(actionType=12)
    一般情况用在条件表达式规则执行的地方,另外可以用于流程引擎执行表单验证方法(不是需要获取值,只是触发表单验证)
    例:

配置:{"fromTransType":2,"fromTrans":{"transType":"validate"}}

  1. 打开工作流(actionType=10)
    从表单处,有两种方式打开工作流,一种是发起流程,一种是查询流程,打开流程管理对话框
    例1:

配置:{"isCreate":true,"flowDefineId":"5da7e6b8d6b444c9866b15ab028dd6c6"}
说明:发起流程,isCreate标识为创建流程,flowDefineId为流程定义Id,发起时,找流程定义最新发布的流程版本发起流程实例
例2:
配置:{"formIdFieldName":"id"}
说明:以表单Id打开流程管理界面,流程都会挂载一个表单,传递表单Id可以找到流程实例,然后打开流程管理界面。

  1. 获取后端方法执行(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  阅读(417)  评论(0编辑  收藏  举报