当前位置: 首页 > 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.cnnetsun.cn/news/3079279.html

相关文章:

  • wecomapi开发企业微信客户跟进记录如何与消息、标签和工单关联
  • AI 编程疯狂内卷后我悟了:模型决定上限,接口才决定你能不能高效干活
  • STM32CubeMX实战:手把手教你配置IWDG独立看门狗,防止程序跑飞(附超时计算避坑指南)
  • G-Helper技术架构深度解析:轻量化硬件控制系统的设计哲学与实践
  • Rust 宏展开与编译期行为解析
  • VMware快照恢复黑盒操作全曝光(ESXi 7.0/8.0兼容性避坑手册)
  • Web渗透测试全流程深度解析:从原理、实战到防御
  • mavonEditor代码块三大神器:如何让Markdown代码编辑效率翻倍?
  • 从情绪陪伴机器人到屏幕端具身 Agent:魔珐星云让 AI 共情可落地
  • 别再手动复制了!用Python脚本一键生成Markdown Emoji速查表(附完整代码)
  • AI就业新趋势:从算法神话到工程化红利,普通人如何入局?
  • AI 时代, “鸡娃” 还有意义吗?从 “鸡知识” 到 “鸡能力” 的转型之路
  • SMUDebugTool:AMD Ryzen处理器底层硬件调试解决方案
  • 基础控件的信号:
  • Three.js 人物模型动画案例教程
  • Octo 正式开源:首个开源可信的人与agent协作平台
  • 告别高昂外包费!苏州制造企业如何用零代码平台3天自建数字孪生工厂?
  • 社交钱包开发的技术逻辑与人文转向
  • 翅片管散热器的设计与应用解析
  • 告别手动绑定!用WxValidate在微信小程序+vant weapp里优雅搞定表单校验
  • OWASP Top 10 A02加密机制失效:十大风险场景与纵深防御实战
  • 【无标题】请容许我吹一下牛
  • AI驱动测试开发:Claude Code在单元、API与UI自动化测试中的实战应用
  • AI视觉防错行为判断实时监督家电产线作业,杜绝人为失误隐患
  • 前期准备:
  • wechatapi优化:基于AC自动机的海量关键词毫秒级拦截
  • 后端工程师需要掌握的DevOps实践指南
  • 基于深度学习的骨折检测系统(YOLOv8+YOLO数据集+UI界面+Python项目+模型)
  • 计算机毕业设计之基于少儿编程课程平台管理系统的设计与实现
  • 隧道施工数字化利器|LED信息显示系统,打通安全管理可视化闭环@信悦恒科技