如何实现给报表动态添加列原创
12人赞赏了该文章
6,140次浏览
编辑于2023年05月29日 09:26:21
关键词:报表,动态分组列,表格字段分组
一、需求
在标准报表中,可以通过配置的方式添加报表字段显示的分组列,如下图;但是有时候报表分组列的数量是不确定的,需要根据实际情况在运行时动态添加报表的分组列
二、思路与方案
报表列表查询插件的getColumns事件中可以指定报表列表显示的列。
三、实现过程
1、新建类继承AbstractReportListDataPlugin,在getColumns方法中动态添加分类列,需要注意的是:如果不知道动态列哪些参数是必录的,建议通过这个工程类去创建动态列:kd.bos.metadata.entity.report.ReportColumnFactory#createTextColumn,如果动态列设置的属性不全会导致页面显示的数据出现问题,例如动态设置的下拉项字段,如果没设置所有下拉项的key-value,则无法显示下拉项值,并且报表导出时会无法显示数据。
参考代码如下
@Override public List<AbstractReportColumn> getColumns(List<AbstractReportColumn> columns) throws Throwable { ReportColumn endRpt = new ReportColumn(); endRpt.setCaption(new LocaleString("测试列")); endRpt.setWidth(new LocaleString("50")); endRpt.setFieldKey("kded_currencyfield");//设置字段标识 endRpt.setFieldType(ReportColumn.TYPE_TEXT);//字段类型 endRpt.setScale(10); ReportColumn rp = new ReportColumn(); rp.setCaption(new LocaleString("申请理由")); rp.setWidth(new LocaleString("50")); rp.setFieldKey("kded_test"); rp.setFieldType(ReportColumn.TYPE_TEXT); rp.setScale(10); ReportColumnGroup efg = new ReportColumnGroup(); efg.setCaption(new LocaleString("动态增加分组")); efg.setFieldKey("kded"); //efg.setHideSingleColumnRow(false);设置只有一个下级分组时是否隐藏下级分组,默认隐藏 efg.getChildren().add(endRpt);//添加下级分组 efg.getChildren().add(rp);//添加下级分组 columns.add(efg); return columns; }
2、新增的类注册在报表设计器中对应报表列表的查询插件对应的位置
四、效果图
五、开发环境版本
COSMICV4.0.010.0
六、参考资料
赞 12
12人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读