iBizModel 实体逻辑(PSDELOGIC)中的界面逻辑子类(VIEWLOGIC)详解
iBizModel 实体逻辑(PSDELOGIC)中的界面逻辑子类(VIEWLOGIC)详解
一、界面逻辑概述
在iBizModel模型体系中,实体处理逻辑(PSDELOGIC)是支撑业务系统动态行为的核心模型。其中,界面逻辑(VIEWLOGIC) 作为实体逻辑的重要子类,专门处理前端用户界面交互相关的逻辑流程。界面逻辑通过可视化的节点连接方式,定义了用户操作触发的事件处理、数据展示控制、界面状态管理等前端交互行为。
下图展示界面逻辑建模:
界面逻辑与业务逻辑(DELOGIC)的主要区别在于:
- 执行环境:界面逻辑主要在前端浏览器环境中执行,而业务逻辑主要在后台服务器执行
- 交互对象:界面逻辑直接操作视图部件、表单控件等前端元素,业务逻辑处理实体数据和业务规则
- 响应要求:界面逻辑需要实时响应用户操作,业务逻辑更注重数据一致性和事务处理
二、界面逻辑的应用场景
1. 表单交互处理
界面逻辑广泛应用于表单数据的动态处理场景:
- 实时验证:在用户输入过程中实时校验数据有效性
- 动态显示:根据用户选择动态显示或隐藏表单项
- 数据联动:表单字段之间的级联更新和依赖关系
2. 视图部件控制
控制各类界面部件的交互行为:
- 表格操作:行选择、排序、分页、批量操作等
- 树形导航:节点展开/收起、节点选择、动态加载
- 图表交互:数据钻取、图表类型切换、数据筛选
3. 用户交互反馈
处理用户操作的前端反馈:
- 消息提示:操作成功/失败提示、确认对话框
- 加载状态:异步操作时的加载动画和状态指示
- 异常处理:用户操作异常时的友好提示和恢复机制
4. 业务流程引导
通过界面逻辑实现复杂的用户操作引导:
- 向导流程:多步骤操作的引导和状态管理
- 权限控制:根据用户权限动态控制界面元素的可用性
- 数据权限:基于数据状态的界面操作控制
三、界面逻辑模型关系图例
四、界面逻辑核心组件详解
1. 界面逻辑参数(PSDELOGICPARAM)
界面逻辑参数定义了逻辑执行过程中需要使用的变量和数据对象,与业务逻辑参数相比具有特定的前端特性:
特有参数类型:
当前视图对象(20)
:绑定当前所在的视图对象变量当前容器对象(21)
:绑定当前所在的部件容器对象变量当前部件对象(22)
:绑定当前所在的部件对象变量指定部件对象(23)
:按名称指定的部件对象变量应用上下文变量(24)
:当前会话的应用上下文视图路由参数变量(25)
:导航视图参数变量
参数定义示例:
// 界面逻辑参数定义
psdelogicparam(globalparam: 0, name: "currentData", defaultparam: 1, id: "currentData", parampsdeid: "Demo.Order", logicname: "当前数据对象")
psdelogicparam(globalparam: 20, name: "currentView", id: "currentView", logicname: "当前视图对象")
psdelogicparam(globalparam: 23, name: "dataGrid", id: "dataGrid", logicname: "表格部件对象")
psdelogicparam(globalparam: 24, name: "appContext", id: "appContext", logicname: "应用上下文变量")
2. 界面逻辑节点(PSDELOGICNODE)
界面逻辑节点提供了丰富的前端交互处理能力,特有的节点类型包括:
消息弹窗节点(MSGBOX):
- 支持多种消息类型:INFO(常规)、QUESTION(询问)、WARNING(警告)、ERROR(错误)
- 可配置按钮组合:YESNO(是/否)、YESNOCANCEL(是/否/取消)、OK(确定)、OKCANCEL(确定/取消)
视图部件调用节点(VIEWCTRLINVOKE):
- 调用特定视图部件的操作方法,如刷新表格、重置表单等
- 支持参数传递和返回值处理
前端插件节点(PFPLUGIN):
- 集成自定义前端插件,扩展界面逻辑能力
- 支持插件参数配置和结果回调
脚本代码节点(RAWJSCODE):
- 直接执行JavaScript代码片段
- 支持动态参数注入和结果返回
3. 界面逻辑连接(PSDELOGICLINK)
界面逻辑连接支持复杂的条件判断和流程控制:
连接条件类型:
- 单项条件(SINGLE):基于单个参数值的条件判断
- 组合条件(GROUP):多个条件的与(AND)/或(OR)组合
- 异步结束(defaultlink: 2):前端异步调用结束时进入
- 异步拒绝(defaultlink: 3):前端异步调用被拒绝时进入
- 异常连接(defaultlink: 9):处理节点执行异常时的备用路径
条件操作支持:
- 等于(EQ)、不等于(NOTEQ)
- 大于(GT)、大于等于(GTANDEQ)
- 小于(LT)、小于等于(LTANDEQ)
- 空值判断(ISNULL、ISNOTNULL)
- 文本包含(LIKE、LEFTLIKE、RIGHTLIKE)
五、界面逻辑DSL示例详解
以下是一个完整的界面逻辑DSL示例,展示了各种界面交互场景:
//iBizModelDSL建模指令,目标:演示完整的界面逻辑流程
def de_order = "Demo.ORDER"
def mod_demo = "Demo"psdelogic(logictype: "VIEWLOGIC", codename: "order_management_ui", name: "订单管理界面逻辑", psdeid: de_order,psmoduleid: mod_demo
){// 参数定义psdelogicparam(globalparam: 0, name: "Default", defaultparam: 1, id: "Default", parampsdeid: de_order, logicname: "传入数据对象")psdelogicparam(globalparam: 23, name: "orderGrid", id: "orderGrid", logicname: "订单表格部件")psdelogicparam(globalparam: 24, name: "appContext", id: "appContext", logicname: "应用上下文")psdelogicparam(globalparam: 10, name: "userChoice", id: "userChoice", stddatatype: 25, logicname: "用户选择结果")// 开始节点psdelogicnode(leftpos: 100, codename: "Begin", name: "开始处理", id: "Begin", logicnodetype: "BEGIN", toppos: 100)// 确认删除对话框psdelogicnode(leftpos: 100, codename: "ConfirmDelete", name: "确认删除对话框", id: "ConfirmDelete", logicnodetype: "MSGBOX", toppos: 250,param1: "OKCANCEL",param2: "QUESTION",param3: "确认删除",param4: "确定要删除选中的订单吗?此操作不可恢复。")// 用户选择处理分支psdelogicnode(leftpos: 100, codename: "ProcessChoice", name: "处理用户选择", id: "ProcessChoice", logicnodetype: "PREPAREJSPARAM", toppos: 400){psdelnparam(paramtype: "SETPARAMVALUE",dstpsdlparamid: "userChoice",srcvaluetype: "SRCDLPARAM",srcpsdlparamid: "Default",customsrcparam: "returnValue",name: "记录用户选择结果")}// 执行删除操作psdelogicnode(leftpos: 100,codename: "ExecuteDelete",name: "执行删除操作",id: "ExecuteDelete",logicnodetype: "DEACTION",toppos: 550,dstpsdeid: de_order,dstpsdeactionid: de_order + ".Remove",dstpsdlparamid: "Default",retpsdlparamid: "Default")// 刷新表格psdelogicnode(leftpos: 100,codename: "RefreshGrid",name: "刷新订单表格",id: "RefreshGrid",logicnodetype: "VIEWCTRLINVOKE",toppos: 700,srcpsdlparamid: "orderGrid",param2: "refresh")// 成功提示psdelogicnode(leftpos: 100,codename: "SuccessMsg",name: "操作成功提示",id: "SuccessMsg",logicnodetype: "MSGBOX",toppos: 850,param1: "OK",param2: "INFO",param3: "操作成功",param4: "订单删除成功!")// 异常处理节点psdelogicnode(leftpos: 300,codename: "ErrorHandler",name: "异常处理",id: "ErrorHandler",logicnodetype: "MSGBOX",toppos: 550,param1: "OK",param2: "ERROR",param3: "操作失败",param4: "删除操作执行失败,请重试或联系管理员。")// 结束节点psdelogicnode(leftpos: 100, codename: "End", name: "结束", id: "End", logicnodetype: "END", toppos: 1000)// 逻辑连接定义psdelogiclink(ordervalue: 100, name: "开始到确认对话框", srcpsdelogicnodeid: "Begin", dstpsdelogicnodeid: "ConfirmDelete")// 用户确认删除分支psdelogiclink(ordervalue: 200, name: "确认删除处理", srcpsdelogicnodeid: "ConfirmDelete", dstpsdelogicnodeid: "ProcessChoice"){psdellcond(dstpsdlparamid: "Default", logictype: "SINGLE", condvalue: "ok", psdbvalueopid: "EQ", name: "用户选择确认")}psdelogiclink(ordervalue: 300, name: "处理选择到执行删除", srcpsdelogicnodeid: "ProcessChoice", dstpsdelogicnodeid: "ExecuteDelete")psdelogiclink(ordervalue: 400, name: "删除成功刷新表格", srcpsdelogicnodeid: "ExecuteDelete", dstpsdelogicnodeid: "RefreshGrid")psdelogiclink(ordervalue: 500, name:刷新后提示成功, srcpsdelogicnodeid: "RefreshGrid", dstpsdelogicnodeid: "SuccessMsg")psdelogiclink(ordervalue: 600, name: "完成处理", srcpsdelogicnodeid: "SuccessMsg", dstpsdelogicnodeid: "End")// 用户取消删除分支psdelogiclink(ordervalue: 700, name: "用户取消操作", srcpsdelogicnodeid: "ConfirmDelete", dstpsdelogicnodeid: "End"){psdellcond(dstpsdlparamid: "Default", logictype: "SINGLE", condvalue: "cancel", psdbvalueopid: "EQ", name: "用户选择取消")}// 异常处理连接psdelogiclink(ordervalue: 800, defaultlink: 9, name: "删除操作异常", srcpsdelogicnodeid: "ExecuteDelete", dstpsdelogicnodeid: "ErrorHandler")psdelogiclink(ordervalue: 900, name: "异常处理后结束", srcpsdelogicnodeid: "ErrorHandler", dstpsdelogicnodeid: "End")
}
六、界面逻辑的高级特性
1. 异步操作处理
界面逻辑天然支持异步操作场景:
// 异步数据加载示例
psdelogicnode(codename: "AsyncLoadData",name: "异步加载订单数据",logicnodetype: "DEDATASET",dstpsdeid: de_order,dstpsdedatasetid: de_order + ".Default",dstpsdlparamid: "filter",retpsdlparamid: "dataList"
)
2. 部件事件响应
处理界面部件的各种事件:
// 表格行点击事件处理
psdelogicnode(codename: "HandleRowClick",name: "处理行点击事件",logicnodetype: "PREPAREJSPARAM"
){psdelnparam(paramtype: "SETPARAMVALUE",dstpsdlparamid: "selectedRow",srcvaluetype: "SRCDLPARAM",srcpsdlparamid: "eventData",customsrcparam: "rowData")
}
3. 动态界面更新
根据业务状态动态更新界面:
// 动态控制界面元素状态
psdelogicnode(codename: "UpdateUIState",name: "更新界面状态",logicnodetype: "VIEWCTRLINVOKE",srcpsdlparamid: "toolbar",param2: "setItemState",param3: "deleteBtn",param4: "disabled"
)
4. 更多示例
更多示例请访问iBizAppHUB示例系统,点击界面逻辑
菜单查看全部界面逻辑示例
通过最右侧的调试工具栏,可查看界面逻辑
在iBizModeling
工具中的详细配置及DSL内容
七、总结
界面逻辑(VIEWLOGIC)作为iBizModel体系中处理前端交互的核心组件,通过可视化的节点连接方式,为复杂的前端业务场景提供了强大的支持。其丰富的节点类型、灵活的参数系统和强大的条件判断能力,使得开发人员能够高效地构建出交互丰富、用户体验良好的前端应用。
在实际项目中,合理运用界面逻辑可以显著提升开发效率,降低前端开发的复杂度,同时保证代码的可维护性和可扩展性。随着业务需求的不断变化,界面逻辑的模块化设计和重用性特性将发挥越来越重要的作用。