引入时携带引入文件到单据的附件字段原创
金蝶云社区-陈来珍
陈来珍
5人赞赏了该文章 1798次浏览 未经作者许可,禁止转载编辑于2022年02月11日 09:49:54

关键词:

引入、引入文件、附件字段

一、需求背景

在列表的引入操作时,同时把引入的excel文件以附件的形式上传到引入的单据的附件字段中。

01.png

02.png

二、思路与方案

        在单据上添加一个大文本字段,用来保存附件地址的值,在引入插件的调用具体的保存事件demo.importAtt.BatchImportAttPlugin.save(List<ImportBillData>, ImportLogger)时,把上传的excel文件的地址值传入数据包中;然后再在单据插件的引入后事件中demo.importAtt.ImportAttBillPlugin.afterImportData(ImportDataEventArgs)把附件地址插入构建的附件对象中,然后赋值对应单据数据的附件字段的值即可。

三、实现过程

1、 调用webapi保存操作之前,传入附件地址

public class BatchImportAttPlugin extends BatchImportPlugin {
    @Override
    protected ApiResult save(List<ImportBillData> rowdatas, ImportLogger logger) {
        Iterator<ImportBillData> it = rowdatas.iterator();
        String srcFile = logger.getSrcFile();
           while(it.hasNext()){
               ImportBillData data = it.next();
               JSONObject json = data.getData();
               json.put("kded_importurl", srcFile);
           }
       return super.save(rowdatas, logger);
    }
}

2、 构建附件对象,赋值单据数据的附件字段。

public class ImportAttBillPlugin extends AbstractBillPlugIn{
    @Override
    public void afterImportData(ImportDataEventArgs e) {//原始数据填充model后,保存前事件
       DynamicObject dataEntity = this.getModel().getDataEntity(true);
       String url = dataEntity.getString("kded_importurl");
       if (StringUtils.isNotEmpty(url)) {
           String[] split = url.split("/");
           String urlName = null;
           String type = null;
           if (split.length > 1) {
              urlName = split[split.length - 1];
              String[] namesplit = urlName.split("\\.");
              type = namesplit[namesplit.length - 1];
           }
           //创建结构化下载地址
           String downurl = UrlService.getDomainContextUrl() + "/attachment/download.do?path=/" + url;
           DynamicObject attObj = BusinessDataServiceHelper.newDynamicObject("bd_attachment");
           attObj.set("name", urlName);
           attObj.set("size", 0L);
           attObj.set("uid", "rc-upload-" + UUID.randomUUID().toString());
           attObj.set("url", downurl);
           attObj.set("type", type);
           //tempfile=1表示持久化附件对象
           attObj.set("tempfile", 1);
           ORM orm = ORM.create();
           long id = orm.genLongId("bd_attachment");
           attObj.set("id", id);
           attObj.set("pageid", "");
           attObj.set("number", UUID.randomUUID().toString());
           attObj.set("status", "B");
           Date now = new Date();
           attObj.set("modifytime", now.getTime());
           attObj.set("creator", UserServiceHelper.getCurrentUserId());
           SaveServiceHelper.save(new DynamicObject[] {attObj});
           DynamicObjectCollection attCol = dataEntity.getDynamicObjectCollection("kded_impattachment");
           attCol.addNew().set("fbasedataid", attObj);
       }
super.afterImportData(e);}}

注意:ImportAttBillPlugin要注册到单据插件上

三、实现效果

上传引入的数据文件”引出数据_携带附件引入_1215aaa”

03.png

查看上传单据数据,附件字段已经绑定了上传的附件地址

04.png

05.png

四、开发环境版本

COSMICV4.0.010.0

五、参考资料

【开发平台】指导手册

学习成长中心


赞 5