如何将已有基础资料的附件面板的附件保存到已有单据的附件字段原创
金蝶云社区-陈来珍
陈来珍
3人赞赏了该文章 1321次浏览 未经作者许可,禁止转载编辑于2022年07月22日 16:09:59

关键词:附件面板、附件字段、落库

一、需求

有一个业务单据A(kded_attdemo_clz)的列表上,有个同步附件的按钮,点击同步附件,可以把物品附件面板上的附件同步到业务单据A的附件字段上。

image.png

a2.png

二、思路与方案

      在点击同步按钮时,获取用户选择行的单据数据,然后把选择的单据数据中物品基础资料数据的附件面板的数据查出来,赋值到业务单据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的单据列表,选择行,并点击按钮“同步附件”。

image.png

可以看到附件已被同步到附件字段

image.png

五、开发环境版本

V5.0.002

六、参考资料

【开发平台】指导手册

学习成长中心

引入时携带引入文件到单据的附件字段


 


赞 3