单据体列分开两个数据表格打印原创
4人赞赏了该文章
1,000次浏览
编辑于2021年05月28日 14:32:57
场景:
单据体分录列过多,使用一个数据表格打印不完,这时就可以将单据体数据拆成两个或多个,使用多个数据表格打印,但是如果多个数据表格绑定通过数据源(单据体)就会只加载一次数据,就会出现第二个数据表格数据不全,此时我们就可以使用自定义数据源,在代码中干预拉取数据。
步骤 1 添加自定义数据源
步骤 2 数据表格绑定这个自定义数据源
效果图:
插件代码:
package kd.bos.ecos.print;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
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;
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);
}
}
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人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读