当前位置: 首页 > news >正文

iBizModel 实体逻辑(PSDELOGIC)中的界面逻辑子类(VIEWLOGIC)详解

iBizModel 实体逻辑(PSDELOGIC)中的界面逻辑子类(VIEWLOGIC)详解

一、界面逻辑概述

在iBizModel模型体系中,实体处理逻辑(PSDELOGIC)是支撑业务系统动态行为的核心模型。其中,界面逻辑(VIEWLOGIC) 作为实体逻辑的重要子类,专门处理前端用户界面交互相关的逻辑流程。界面逻辑通过可视化的节点连接方式,定义了用户操作触发的事件处理、数据展示控制、界面状态管理等前端交互行为。

下图展示界面逻辑建模:在这里插入图片描述

界面逻辑与业务逻辑(DELOGIC)的主要区别在于:

  • 执行环境:界面逻辑主要在前端浏览器环境中执行,而业务逻辑主要在后台服务器执行
  • 交互对象:界面逻辑直接操作视图部件、表单控件等前端元素,业务逻辑处理实体数据和业务规则
  • 响应要求:界面逻辑需要实时响应用户操作,业务逻辑更注重数据一致性和事务处理

二、界面逻辑的应用场景

1. 表单交互处理

界面逻辑广泛应用于表单数据的动态处理场景:

  • 实时验证:在用户输入过程中实时校验数据有效性
  • 动态显示:根据用户选择动态显示或隐藏表单项
  • 数据联动:表单字段之间的级联更新和依赖关系
2. 视图部件控制

控制各类界面部件的交互行为:

  • 表格操作:行选择、排序、分页、批量操作等
  • 树形导航:节点展开/收起、节点选择、动态加载
  • 图表交互:数据钻取、图表类型切换、数据筛选
3. 用户交互反馈

处理用户操作的前端反馈:

  • 消息提示:操作成功/失败提示、确认对话框
  • 加载状态:异步操作时的加载动画和状态指示
  • 异常处理:用户操作异常时的友好提示和恢复机制
4. 业务流程引导

通过界面逻辑实现复杂的用户操作引导:

  • 向导流程:多步骤操作的引导和状态管理
  • 权限控制:根据用户权限动态控制界面元素的可用性
  • 数据权限:基于数据状态的界面操作控制

三、界面逻辑模型关系图例

PSDELOGIC
实体处理逻辑
VIEWLOGIC
界面逻辑
PSDELOGICNODE
逻辑节点
PSDELOGICLINK
逻辑连接
PSDELOGICPARAM
逻辑参数
界面逻辑节点类型
BEGIN
开始节点
MSGBOX
消息弹窗
VIEWCTRLINVOKE
视图部件调用
DEACTION
实体行为调用
END
结束节点
界面逻辑参数类型
数据对象变量
视图对象变量
上下文变量
外部引用模型
PSAPPVIEW
应用视图
PSDEFORM
实体表单
PSDEUIACTION
界面行为

四、界面逻辑核心组件详解

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体系中处理前端交互的核心组件,通过可视化的节点连接方式,为复杂的前端业务场景提供了强大的支持。其丰富的节点类型、灵活的参数系统和强大的条件判断能力,使得开发人员能够高效地构建出交互丰富、用户体验良好的前端应用。

在实际项目中,合理运用界面逻辑可以显著提升开发效率,降低前端开发的复杂度,同时保证代码的可维护性和可扩展性。随着业务需求的不断变化,界面逻辑的模块化设计和重用性特性将发挥越来越重要的作用。

http://www.dtcms.com/a/453397.html

相关文章:

  • pywebview:用Python+Web技术打造轻量级桌面应用!
  • python 做办公网站移动应用开发学什么
  • 数据库迁移migration
  • Channel 和 Flow 选择场景对比 (例子:不停发事件的场景)
  • 《Vuejs设计与实现》第 18 章(同构渲染)(下)
  • jsp网站开发大作业长春网站建设wang
  • 淄博网站建设网宽河北网站建设推广电话
  • Django ORM 详解
  • C语言模拟面向对象编程方法之多态
  • 温州市建设工程管理网站温州建设网站哪家好
  • 划时代的技术飞跃:OpenAI DevDay 2025 全面深度解读
  • 做网站的网页图片素材怎么找长春做网站哪家便宜
  • 计算机操作系统:操作系统的发展过程
  • 未来之窗昭和仙君 (十三) 对话框组件— 东方仙盟筑基期
  • 茶叶公司网站建设策划书制作展示型网站公司哪家好
  • 部门定制网站建设公司免费电子版个人简历模板
  • 佛山营销网站建设咨询网站统计分析平台
  • 【工具变量】上市公司气候风险数据集(2011-2023年)
  • nat outbound acl-number address-group group-index 概念及题目
  • 电商网站构建预算方案门户网站html
  • CICD工具选型指南,Jenkins vs Arbess哪一款更好用?
  • 做彩票网站怎么样济南正规网站制作怎么选择
  • C++ 模板、泛型与 auto 关键字
  • 游戏项目 多态练习 超级玛丽demo8
  • 外企 BI 工具选型:从合规到落地
  • 医疗知识普及网站开发网站建立教学
  • Spring Boot中使用线程池来优化程序执行的效率!笔记01
  • 东平网站制作哪家好上海做网站站优云一一十七
  • 玩转ClaudeCode:通过Excel-MCP实现数据清洗并写入Excel
  • LeetCode 2761. 和等于目标值的质数对