如何将已有基础资料的附件面板的附件保存到已有单据的附件字段原创
3人赞赏了该文章
1,782次浏览
编辑于2022年07月22日 16:09:59
关键词:附件面板、附件字段、落库
一、需求
有一个业务单据A(kded_attdemo_clz)的列表上,有个同步附件的按钮,点击同步附件,可以把物品附件面板上的附件同步到业务单据A的附件字段上。
二、思路与方案
在点击同步按钮时,获取用户选择行的单据数据,然后把选择的单据数据中物品基础资料数据的附件面板的数据查出来,赋值到业务单据A的附件面板。
三、实现过程
@Override public void itemClick(ItemClickEvent evt) { if (evt.getItemKey().equals("kded_synchronize")) { BillList billlist = this.getView().getControl("billlistap"); ListSelectedRowCollection selectedRows = billlist.getSelectedRows(); String billFormId = billlist.getBillFormId(); for (ListSelectedRow listSelectedRow : selectedRows) { Object primaryKeyValue = listSelectedRow.getPrimaryKeyValue(); //获取业务单据A的表单数据 DynamicObject Aobj = BusinessDataServiceHelper.loadSingle(primaryKeyValue, billFormId, "kded_attachmentfieldclz,kded_goods"); //物品数据 DynamicObject goodObj = Aobj.getDynamicObject("kded_goods"); // 获取物品附件面板的附件数据 List<Map<String, Object>> attachments = AttachmentServiceHelper.getAttachments( goodObj.getDataEntityType().getName(), goodObj.getPkValue(), "kded_attachmentpanelap"); //获取业务单据A的附件字段数据集 DynamicObjectCollection attCol = Aobj.getDynamicObjectCollection("kded_attachmentfieldclz"); // 附件面板转换为 ExchangeAttHelp.attToAttachmentFile(attachments, attCol); OperationResult result = SaveServiceHelper.saveOperate("save", billFormId, new DynamicObject[] {Aobj}, OperateOption.create()); if (result.isSuccess()) { this.getView().showSuccessNotification("同步成功!"); } } } super.itemClick(evt); } //自定义帮助类 public static void attToAttachmentFile(List<Map<String, Object>> attachments, DynamicObjectCollection attCol) { for (Map<String, Object> map : attachments) { //创建一条基础资料数据-附件字段 DynamicObject attObj = BusinessDataServiceHelper.newDynamicObject("bd_attachment"); attObj.set("name", map.get("name")); attObj.set("size", map.get("size")); attObj.set("uid", "rc-upload-" + UUID.randomUUID().toString()); attObj.set("url", map.get("url")); attObj.set("type", map.get("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}); attCol.addNew().set("fbasedataid", attObj); } }
四、效果图
打开业务单据A的单据列表,选择行,并点击按钮“同步附件”。
可以看到附件已被同步到附件字段
五、开发环境版本
V5.0.002
六、参考资料
附件面板数据保存到附件字段开发案例.zip(25.34KB)
赞 3
3人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读