附件落库 (转载自 陈来珍-基础资料附件字段附件如何保存到已有单据的附件字段)
金蝶云社区-上分老开发谭云豪
上分老开发谭云豪
0人赞赏了该文章 352次浏览 未经作者许可,禁止转载编辑于2024年07月26日 09:37:20

关键字:附件,落库

一、需求

有一个单据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


本文转载自:开发者社区

作者:陈来珍

原文链接:https://vip.kingdee.com/article/293702895219248640?productLineId=29&lang=zh-CN

图标赞 0
0人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!