基础资料附件字段附件如何保存到已有单据的附件字段原创
金蝶云社区-陈来珍
陈来珍
2人赞赏了该文章 1665次浏览 未经作者许可,禁止转载编辑于2022年10月12日 13:56:43

关键词:附件字段、落库

一、需求

有一个单据D(kded_demod_clz),在其列表中有一个“同步附件”的按钮,点击该按钮时,同步已选单据上物品基础资料的附件字段附件到单据D的附件字段上。

image.png

image.png

二、思路与方案

首先,通过orm接口查出已选基础资料的附件字段的附件信息,然后直接后台赋值给单据D就行了。对于已持久化的附件,两个实体共用一个附件地址附件时,某一个实体删除附件,另外一个实体中依然可以存在该附件。

三、    实现过程

package example.demoD;

public class DemoDBillListPlugin extends AbstractListPlugin {
	@Override
	public void itemClick(ItemClickEvent evt) {
		if (evt.getItemKey().equals("kded_syncattfield")) {
			BillList billList = this.getView().getControl("billlistap");
			String billFormId = billList.getBillFormId();
			ListSelectedRowCollection selectedRows = billList.getSelectedRows();
			ArrayList<Object> ids = new ArrayList<>();
			//先查询出来列表选择的行数据id的集合,然后通过id集合一次查库
			for (ListSelectedRow listSelectedRow : selectedRows) {
				Object primaryKeyValue = listSelectedRow.getPrimaryKeyValue();
				ids.add(primaryKeyValue);
			}
			DynamicObject[] dObjs = BusinessDataServiceHelper.load(billFormId, "kded_dgoods,kded_attachmentfielddemod",
					new QFilter[] { new QFilter("id", QCP.in, ids) });
			for (DynamicObject dObj : dObjs) {
				// 获取单据D上的附件字段信息
				DynamicObjectCollection dAttCol = dObj.getDynamicObjectCollection("kded_attachmentfielddemod");
				DynamicObject goodsObj = dObj.getDynamicObject("kded_dgoods");
				/**
				 * 单据D上的基础资料kded_dgoods,必须添加引用附件字段的引用属性,下面才能直接getDynamicObjectCollection("kded_attachmentfield")获取附件字段数据
				 * 否则需要根据goodsObj的pkid去BusinessDataServiceHelper.loadSingle出来才能查询到附件字段数据
				 */
				DynamicObjectCollection goodsAttCol = goodsObj.getDynamicObjectCollection("kded_attachmentfield");
				// 遍历物品的附件字段的附件信息,赋值给单据D的附件 字段
				for (DynamicObject goodAtt : goodsAttCol) {
					dAttCol.addNew().set("fbasedataid", goodAtt.get("fbasedataid"));
				}
			}

			 OperationResult result = SaveServiceHelper.saveOperate("save", billFormId, dObjs,OperateOption.create());
			 if (result.isSuccess()) {
				this.getView().showSuccessNotification("附件同步成功");
			}else {
				this.getView().showSuccessNotification("附件同步失败");
			}
			// option)
		}
		super.itemClick(evt);
	}
}

四、    效果图

单据列表选择单据,并点击”同步附件“。提示”同步成功“后,打开单据,可以看到附件字段中已上传了附件。

image.png


五、开发环境版本

V5.0.002

六、参考资料

【开发平台】指导手册

学习成长中心

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

已落库附件面板附件转已落库附件字段


 


赞 2