单据体列分开两个数据表格打印原创
金蝶云社区-生态
生态
4人赞赏了该文章 1,000次浏览 未经作者许可,禁止转载编辑于2021年05月28日 14:32:57

场景:

    单据体分录列过多,使用一个数据表格打印不完,这时就可以将单据体数据拆成两个或多个,使用多个数据表格打印,但是如果多个数据表格绑定通过数据源(单据体)就会只加载一次数据,就会出现第二个数据表格数据不全,此时我们就可以使用自定义数据源,在代码中干预拉取数据。



步骤 1 添加自定义数据源

   image.png

步骤 2 数据表格绑定这个自定义数据源

           image.png

效果图:

image.png

插件代码:

package kd.bos.ecos.print;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.plugin.AbstractPrintServicePlugin;
import kd.bos.entity.plugin.args.CustomPrintDataEntitiesArgs;
import kd.bos.orm.ORM;
public class PrintEntryCellPlugin extends AbstractPrintServicePlugin {
 @Override
 public void customPrintDataEntities(CustomPrintDataEntitiesArgs e) {
  // TODO Auto-generated method stub
  super.customPrintDataEntities(e);
  // 新的数据包
  List<DynamicObject> newDataEntities = new ArrayList<>();
  // 数据源的标识
  String dataSourceName = e.getDataSourceName();
  // 自定义字段的集合
  Set<String> customFields = e.getCustomFields();
  // 查询的数据包
  List<DynamicObject> dataEntities = e.getDataEntities();
  // 查询当前单据的pkid
  Object billId = e.getPKId();
  if ("entry_two".equals(dataSourceName)) {
   // 如果分录没有数据,自己去查询,并且添加的话
   // 多个单据的数据包
   DynamicObjectCollection queryCol = ORM.create().query("kdec_twopur_apply",null);
   // 我们只需要分录的数据包
   List<DynamicObject> customDataEntites = queryCol.stream()
     .flatMap(dataEntity -> dataEntity.getDynamicObjectCollection("kdec_entryentity").stream())
     .collect(Collectors.toList()); 
   newDataEntities.addAll(customDataEntites);
   e.setDataEntities(newDataEntities);
  }
  
 }
}

这只是个简单的例子,使用时需要进行优化等,可以作为参考


图标赞 4
4人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!