如何开发自定义左组织树右报表界面原创
金蝶云社区-丨Nick丨
丨Nick丨
6人赞赏了该文章 1978次浏览 未经作者许可,禁止转载编辑于2022年04月16日 09:45:02

关键词:树形控件、报表

一、需求

报表页面左侧有组织树,一般是构建业务单元的树,用来对右侧的报表进行过滤

二、思路与方案

自行绘制

三、实现过程


  1. 新建报表页。我用的是通用查询报表标识:kdec_demo1115report

  2. 在报表页面添加分割容器以及一些面板,左侧放置树控件,右侧将页面原有的报表列表控件放进去

    image.png

  3. 报表插件中实现绘制树控件,参考https://vip.kingdee.com/article/248087985453891584

  4. 报表插件中实现treeNodeClick 在其中传递要对报表过滤的参数,因为我构建的树节点Id就是orgId,所以直接拼接进行传递,调用refresh触发报表重新取数

  5. @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();
    	}
  6. 报表数据插件中的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;
	}


将插件注册到对应不同位置,保存预览,点击看效果

父节点的点击效果,过滤出对应采购组织的数据

image.png




点击赋能部,可以看到报表也有数据变化

image.png

end~


四、效果图

image.png

五、开发环境版本

4.0及以上

六、注意事项

  1. 报表插件要继承AbstractReportFormPlugin 并且注册到根节点的插件中

  2. 报表数据查询插件要继承AbstractReportListDataPlugin 并且注册到报表列表节点的 ‘查询插件’中

  3. 在报表插件中调用refresh才会触发查询插件中的重新取数

七、参考资料

  代码构建组织树:https://vip.kingdee.com/article/248087985453891584

开发平台

学习成长中心



赞 6