iBizModel 树视图(PSDETREEVIEW)模型体系详解

iBizModel 树视图(PSDETREEVIEW)模型体系详解

引言

树视图模型体系是iBizModel中用于构建层次化数据展示界面的核心组成部分。作为企业级应用开发的重要工具,树视图不仅能够直观展示数据的层级关系,还支持复杂的交互逻辑和业务处理。本文将全面解析树视图模型体系的结构、功能、应用场景,并提供详细的DSL示例和图例说明。

树视图模型体系概述

iBizModel的树视图模型体系以PSDETREEVIEW为核心,构建了一套完整的树形数据展示和处理框架。该体系包含多个协同工作的模型组件,共同实现对层次化数据的建模、展示和交互控制。

核心模型组成

树视图模型体系主要由以下模型构成:

  • PSDETREEVIEW:树视图部件模型,定义树部件的整体结构和基本配置
  • PSDETREENODE:树节点模型,定义单个节点的属性和行为
  • PSDETREENODERS:树节点关系模型,定义节点之间的层级关系
  • PSDETREENODERV:树节点关联视图模型,管理节点相关的视图引用
  • PSDETREECOL:树表格列模型,定义树表格的列结构
  • PSDETREENODECOL:树节点数据项模型,为节点提供数据源支持
  • PSDETREELOGIC:树部件逻辑模型,定义树视图的业务逻辑

核心模型详细解析

1. PSDETREEVIEW模型

PSDETREEVIEW是树视图体系的根模型,负责定义树部件的整体特性。其主要属性包括:

  • codename:必填属性,指定树视图的代码标识,在实体中具有唯一性
  • name:必填属性,指定树视图的名称
  • psdeid:必填属性,引用关联的实体模型
  • treestyle:定义树视图的样式,支持用户自定义
  • treegridflag:指定树表格模式,支持常规树表格和甘特图树表格

PSDETREEVIEW支持多种配置选项,如缓存绘制模式、编辑功能、权限控制等,能够适应不同的业务需求。

2. PSDETREENODE模型

树节点模型支持三种节点类型:

  • STATIC:静态节点,预定义的固定节点
  • DE:动态实体节点,从实体数据集加载
  • CODELIST:动态代码表节点,从代码表加载

关键属性包括:

  • nodetype:节点标识,在树视图中唯一
  • treenodetype:必填属性,指定节点类型
  • rootnode:必填属性,标识是否为根节点
  • textpsdefid:引用文本属性,用于节点显示
  • keypsdefid:引用标识属性,用于节点识别

3. 节点关系与数据模型

PSDETREENODERS定义节点间的父子关系,支持多级层级处理。PSDETREECOL和PSDETREENODECOL共同构建树表格的数据展示层,支持属性列和操作列的定义。

模型关系图

PSDATAENTITY PSDETREEVIEW
树视图部件 PSDETREENODE
树节点 PSDETREECOL
树表格列 PSDETREENODERS
节点关系 PSDETREELOGIC
树部件逻辑 PSDETREENODECOL
节点数据项 PSDETREENODERV
关联视图

应用场景分析

1. 组织架构管理

树视图非常适合展示企业组织架构,通过PSDETREENODE的层级关系定义,可以清晰展示部门、团队、人员的隶属关系。结合PSDETREECOL的表格列功能,可以同时显示员工的详细信息。

2. 产品分类体系

在电商或ERP系统中,产品分类通常具有多级结构。使用树视图可以直观展示分类层级,PSDETREENODECOL可以定义每个分类节点的附加信息,如产品数量、负责人等。

3. 文件目录管理

文件系统的目录结构天然适合用树视图展示。PSDETREEVIEW的编辑功能支持文件的增删改操作,PSDETREELOGIC可以定义文件操作的业务逻辑。

4. 工作流审批路径

审批流程中的节点关系可以用树视图展示,PSDETREENODERS定义审批路径,PSDETREELOGIC处理审批逻辑。

完整DSL示例

以下是一个完整的组织架构树视图DSL示例,展示了多个模型的协同使用:

groovy 复制代码
//iBizModelDSL建模指令,目标:创建组织架构树视图
psdetreeview(
    codename: "ORG_STRUCTURE", 
    name: "组织架构树", 
    psdeid: "Organization.Department", 
    showroot: 1, 
    enableedit: 1, 
    treestyle: "USER", 
    treegridflag: 1
){
    // 根节点定义
    psdetreenode(
        nodetype: "ROOT", 
        treenodetype: "STATIC", 
        name: "公司根节点", 
        rootnode: 1, 
        appendpnodeid: 0, 
        caption: "公司组织架构"
    ){
        psdetreenoderv(
            name: "DETAIL_VIEW", 
            psdeviewbaseid: "Organization.Department.DetailView", 
            refmode: "DEFAULT", 
            refparam: ""
        )
    }
  
    // 部门节点定义
    psdetreenode(
        nodetype: "DEPT", 
        treenodetype: "DE", 
        name: "部门节点", 
        rootnode: 0, 
        appendpnodeid: 1, 
        psdeid: "Organization.Department", 
        keypsdefid: "Organization.Department.ID", 
        textpsdefid: "Organization.Department.NAME", 
        sortpsdefid: "Organization.Department.SORTORDER", 
        sortdir: "ASC"
    ){
        // 部门节点数据项
        psdetreenodecol(
            name: "DEPT_CODE", 
            psdetreecolid: "DEPT_CODE", 
            psdefid: "Organization.Department.CODE", 
            caption: "部门编码"
        )
        psdetreenodecol(
            name: "MANAGER", 
            psdetreecolid: "MANAGER", 
            psdefid: "Organization.Department.MANAGER_NAME", 
            caption: "负责人"
        )
        psdetreenodecol(
            name: "STAFF_COUNT", 
            psdetreecolid: "STAFF_COUNT", 
            psdefid: "Organization.Department.STAFF_COUNT", 
            caption: "员工数"
        )
    }
  
    // 树表格列定义
    psdetreecol(
        name: "DEPT_CODE", 
        caption: "部门编码", 
        gridcoltype: "DEFGRIDCOLUMN", 
        width: 120, 
        align: "LEFT"
    )
    psdetreecol(
        name: "MANAGER", 
        caption: "负责人", 
        gridcoltype: "DEFGRIDCOLUMN", 
        width: 100, 
        align: "CENTER"
    )
    psdetreecol(
        name: "STAFF_COUNT", 
        caption: "员工数", 
        gridcoltype: "DEFGRIDCOLUMN", 
        width: 80, 
        align: "RIGHT"
    )
    psdetreecol(
        name: "ACTIONS", 
        caption: "操作", 
        gridcoltype: "UAGRIDCOLUMN", 
        width: 150, 
        align: "CENTER"
    )
  
    // 节点关系定义
    psdetreenoders(
        ppsdetreenodeid: "ROOT", 
        cpsdetreenodeid: "DEPT", 
        name: "根部门关系", 
        pvaluelevel: 1, 
        searchmode: 3
    )
  
    // 树部件逻辑定义
    psdetreelogic(
        name: "NODE_SELECT", 
        triggertype: "CTRLEVENT", 
        dstlogictype: "DEUILOGIC", 
        eventnames: "selectionchange", 
        psdelogicid: "Organization.Department.TreeSelectLogic"
    )
    psdetreelogic(
        name: "REFRESH_DATA", 
        triggertype: "VIEWEVENT", 
        dstlogictype: "SCRIPT", 
        eventnames: "init", 
        customcode: "refreshTreeData()"
    )
}

高级特性详解

1. 树表格模式

PSDETREEVIEW支持两种树表格模式:

  • 常规树表格:结合PSDETREECOL和PSDETREENODECOL,实现树形结构与表格数据的混合展示
  • 甘特图树表格:专为项目管理设计,支持任务时间线的可视化展示

2. 动态节点加载

通过PSDETREENODE的datasource属性,支持多种数据源:

  • 实体行为(DEACTION)
  • 实体集合(DEDATASET)
  • 实体逻辑(DELOGIC)
  • 自定义代码(CUSTOM)

3. 权限控制体系

树视图集成完整的权限控制:

  • 节点级权限(enableitempriv)
  • 操作控制(enableViewactions)
  • 列级权限控制

4. 逻辑处理框架

PSDETREELOGIC支持多种触发类型:

  • 定时器触发(TIMER)
  • 视图事件触发(VIEWEVENT)
  • 部件事件触发(CTRLEVENT)
  • 自定义逻辑(CUSTOM)

最佳实践建议

1. 性能优化

  • 合理设置maxsize属性控制动态节点加载数量
  • 使用缓存绘制模式(bufferrenderermode)提升大数据量性能
  • 配置分页功能(enablepaging)处理大量数据

2. 用户体验

  • 设置合适的节点展开模式(expand)
  • 配置搜索功能(enablesearch)
  • 定义直观的图标和样式

3. 业务集成

  • 充分利用关联视图(PSDETREENODERV)实现界面联动
  • 结合实体行为(PSDEACTION)实现完整的CRUD操作
  • 集成工作流状态展示和处理

总结

iBizModel的树视图模型体系提供了一个强大而灵活的层次化数据展示解决方案。通过PSDETREEVIEW等核心模型的有机组合,开发者可以快速构建符合业务需求的树形界面。该体系不仅支持基本的数据展示,还提供了丰富的交互功能、权限控制和业务逻辑处理能力,能够满足企业级应用的复杂需求。

树视图模型体系的设计体现了iBizModel模型驱动开发的理念,通过声明式的DSL配置,大大降低了开发复杂度,提高了开发效率。无论是简单的目录展示还是复杂的业务处理场景,树视图模型体系都能提供可靠的解决方案。

相关推荐
iBizModel2 天前
iBizModel 应用程序(PSSYSAPP)模型体系详解
ibizmodeling
iBizModel3 天前
iBizAppHUB前端框架示例(1)-多应用融合
ibizmodeling