按列表导出插件指南
业务场景
场景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) {
//错误日志
}
}
}
}
按列表导出插件指南
本文2024-09-23 00:36:06发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-140514.html