引入时携带引入文件到单据的附件字段原创
6人赞赏了该文章
2,204次浏览
编辑于2022年02月11日 09:49:54
关键词:
引入、引入文件、附件字段
一、需求背景
在列表的引入操作时,同时把引入的excel文件以附件的形式上传到引入的单据的附件字段中。
二、思路与方案
在单据上添加一个大文本字段,用来保存附件地址的值,在引入插件的调用具体的保存事件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”
查看上传单据数据,附件字段已经绑定了上传的附件地址
四、开发环境版本
COSMICV4.0.010.0
五、参考资料
引入时携带引入文件到单据的附件字段.zip(12.13KB)
赞 6
6人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读