按模板引出插件干预数据的方式

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

按模板引出插件干预数据的方式

# 业务场景 在按模板导出数据时,对数据做干预(修改/移除) 场景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”的分录数据移除,不...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息