按模板引出插件干预数据的方式
# 业务场景
在按模板导出数据时,对数据做干预(修改/移除)
场景1:按模板导出“采购申请单”,将物料编码为“NZL002”的分录数据移除,不参与导出
场景2:按模板导出“采购申请单”,将数据中物料编码“NZL002”替换成“NZL003”
# 解决方案
**通过派生列表插件基类AbstractListPlugin,重写afterQueryOfExport方法**
方法名:afterQueryOfExport
方法参数:ExportFileEvent
触发时机:系统按条件查询出待导出的数据后,即将执行导出流程时,触发当前事件
使用场景:用户可修改查询完毕的数据,如移除部分数据不作导出,或按自定义规则修改部分数据
| 方法名称 | 方法描述 | 返回值 |
| -------------- | ------------------------ | ------------ |
| getQueryValues | 获取待导出的动态对象数组 | 动态对象数组 |
| setQueryValues | 设置待导出的动态对象数组 | / |
| isCustomOrder | 是否按照用户顺序排序 | boolean |
| setCustomOrder | 设置是否按照用户顺序排序 | / |
# **示例代码**
场景1
```java
public class TestExportPlugin extends AbstractListPlugin {
public static final String ENTRYENTITY = "entryentity";
public static final String MATERIAL = "material";
@Override
public void afterQueryOfExport(AfterQueryOfExportEvent e) {
//获取待导出的单据动态对象数组
DynamicObject[] queryValues = e.getQueryValues();
List<DynamicObject> queryValueList = Arrays.stream(queryValues).collect(Collectors.toList());
Iterator<DynamicObject> iterator = queryValueList.iterator();
//遍历所有单据
while (iterator.hasNext()){
DynamicObject next = iterator.next();
//获取每个单据的分录数据集合
DynamicObjectCollection entryRows = next.getDynamicObjectCollection(ENTRYENTITY);
Iterator<DynamicObject> entryIterator = entryRows.iterator();
while (entryIterator.hasNext()){
DynamicObject entryRow = entryIterator.next();
if (entryRow.get(MATERIAL) != null &&((DynamicObject)entryRow.get(MATERIAL)).get("number").equals("NZL002")) {
//移除物料编码为“NZL002”的数据
entryIterator.remove();
}
}
}
//将处理后的数据转为数组
DynamicObject[] dynamicObjects = queryValueList.toArray(new DynamicObject[0]);
//按照当前数组顺序导出
e.setCustomOrder(true);
e.setQueryValues(dynamicObjects);
}
}
```
场景2
```java
public class TestExportPlugin extends AbstractListPlugin {
public static final String ENTRYENTITY = "entryentity";
public static final String BD_MATERIAL = "bd_material";
public static final String MATERIAL = "material";
@Override
public void afterQueryOfExport(AfterQueryOfExportEvent e) {
//获取待导出的单据动态对象数组
DynamicObject[] queryValues = e.getQueryValues();
List<DynamicObject> queryValueList = Arrays.stream(queryValues).collect(Collectors.toList());
Iterator<DynamicObject> iterator = queryValueList.iterator();
//遍历所有单据
while (iterator.hasNext()){
DynamicObject next = iterator.next();
//获取每个单据的分录数据集合
DynamicObjectCollection entryRows = next.getDynamicObjectCollection(ENTRYENTITY);
//从数据库获取 编码为“NZL003”的物料
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingleFromCache(BD_MATERIAL,"id,number,name",
new QFilter("number", QCP.equals, "NZL003").toArray());
for (int i = 0; i < entryRows.size(); i++) {
DynamicObject dynamicObjectTmp = entryRows.get(i);
if (entryRow.get("material") != null &&((DynamicObject)entryRow.get("material")).get("number").equals("NZL002")) {
//将分录中原始物料编码为“NZL002”的数据,物料修改为“NZL003”
dynamicObjectTmp.set(MATERIAL,dynamicObject);
}
}
}
//将处理后的数据转为数组
DynamicObject[] dynamicObjects = queryValueList.toArray(new DynamicObject[0]);
e.setQueryValues(dynamicObjects);
}
}
```
按模板引出插件干预数据的方式
# 业务场景在按模板导出数据时,对数据做干预(修改/移除)场景1:按模板导出“采购申请单”,将物料编码为“NZL002”的分录数据移除,不...
点击下载文档
上一篇:按列表导出插件指南下一篇:模板插件-导入模板基础资料字段设置下拉框选值
本文2024-09-23 00:36:06发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-140515.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章