企業級自定義表單引擎解決方案(十二)--表單規則引擎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 (首次加載可能有點慢,用的阿里云最差的服務器)
自定義表單文章地址:http://www.rzrgm.cn/spritekuang/
流程引擎文章地址:http://www.rzrgm.cn/spritekuang/category/834975.html (采用WWF開發,已過時,已改用Elsa實現,http://www.rzrgm.cn/spritekuang/p/14970992.html )
posted on 2022-07-03 17:41 spritekuang 閱讀(641) 評論(0) 收藏 舉報
浙公網安備 33010602011771號