iBizModel 视图消息(PSVIEWMSG)及视图消息组(PSVIEWMSGGROUP)模型详解

下文是对iBizModel中视图消息(PSVIEWMSG)、视图消息组(PSVIEWMSGGROUP)及其成员模型(PSVIEWMSGGRPDETAIL)的全面介绍。内容涵盖模型定义、核心属性、应用场景、模型关系图例及完整DSL示例,旨在为系统建模提供详细指导。

下图是视图消息示例界面,访问iBizAppHUB示例系统,点击视图消息可看到相关的示例。
在这里插入图片描述注意:右侧的调试工具栏可以进入对应的视图,查看具体的模型配置
在这里插入图片描述

一、视图消息模型(PSVIEWMSG)详解

1.1 模型定义与核心功能

视图消息模型(PSVIEWMSG)是iBizModel中用于管理用户界面消息的核心组件,支持静态内容与动态数据驱动的消息展示。它允许开发者在系统视图的不同位置(如顶部、底部、内容区或弹出窗口)显示各类信息(如常规信息、警告、错误或自定义类型),并具备灵活的启用、缓存和关闭机制。该模型通过集成实体数据集(PSDEDATASET)、操作标识(PSDEOPPRIV)和业务逻辑(PSDELOGIC),实现消息的智能化触发与内容动态更新。

1.2 属性与枚举详解

  • 关键属性

    • codenamename:唯一标识与名称,确保在模型域内唯一。
    • dynamicmode:动态模式(0-静态内容;1-实体数据集),决定消息内容来源。
    • msgpos:消息位置(TOP-视图上方;BOTTOM-视图下方;BODY-内容区;POPUP-弹出;CUSTOM-自定义)。
    • msgtype:消息类型(INFO-常规;WARN-警告;ERROR-错误;CUSTOM-自定义)。
    • enablemode:启用模式(ALL-全部启用;DEOPPRIV-基于操作标识;DELOGIC-基于实体逻辑;SCRIPT-脚本控制)。
    • enableremove:关闭模式(0-无关闭;1-默认关闭;2-本次关闭)。
    • timeout:显示时长(毫秒,-1为永久)。
    • 数据源属性(如 psdedsid 引用实体数据集)和样式属性(如 pssyscssid 引用样式表)。
  • 枚举类型

    • 内容类型TEXT(纯文本)、HTML(网页)、MARKDOWN(标记语言)、USER(用户自定义),适应多样化内容需求。
    • 动态模式:静态内容直接定义,动态模式从实体数据集实时拉取。
    • 启用与关闭逻辑:通过操作标识或业务逻辑精确控制消息显示条件。

1.3 应用场景

  • 静态消息通知:用于固定提示,如系统公告、操作指南(例如,“欢迎使用本系统,请先阅读用户手册”)。
  • 动态数据驱动消息:基于实体数据变化触发消息,如库存预警(当库存低于阈值时自动显示警告)。
  • 权限相关消息:结合 PSDEOPPRIV,仅对具备特定操作权限的用户显示消息(如管理员专属提示)。
  • 交互式消息:通过 POPUP 位置实现模态弹窗,用于关键操作确认或错误反馈。
  • 多语言支持:集成语言资源属性(如 titlelanrestagpsdefid),实现消息内容国际化。

1.4 模型关系

  • 父模型PSMODULE(系统模块),通过 psmoduleid 关联,实现模块化消息管理。
  • 外部引用PSVIEWMSGGRPDETAIL 通过 psviewmsgid 引用视图消息,将其纳入消息组。
  • 依赖模型
    • PSDEDATASET:提供动态消息数据源。
    • PSSYSCSSPSSYSIMAGE:定义消息样式与图标。
    • PSDELOGIC:用于启用条件判断。

1.5 消息视图自定义面板

视图消息可指定布局面板pssysviewpandlid,下面的布局面板放入了属性项:namefieldname

pssysviewpanel(codename: "LayoutPanel", name: "视图消息_布局面板", viewlayoutflag: 1, publicflag: 1, mobflag: 1, bodyonlyflag: 0, psdeid: de_master){
 pssysviewpanelitem(showcaption: 0, flexvalign: "center", itemtype: "CONTAINER", layoutmode: "FLEX", name: "CONTAINER", caption: "容器", flexdir: "row", id: "CONTAINER", flexalign: "flex-start"){
   pssysviewpanelitem(itemtype: "RAWITEM", rawcontent: "名称:", predefinedtype: "STATIC_TEXT", name: "STATIC_TEXT", caption: "文本", id: "STATIC_TEXT", rendermode: "TEXT", contenttype: "RAW")
   pssysviewpanelitem(fieldname: "name", itemtype: "FIELD", rawcontent: "文本(动态)", predefinedtype: "FIELD_TEXT_DYNAMIC", name: "FIELD_TEXT_DYNAMIC", editortypename: "标签", caption: "文本(动态)", id: "FIELD_TEXT_DYNAMIC", editortype: "SPAN", rendermode: "TEXT_DYNAMIC")
 }
 pssysviewpanelitem(showcaption: 0, flexvalign: "center", itemtype: "CONTAINER", layoutmode: "FLEX", name: "CONTAINER1", caption: "容器", flexdir: "row", id: "CONTAINER1", flexalign: "flex-start"){
   pssysviewpanelitem(itemtype: "RAWITEM", rawcontent: "描述:", predefinedtype: "STATIC_TEXT", name: "STATIC_TEXT1", caption: "文本", id: "STATIC_TEXT1", rendermode: "TEXT", contenttype: "RAW")
   pssysviewpanelitem(fieldname: "description", itemtype: "FIELD", rawcontent: "文本(动态)", predefinedtype: "FIELD_TEXT_DYNAMIC", name: "FIELD_TEXT_DYNAMIC1", editortypename: "标签", caption: "文本(动态)", id: "FIELD_TEXT_DYNAMIC1", editortype: "SPAN", rendermode: "TEXT_DYNAMIC")
 }
}

二、视图消息组模型(PSVIEWMSGGROUP)详解

2.1 模型定义与核心功能

视图消息组模型(PSVIEWMSGGROUP)用于聚合多个视图消息,提供统一的管理和显示控制。它支持静态或动态模式,允许对组内消息进行整体样式配置(如头部、内容区、尾部的显示模式),并广泛应用于系统视图、应用菜单、图表等UI组件。通过动态模式,消息组可以基于实体数据或业务逻辑实时更新成员消息。

2.2 属性与枚举详解

  • 关键属性

    • codenamename:组标识与名称,确保唯一性。
    • dynamicmode:动态模式(1-启用;0-禁用),控制组内消息是否动态加载。
    • 样式属性:topmsgstylebodymsgstylebottommsgstyle 分别定义头部、内容区、尾部消息的显示模式,并引用 PSSYSCSS 样式表。
    • 关联属性:psdeid(相关实体)、psmoduleid(所属模块)。
  • 枚举类型

    • 视图消息显示模式LIST(列表显示)、MARQUEE(横向滚动)、MARQUEE2(纵向滚动)、USER(用户自定义),适应不同布局需求。

2.3 应用场景

  • 统一消息管理:在复杂视图中(如仪表板或表单),将多个消息组合并显示,避免界面混乱。
  • 动态消息聚合:例如,在销售看板中,动态组合库存预警、订单状态更新等消息。
  • 样式一致性:通过组级样式配置,确保消息在多个视图中的显示风格统一。
  • 权限集成:结合引用模型(如 PSAPPVIEW),实现基于用户角色的消息组显示。

2.4 模型关系

  • 父模型PSMODULE(系统模块),通过 psmoduleid 关联。
  • 成员模型PSVIEWMSGGRPDETAIL 作为嵌套成员,定义组内消息列表。
  • 外部引用:被超过20个核心模型引用,包括:
    • UI组件:PSDEGRID(实体表格)、PSDEFORM(实体表单)、PSDETREEVIEW(实体树部件)。
    • 应用结构:PSSYSAPP(应用程序)、PSAPPVIEW(应用视图)。
    • 智能报表:PSSYSBIREPORT
    • 系统部件:PSSYSDASHBOARD(数据看板)、PSSYSCALENDAR(日历部件)。

三、视图消息组成员模型(PSVIEWMSGGRPDETAIL)

3.1 模型定义

视图消息组成员模型(PSVIEWMSGGRPDETAIL)是连接视图消息与消息组的桥梁,定义消息在组内的具体配置。每个视图消息只能被加入一个消息组一次,确保管理的唯一性。关键属性包括:

  • psviewmsgid:必填,引用 PSVIEWMSG
  • msgpos:可覆盖消息的默认显示位置。
  • ordervalue:指定组内排序,控制消息显示顺序。

3.2 应用场景

  • 消息优先级控制:通过 ordervalue 调整关键消息的显示顺序(如错误消息优先)。
  • 位置重写:在特定组中覆盖消息的默认位置(例如,将原本在顶部的消息改为在内容区显示)。

四、模型关系图例

以下Mermaid图展示了视图消息相关模型的层级关系与外部引用:

PSMODULE
PSVIEWMSG
PSVIEWMSGGROUP
PSVIEWMSGGRPDETAIL
PSAPPVIEW
PSDEGRID
PSDEFORM
PSSYSAPP
PSSYSBIREPORT
PSSYSDASHBOARD
PSDEDATASET
PSDEOPPRIV
PSDELOGIC
PSSYSCSS
  • 说明
    • PSMODULE 作为父模型,管理 PSVIEWMSGPSVIEWMSGGROUP
    • PSVIEWMSGGROUP 通过 PSVIEWMSGGRPDETAIL 聚合 PSVIEWMSG
    • PSVIEWMSGGROUP 被多个UI和应用模型引用,体现其广泛集成性。
    • PSVIEWMSG 依赖数据集、操作标识等模型实现动态功能。

五、完整DSL示例

以下示例展示如何定义视图消息、消息组及其成员,涵盖静态与动态场景。代码严格遵循iBizModelDSL规范,确保可执行性。

//iBizModelDSL建模指令,目标:定义系统视图消息及消息组
def mod_example = "example_module"
def de_inventory = "example.INVENTORY"
def ds_alert = "example.INVENTORY.ALERT_DATA"

// 定义静态视图消息:库存操作指南
psviewmsg(
    psmoduleid: mod_example,
    dynamicmode: 0,
    msgpos: "TOP",
    codename: "inventory_guide",
    name: "库存管理指南",
    msgtype: "INFO",
    content: "请定期检查库存水平,避免缺货。",
    timeout: 5000,
    enableremove: 2
)

// 定义动态视图消息:库存预警(从数据集获取)
psviewmsg(
    psmoduleid: mod_example,
    dynamicmode: 1,
    msgpos: "BODY",
    codename: "low_stock_alert",
    name: "低库存预警",
    msgtype: "WARN",
    psdedsid: ds_alert,
    psdeid: de_inventory,
    enablecache: 1,
    cachetimeout: 300000,
    enablemode: "DELOGIC",
    testpsdelogicid: "example.INVENTORY.CHECK_STOCK"
)

// 定义视图消息组:库存监控面板
psviewmsggroup(
    psmoduleid: mod_example,
    dynamicmode: 1,
    codename: "inventory_monitor_group",
    name: "库存监控消息组",
    topmsgstyle: "MARQUEE",
    bodymsgstyle: "LIST",
    bottommsgstyle: "USER"
) {
    // 添加静态指南消息
    psviewmsggrpdetail(
        ordervalue: 10,
        msgpos: "TOP",
        psviewmsgid: "example_module.inventory_guide"
    )
    // 添加动态预警消息
    psviewmsggrpdetail(
        ordervalue: 20,
        msgpos: "BODY",
        psviewmsgid: "example_module.low_stock_alert"
    )
}

// 关联消息组到实体表格(示例)
psdegrid(
    psmoduleid: mod_example,
    codename: "inventory_grid",
    name: "库存表格",
    psviewmsggroupid: "example_module.inventory_monitor_group"
)
  • 示例解析
    • 静态消息inventory_guide 显示在视图顶部,内容固定,5秒后自动关闭,支持本次关闭模式。
    • 动态消息low_stock_alert 从实体数据集 ALERT_DATA 获取内容,启用缓存(5分钟失效),并通过业务逻辑 CHECK_STOCK 控制启用条件。
    • 消息组inventory_monitor_group 动态模式启用,头部消息横向滚动,内容区列表显示,尾部自定义。
    • 集成应用:消息组被关联到库存表格(PSDEGRID),实现消息在UI中的自动展示。

六、总结

视图消息与视图消息组模型是iBizModel中UI交互层的核心设计,通过静态与动态结合、权限与逻辑集成,提升了系统消息的灵活性与用户体验。应用场景覆盖从简单提示到复杂业务预警,模型关系确保与系统模块、实体、UI组件的无缝衔接。开发者可通过DSL示例快速实现消息管理,遵循规范避免常见错误。在实际建模中,建议结合具体业务需求调整属性配置,充分利用缓存和动态特性优化性能。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐