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

YonBIP开发实战:手把手教你搞定树形和表型参照(附完整前后端代码)

YonBIP参照开发深度实战:从业务场景到代码落地的全链路解析

当企业级应用开发遇上复杂数据展示需求时,参照功能往往成为项目中的关键难点。不同于普通的下拉选择,YonBIP平台提供的参照体系需要开发者同时掌握前后端协作机制、数据权限过滤和UI交互逻辑。本文将带您穿透文档迷雾,通过五个实战模块彻底掌握树形与表型参照的开发精髓。

1. 参照类型选型:业务场景驱动的技术决策

在YonBIP中开发参照功能时,首要问题是确定参照类型。平台提供三种核心模式:DefaultTreeRefAction(树形)、DefaultGridRefAction(表型)以及二者的组合模式。选择依据不应基于技术偏好,而应严格遵循业务数据特征。

典型场景匹配指南

  • 组织架构选择:树形参照(DefaultTreeRefAction)
  • 物料清单选择:表型参照(DefaultGridRefAction)
  • 带分类的商品选择:组合模式(两次独立请求)

实际项目中,我曾遇到一个采购申请场景:需要先按品类树导航,再展示具体商品列表。这种混合需求就需要同时配置:

// 后端需同时继承两个Action类 public class ProductCategoryRef extends DefaultTreeRefAction {...} public class ProductItemRef extends DefaultGridRefAction {...}

关键提示:组合模式会产生两次网络请求,需在前端做好加载状态管理

2. 后端Action开发:从SQL优化到权限控制

参照的后端实现绝非简单的数据查询,需要考虑组织隔离、多语言支持和性能优化。以部门树参照为例,核心难点在于动态SQL构建和组织权限过滤。

树形参照SQL最佳实践

private String buildDeptSql(String pk_org) { StringBuffer query = new StringBuffer(); query.append("(SELECT CASE WHEN dept.pk_fatherorg = '~' "); query.append("THEN dept.pk_dept ELSE v.pk_vid END pk_fatherorg, "); query.append("dept.code, dept.name, dept.pk_vid id "); query.append("FROM org_dept_v dept "); query.append("LEFT JOIN (...) v ON v.dept = dept.pk_fatherorg "); query.append("WHERE dept.pk_group = ? "); if(StringUtils.isNotBlank(pk_org)){ query.append("AND dept.pk_org = ? "); } query.append(")"); return query.toString(); }

必须掌握的三个技术要点

  1. 使用预编译语句防止SQL注入
  2. 动态拼接组织过滤条件
  3. 处理虚拟节点('~')的特殊情况

权限控制往往通过鉴权文件实现,典型配置如下:

<actions> <action> <name>ct.contructionpermit.ProjectdeptTreeRefGrid</name> <clazz>nccloud.grid.ct.contructionpermit.ProjectdeptTreeRefGrid</clazz> </action> </actions>

3. 前端Refer组件:配置艺术与性能调优

前端参照组件看似简单,实则暗藏诸多细节陷阱。通过React高阶组件实现的Refer控件,其配置项直接影响用户体验和系统性能。

表型参照的黄金配置模板

const gridRefConfig = { refType: 'grid', refName: '销售合同号', refcode: 'nccloud.grid.ct.contructionpermit.ContructionpermitXsHthTreeGrid', queryGridUrl: '/nccloud/ct/contructionpermit/ContructionpermitXsHthTreeGrid.do', isMultiSelectedEnabled: true, columnConfig: [{ code: ["code","name","crowno"], name: ["合同号","合同名","行号"], width: [120, 200, 80] // 新增列宽配置 }], pagination: { // 分页配置 pageSize: 20, pageSizeOptions: [10, 20, 50] } }

高频踩坑点排查清单

  • 多选模式下返回值的逗号分隔处理
  • 历史记录显示导致的性能问题(showHistory)
  • 移动端适配问题(mobilerefpath配置)
  • 列宽自适应失效解决方案

4. 元数据配置:被忽视的关键步骤

参照开发中最容易被轻视的环节就是数据库元数据配置。bd_refinfo表的正确填充直接决定参照能否在界面正常显示。

必备字段详解表

字段名示例值说明
CODE'xshth'参照唯一标识
REFCLASS'nccloud.grid.ct...'后端类全路径
REFPATH'ct/reportapproval...'前端路径(无.js)
REFTYPE11表型/2树形
METADATANAMESPACE'ct'所属模块

执行SQL后的环境重启往往被遗忘,这会导致:

  1. 模板无法识别新参照
  2. 多语资源未加载
  3. 缓存导致的配置不生效

5. 进阶技巧:动态过滤与组织隔离

企业级应用的核心需求是按组织隔离数据。实现参照过滤需要前后端协同:

前端条件传递

afterEvent: { onBeforeOpen: (refIns) => { refIns.setCondition({ pk_org: currentOrg }); } }

后端条件接收

String pk_org = arg0.getQueryCondition().get("pk_org"); if(StringUtils.isNotBlank(pk_org)){ query.append("AND dept.pk_org = '"+pk_org+"'"); }

对于多组织场景,建议采用集团级视图(org_dept_v)配合动态条件过滤,避免数据越权。我在金融客户项目中曾遇到因未过滤组织导致的数据泄露问题,最终通过三层校验解决:

  1. 前端传递当前组织
  2. 后端验证组织归属
  3. 数据库视图过滤

参照开发的质量直接决定业务表单的使用体验。经过多个项目实践,我发现树形参照的性能优化空间最大——通过引入懒加载和虚拟滚动,万级节点下的响应时间可以从8秒优化到1秒内。而表型参照的核心在于分页策略和列配置的灵活性,合理的批次加载能显著提升用户操作效率。

http://www.jsqmd.com/news/1100650/

相关文章:

  • 技术产品路线图规划:从战略意图到可执行交付物的系统化拆解
  • 保姆级教程:用ESP8266-01和AT指令,5分钟搞定阿里云物联网平台设备连接与数据收发
  • 【VMware NAT端口转发终极指南】:20年虚拟化专家亲授5步精准配置法,99%用户忽略的3个致命陷阱!
  • Java的文本块与多行字符串在模板代码生成中的格式化处理
  • 告别纯数据炼丹:用PyTorch手把手教你给神经网络加上物理‘紧箍咒’
  • 告别Transformer卡顿?手把手带你用Vision Mamba跑通高分辨率图像分类(附代码)
  • 保姆级教程:用Python和Pandas手搓一个ETF网格交易回测脚本(附完整代码)
  • 2026论文投稿AI绘图实操:AI生草图+人工转矢量,彻底规避风险!
  • 原来新疆干果也有这么多讲究?
  • Next.js项目Cypress自动化测试实战:从配置到CI/CD集成
  • 3步实现浏览器直连桌面:WebRTC远程屏幕共享神器
  • wecomapi开发企业微信客户跟进记录如何与消息、标签和工单关联
  • 别再手动建模了!用Python脚本批量生成FreeCAD零件(附随机参数化代码)
  • 量化模型 GGUF 格式详解,如何在 Strix Halo 上节省显存跑大模型
  • 在树莓派4B上部署MobileNet-SSD:用OpenCV和Python实现实时物体检测(附完整代码)
  • 终极Windows优化指南:用Win11Debloat脚本彻底清理系统冗余
  • Proteus 8 + 8086 + 8255:手把手教你搭建一个会跑的流水灯(附完整汇编源码)
  • 用状态机搞定蓝桥杯嵌入式电梯题:STM32G431实战避坑指南
  • OVF导出卡在“正在打包”?紧急排查清单来了,10分钟定位磁盘校验、SSL证书、权限三重故障源
  • 【VMware虚拟网络架构实战指南】:3步搞定多台虚拟机跨网段通信,99%工程师都忽略的5个关键配置
  • Pywinauto Recorder评估指南:构建GUI自动化测试决策框架
  • SQL注入实战:从原理到报错注入的攻防演练
  • Beehive配置加密实战:Spring Boot敏感信息保护与密钥管理
  • 别再手动修模型了!用Mimics从CT到STL,搞定股骨三维重建的保姆级避坑指南
  • 别再到处找了!用这个免费网站5分钟搞定全国省市县shp边界数据(附ArcGIS导入与坐标系转换保姆级教程)
  • 苏州GEO优化:企业内容正在进入“AI可理解”的新阶段
  • 别再手动建模了!用Python脚本批量生成FreeCAD零件,效率提升10倍
  • G-Helper技术架构深度解析:轻量化硬件控制系统的设计哲学与实践
  • MetaTube插件:3步解决Jellyfin媒体库元数据混乱难题
  • mavonEditor代码块功能深度探索:从基础语法到高级定制的完整指南