如何在报表引出时只导出选择行原创
金蝶云社区-范老师加油
范老师加油
5人赞赏了该文章 1416次浏览 未经作者许可,禁止转载编辑于2022年04月14日 18:52:41

关键词:报表、引出、导出

一、需求

      在报表上查询出结果后,在页面手动筛选了一些数据,想把这些手动选择的数据导出来,其他未选的数据则不导出。

二、思路与方案

      通过查询插件开发指南,在导出数据时可以通过preProcessExportData事件可以干涉导出数据,在此时,只要把已选择的数据保留, 而未选择的删除就可以实现这个功能。

三、实现过程

步骤1 : 在报表编辑器上勾选显示选择列:

image.png

步骤2 : 在报表界面插件注册插件:

image.png

步骤3 :  编写插件代码:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.NumberFormatProvider;
import kd.bos.entity.report.AbstractReportColumn;
import kd.bos.report.ReportList;
import kd.bos.report.plugin.AbstractReportFormPlugin;
 
public class DemoRptFormPlugin extends AbstractReportFormPlugin {
         @Override
         public void preProcessExportData(List<AbstractReportColumn> exportColumns, DynamicObjectCollection data,
                            NumberFormatProvider numberFormatProvider) {
                   ReportList billList = this.getView().getControl("reportlistap");// 获取报表数据控件
                   ArrayList selRows = (ArrayList) billList.getEntryState().get("selRows");// 获取数据控件中选择的行
                   if ((!data.isEmpty()) && (selRows.size() > 0)) {// 如果有选择,则只导出选择行,没选择,则导出所有
                            Iterator arg5 = data.iterator();
                            while (arg5.hasNext()) {
                                     DynamicObject dyo = (DynamicObject) arg5.next();
                                     int fseq = (int) dyo.get("fseq");
                                     if (!selRows.contains(fseq)) {
                                               arg5.remove();// 删除未选择的行,保留已选的行
                                     }
                            }
                   }
         }
}

四、效果图

导出的数据如下图:

image.png

image.png

五、开发环境版本

COSMICV4.0.003.0

六、参考资料

【开发平台】指导手册

学习成长中心

赞 5