如何开发自定义左组织树右报表界面原创
6人赞赏了该文章
2,618次浏览
编辑于2022年04月16日 09:45:02
关键词:树形控件、报表
一、需求
报表页面左侧有组织树,一般是构建业务单元的树,用来对右侧的报表进行过滤
二、思路与方案
自行绘制
三、实现过程
新建报表页。我用的是通用查询报表标识:kdec_demo1115report
在报表页面添加分割容器以及一些面板,左侧放置树控件,右侧将页面原有的报表列表控件放进去
报表插件中实现绘制树控件,参考https://vip.kingdee.com/article/248087985453891584
报表插件中实现treeNodeClick 在其中传递要对报表过滤的参数,因为我构建的树节点Id就是orgId,所以直接拼接进行传递,调用refresh触发报表重新取数
@Override public void registerListener(EventObject e) { super.registerListener(e); TreeView tv1 = this.getView().getControl("kdec_treeviewap"); tv1.addTreeNodeClickListener(this); } @Override public void treeNodeClick(TreeNodeEvent evt) { TreeNodeClickListener.super.treeNodeClick(evt); String orgId = evt.getNodeId().toString(); Map<String, Object> customParam = new HashMap<>(); customParam.put("orgId", orgId); this.getQueryParam().setCustomParam(customParam); this.getView().refresh(); }
报表数据插件中的query方法中捕获参数进行拼接qfilter,用于queryDataSet的条件
@Override public DataSet query(ReportQueryParam arg0, Object arg1) throws Throwable { QFilter[] filters = null; if (null != arg0.getCustomParam().get("orgId")) { QFilter qFilter = new QFilter("org.id", QCP.equals, arg0.getCustomParam().get("orgId").toString()); filters = qFilter.toArray(); } DataSet dataSet = QueryServiceHelper.queryDataSet(this.getClass().getName(), "kdec_cgsq", "billno,org.name kdec_org,entryentity.materia",filters, "billno desc"); return dataSet; }
将插件注册到对应不同位置,保存预览,点击看效果
父节点的点击效果,过滤出对应采购组织的数据
点击赋能部,可以看到报表也有数据变化
end~
四、效果图
五、开发环境版本
4.0及以上
六、注意事项
报表插件要继承AbstractReportFormPlugin 并且注册到根节点的插件中
报表数据查询插件要继承AbstractReportListDataPlugin 并且注册到报表列表节点的 ‘查询插件’中
在报表插件中调用refresh才会触发查询插件中的重新取数
七、参考资料
代码构建组织树:https://vip.kingdee.com/article/248087985453891584
kdec_case-kdec_commoncontrol-2 …(7.49KB)
赞 6
6人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!