如何实现给报表动态添加列原创
金蝶云社区-陈来珍
陈来珍
7人赞赏了该文章 4464次浏览 未经作者许可,禁止转载编辑于2023年05月29日 09:26:21

关键词:报表,动态分组列,表格字段分组

一、需求

在标准报表中,可以通过配置的方式添加报表字段显示的分组列,如下图;但是有时候报表分组列的数量是不确定的,需要根据实际情况在运行时动态添加报表的分组列

分组列.png

二、思路与方案

报表列表查询插件的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、新增的类注册在报表设计器中对应报表列表的查询插件对应的位置

a1.png

四、效果图

a2.png

a3.png

五、开发环境版本

COSMICV4.0.010.0

六、参考资料

【开发平台】指导手册

学习成长中心

 

 

 


赞 7