如何在报表引出时只导出选择行原创
7人赞赏了该文章
2,088次浏览
编辑于2022年04月14日 18:52:41
关键词:报表、引出、导出
一、需求
在报表上查询出结果后,在页面手动筛选了一些数据,想把这些手动选择的数据导出来,其他未选的数据则不导出。
二、思路与方案
通过查询插件开发指南,在导出数据时可以通过preProcessExportData事件可以干涉导出数据,在此时,只要把已选择的数据保留, 而未选择的删除就可以实现这个功能。
三、实现过程
步骤1 : 在报表编辑器上勾选显示选择列:
步骤2 : 在报表界面插件注册插件:
步骤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();// 删除未选择的行,保留已选的行 } } } } }
四、效果图
导出的数据如下图:
五、开发环境版本
COSMICV4.0.003.0
六、参考资料
赞 7
7人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读