按列表导出插件指南

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

按列表导出插件指南

业务场景

场景1:按列表导出“采购申请单”,将审核人列移除,不在列表中展示,不参与导出。

场景2:按列表导出“采购申请单”,自定义数据源,不执行默认的采购申请单查询流程。

场景3:按列表导出“采购申请单”,默认只导出申请组织编码为“000000”的数据。

场景4:按列表导出“采购申请单”,修改待下载的文件名称为“测试文件”。

场景5:按列表导出“采购申请单”,修改其将Excel中前三行的第一列单元格设置背景色为红色。

 

解决方案

按列表导出原则为所见即所得,因此可以通过列表插件干预列表取数和待导出的文件,达到干预导出数据的目的。

 

操作步骤

继承列表插件基类AbstractListPlugin,分别重写下述方法:

示例场景

重写方法

执行时机

使用场景

场景1

beforeCreateListColumns

在构建列表列之前触发

自定义待创建的列

场景2

beforeCreateListDataProvider

列表初始化,构建列表取数器前触发

自定义数据源

场景3

setFilter

列表在生成了过滤条件之后,准备查询数据之前触发

自定义过滤条件

场景4

beforeExportFile

导出文件生成前事件

自定义导出文件名

场景5

afterExportFile

导出文件生成后事件

修改导出文件流,如修改excel数据、格式、加密等

插件注册

自定义插件需要注册至列表插件中。

示例代码

场景1:

import kd.bos.dataentity.utils.StringUtils;
import kd.bos.form.events.BeforeCreateListColumnsArgs;
import kd.bos.list.plugin.AbstractListPlugin;

public class CustomExportListPlugin extends AbstractListPlugin {
    @Override
    public void beforeCreateListColumns(BeforeCreateListColumnsArgs args) {
        //
移除字段名为“审核人”的列(其编码为"auditor.name")
        args.getListColumns().removeIf(next -> StringUtils.equalsIgnoreCase(next.getListFieldKey(), "auditor.name"));
    }
}

场景2:

import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.metadata.dynamicobject.DynamicSimpleProperty;
import kd.bos.form.events.BeforeCreateListDataProviderArgs;
import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.mvc.list.ListDataProvider;

public class CustomExportListPlugin extends AbstractListPlugin {

    @Override
    public void beforeCreateListDataProvider(BeforeCreateListDataProviderArgs args) {
        super.beforeCreateListDataProvider(args);
        //
设置当前数据源
        args.setListDataProvider(new ImportLogListPluginProvider());
    }
    //查询源子类,实现bos-form-mvc.jar中的ListDataProvider接口
    class ImportLogListPluginProvider extends ListDataProvider {
        @Override
        //重写获取数据方法
        public DynamicObjectCollection getData(int arg0, int arg1) {
            DynamicObjectCollection collection = super.getData(arg0, arg1);
            DynamicSimpleProperty property = new DynamicSimpleProperty();
            //设置字段标识为“test”
            property.setName("test");
            //添加“test”字段
            collection.getDynamicObjectType().addProperty(property);
            //遍历设值
            for (int i = 0; i < collection.size(); i++) {
                DynamicObject object = collection.get(i);
                String test = "test";
                object.set("test", test);
            }
            return collection;
        }
    }
}

场景3:

import kd.bos.form.events.SetFilterEvent;
import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;

public class CustomExportListPlugin extends AbstractListPlugin {

    public static final String ORG = "org";

    @Override
    public void setFilter(SetFilterEvent e) {
        super.setFilter(e);
        //
添加自定义filter
        e.addCustomQFilter(new QFilter(ORG, QCP.equals, "000000"));
    }
}

场景4:

import kd.bos.form.events.BeforeExportFileEvent;
import kd.bos.list.plugin.AbstractListPlugin;

public class CustomExportListPlugin extends AbstractListPlugin {

    @Override
    public void beforeExportFile(BeforeExportFileEvent e) {
        super.beforeExportFile(e);
        e.setFileName("
测试文件");
    }
}

场景5:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import kd.bos.form.events.BeforeExportFileEvent;
import kd.bos.form.events.ExportFileEvent;
import kd.bos.list.plugin.AbstractListPlugin;

/*
 * 
将Excel中前三行的第一列单元格设置背景色为红色
 */
public class CustomExportListPlugin extends AbstractListPlugin {
        @Override
        public void afterExportFile(ExportFileEvent e) {
               File file = e.getFile();
               if (file != null) {
                      // 将Excel中前三行的第一列单元格设置背景色为红色
                       try (FileInputStream fis = new FileInputStream(file);) {
                               Workbook wb = new XSSFWorkbook(fis);
                               Sheet sheet = wb.getSheetAt(0);
                               // 修改背景颜色
                               for (int i = 0; i < 3; i++) {
                                      CellStyle cs = wb.createCellStyle();
                                       cs.setFillForegroundColor(IndexedColors.RED.getIndex());
                                       cs.setFillPattern(FillPatternType.SOLID_FOREGROUND);
                                      sheet.getRow(i).getCell(1).setCellStyle(cs);
                               }
                               // 保存
                               FileOutputStream out = new FileOutputStream(file);
                               wb.write(out);
                               wb.close();
                               out.close();
                       } catch (Throwable ex) {
                               //错误日志
                       }
               }
        }
}

 


按列表导出插件指南

业务场景场景1:按列表导出“采购申请单”,将审核人列移除,不在列表中展示,不参与导出。场景2:按列表导出“采购申请单”,自定义数据源...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息