如何在自定义数据源中实现单据体列分两个表打印原创
金蝶云社区-闫方亮
闫方亮
4人赞赏了该文章 1616次浏览 未经作者许可,禁止转载编辑于2022年08月05日 15:49:39

关键词:打印模板


一、需求背景

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

二、实现方案

        在打印模板上面添加自定义数据源,通过插件代码后台去干预拉取数据。

三、实现过程

        3.1首先创建根据模板创建打印页面,在打印页面上先添加一个网格控件,根据需要可以合并拆分单元格,然后选择其中的一个网格单元格添加数据表格。如下图3.1所示

image.png

图3.1

        3.2然后选择根节点(采购申请打印)配置数据源,选择数据表格节点配置需要打印的具体的字段的数据源(可以是单据体、单据头、自定义数据源等)如下图3.2所示

image.pngimage.png 图3.2

        3.3配置自定义数据源,编写插件类实现分两个表格打印单据体数据,如下图3.3所示:

image.png图3.3

public class customPrintDataEntities extends AbstractPrintServicePlugin {

    @Override
    public void customPrintDataEntities(CustomPrintDataEntitiesArgs e) {
        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(dataSourceName!=null && "entry_two".equals(dataSourceName)){
            //多个单据的数据包
            DynamicObjectCollection queryCol= ORM.create().query("kdec_purcharebill",null);
            //我们需要的分录的数据包
            List<DynamicObject> customDataEntites=queryCol.stream().flatMap(dataEntity ->
                    dataEntity.getDynamicObjectCollection("entryentity").stream()).
                    collect(Collectors.toList());
            newDataEntities.addAll(customDataEntites);
            e.setDataEntities(newDataEntities);
        }
    }
}

        3.4配置好数据源以后,在第二个数据表格配置数据源的时候选择自定义数据源,如下图3.4所示

image.png图3.4

四、效果图

        4.1最终可以预览看到打印界面的效果图如图4.1所示:

image.png

图4.1

五、开发环境版本

        不限,本样例采用的轻量级环境,版本是: 苍穹版本号 COSMICV4.0.014.0  星瀚版本号 CONSTELLATIONV4.0.014.0

六、注意事项

        本案例是旧版本打印模板,如果使用的是苍穹4.0版本的打印,默认支持使用同一个数据源进行多数据表格分开打印。编写插件类的时候一定要注意对应的标识,配置自定义数据源的标识跟单据上的标识保持一致。

七、参考资料

打印插件

打印插件4.0

学习成长中心

参考附件中的代码补丁

  1. 元数据直接在开发平台导入

  2. 源代码直接在开发工具idea/eclipse中导入

赞 4