打印多张关联单据图片

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

打印多张关联单据图片

1. 案例介绍

    在打印采购申请单时,希望同时能够打印上游单据中多张图片,并且每张图片展示一页纸,该案例将介绍如何通过二开插件实现此类场景。

2. 适用版本

    金蝶云苍穹 V5.0.011及以上版本

3. 模板配置

1. 模板设计

2. 注册插件

    创建插件类PrintRefBillImagePlugin,并继承AbstractPrintPlugin打印插件基类。(基类全路径kd.bos.print.core.plugin.AbstractPrintPlugin),随后在打印模板中注册该插件。

4. 插件开发

Java

 

public class PrintRefBillImagePlugin extends AbstractPrintPlugin {

  //主数据源标识(采购订单formId

   private static final String MAIN_DS = "kd_cgdd";

  //自定义数据源标识

   private static final String CUSTOM_DS = "imageDs";

   //关联上游单据formId(采购申请单formId

   private static final String REF_BILL = "kd_cgsqd";


   @Override

   public void beforeLoadData(BeforeLoadDataEvent evt) {

       PrtDataSource dataSource = evt.getDataSource();

      //在加载主数据数据之前,添加查询字段,这样后续的主数据源DataRowSet中将会查询出源ID字段

       if (MAIN_DS.equals(dataSource.getDsName()) && dataSource instanceof MainDataSource) {

           MainDataSource mainDataSource = (MainDataSource) dataSource;

          //查询字段添加源单ID

           mainDataSource.getQueryField().add("sourcebill");

       }

   }


   @Override

   public void loadCustomData(CustomDataLoadEvent evt) {

       final List<DataRowSet> customDataRows = evt.getCustomDataRows();

       //加载自定义数据源,根据关联关系查询出上游单据中图片地址,构造自定义数据源数据包

       if (CUSTOM_DS.equals(evt.getDataSource().getDsName())) {

           //获取主数据源数据

           DataRowSet mainRowSet = this.getMainDataVisitor().getDataRowSet();

           //拿到源单ID

           Object sourceBill = mainRowSet.getField("sourcebill").getValue();

           //根据源单ID查询图片地址信息

           DynamicObject refBillObj = BusinessDataServiceHelper.loadSingleFromCache(REF_BILL, "id,entryentity.recpayimage",

                   new QFilter[]{new QFilter("id", QCP.equals, sourceBill)});

           //该案例中图片地址在源单的分中,故先获取分录数据

           DynamicObjectCollection entryEntity = refBillObj.getDynamicObjectCollection("entryentity");

           //遍历分类行,拿到其中图片地址信息,构造数据包

           for (DynamicObject entryObj : entryEntity) {

               String imageUrl = entryObj.getString("recpayimage");

               if (StringUtils.isNotBlank(imageUrl)) {

                   DataRowSet dataRowSet = new DataRowSet();

                   //根据图片地址信息构造图片字段,图片字段使用ImageField

                   dataRowSet.put("imageUrl", new ImageField(imageUrl));

                   customDataRows.add(dataRowSet);

               }

           }

       }

   }


}

5. 效果预览

    可以看到,在打印采购订单的同时,关联打印出了采购申请单中的多张图片,且每张图片占据一页。


打印多张关联单据图片

1. 案例介绍 在打印采购申请单时,希望同时能够打印上游单据中多张图片,并且每张图片展示一页纸,该案例将介绍如何通过二开插件实现此...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息