列表插件干预导出过程手册(按导出模板)
# 1 产品概述
## 1.1 产品介绍
导入导出框架,旨在提供一套统一的解决方案,预封装一批开箱即用的操作和插件接口,可以很方便的实现数据迁移、批量更新、数据抽取、数据备份、基础资料批量分配等功能,并统一对任务进行管理,生成执行日志。
业务领域使用这套统一的框架,可以无需关心后台线程的启动和管理,直接沿用平台已经封装好的功能界面。只需要专注于实现功能逻辑,提升开发效率,保障用户体验。
## 1.2 业务场景
本文将演示如何实现“按导出模板导出”的业务场景,然后介绍导入导出框架对外提供的操作和接口。
# 2 操作步骤
打开列表,找到【更多】>【导出数据(按导出模板)】菜单,点击下载(6.0及以下版本是引入数据(按引出模板))。
![image.webp](/download/0100bb4b2d4e778a4a21a30c50474528282d.webp)
**如果存在多个模板,请选择你配置的引出模板下载。下载的excel格式同下图类似。**
![image.webp](/download/0100d53e1da73ba5405da18ea8825a614099.webp)![image-20211011171038390](images/image-20211011171038390.webp)
**如果导出过程超过10分钟卡住不动,建议检查monitor日志查看是否报错中断。**
# 3 插件干预
## 方案:实现自定义列表插件
第一步:派生kd.bos.list.plugin.AbstractListPlugin类(或IListPlugin接口),实现插件干预执行类,重写下面四个方法:
```java
/** 查询导出数据前事件,可以用来修改过滤条件、排序规则等 */
public void beforeQueryOfExport(BeforeExportFileEvent e) {}
/**查询导出数据后事件,可以用来修改查询返回的数据,比如修改字段数据等 */
public void afterQueryOfExport(ExportFileEvent e) {}
/** 导出文件前事件,目前只可以用来修改导出的文件名 */
public void beforeExportFile(BeforeExportFileEvent e) {}
/** 导出文件后事件,可以用来修改导出的文件内容,比如修改excel数据、格式、加密等 */
public void afterExportFile(ExportFileEvent e) {}
```
第二步:将上面这个实现类注册到列表插件中。
![1634091624294.webp](/download/0100c9e21c7dd0fe469996d5ccad1da7d1e7.webp)
# 4 示例
```java
package kd.bos.designer;
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.dataentity.entity.DynamicObject;
import kd.bos.form.events.AfterQueryOfExportEvent;
import kd.bos.form.events.BeforeExportFileEvent;
import kd.bos.form.events.BeforeQueryOfExportEvent;
import kd.bos.form.events.ExportFileEvent;
import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.orm.query.QFilter;
/**
* @author rd_agbyte_yang
*
* 示例代码实现功能: 1.修改按列表导出的文件名为【实体名称】+列表.xlsx 2.修改前三行的第一列为红色字体
*
*/
public class TestExportListPlugin extends AbstractListPlugin {
@Override
public void beforeQueryOfExport(BeforeQueryOfExportEvent e) {
if (e.getFilters().length == 0) {
e.setFilters(new QFilter[] { new QFilter("billstatus", QFilter.equals, "C") });
} else {
e.getFilters()[0] = e.getFilters()[0].and(new QFilter("billstatus", QFilter.equals, "C"));
}
e.setOrderBys("billno DESC");
}
@Override
public void afterQueryOfExport(AfterQueryOfExportEvent e) {
DynamicObject[] datas = e.getQueryValues();
for (DynamicObject data : datas) {
String billno = (String) data.get("billno");
if (billno != null) {
billno = "****" + billno.substring(4);
} else {
billno = "******";
}
data.set("billno", billno);
}
}
@Override
public void beforeExportFile(BeforeExportFileEvent e) {
// 示例:将导出文件名重置为主实体名称+“导出列表”
e.setFileName(e.getMainEntityType().getDisplayName() + "导出列表数据.xlsx");
}
@Override
public void afterExportFile(ExportFileEvent e) {
File file = e.getFile();
if (file != null) {
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) {
ex.printStackTrace();
}
}
}
}
```
列表插件干预导出过程手册(按导出模板)
# 1 产品概述## 1.1 产品介绍导入导出框架,旨在提供一套统一的解决方案,预封装一批开箱即用的操作和插件接口,可以很方便的实现数据...
点击下载文档
本文2024-09-23 00:36:04发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-140512.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章