根据你提供的代码,我检测到以下几个问题:
- 代码中存在导入包名错误,请确认引入的包是否正确。
将 import kd.bos.servicehelper.BusinessDataServiceHelper;
修改为 import kd.bos.servicehelper.data.BusinessDataServiceHelper;
- ExchangeAttHelp 类中的 attToAttachmentFile 方法在调用 SaveServiceHelper.save 方法时缺少操作选项参数。
将 SaveServiceHelper.save(new DynamicObject[] {attObj});
修改为 SaveServiceHelper.saveOperate("save", "bd_attachment", new DynamicObject[] {attObj}, OperateOption.create());
- 代码中的 UserServiceHelper.getCurrentUser() 方法可能不存在或需要修改为合适的方法。请确保该方法可用并返回当前用户ID。
可以参考修正后的代码如下所示:
package kd.qyrv.cosmic.formplugin;
import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.datamodel.ListSelectedRow;
import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.entity.operate.result.OperationResult;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.list.BillList;
import kd.bos.servicehelper.AttachmentServiceHelper;
import kd.bos.servicehelper.data.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class YourFormPluginClass extends YourBaseClass {
@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");
// 附件面板转换为附件文件对象,并保存到数据库中
attToAttachmentFile(attachments, attCol);
OperationResult result = SaveServiceHelper.saveOperate("save", billFormId, new DynamicObject[] {Aobj}, OperateOption.create());
if (result.isSuccess()) {
this.getView().showSuccessNotification("同步成功!");
}
}
}
super.itemClick(evt);
}
private 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);
//设置其他字段值
//...
SaveServiceHelper.saveOperate("save", "bd_attachment", new DynamicObject[] {attObj}, OperateOption.create());
attCol.addNew().set("fbasedataid", attObj);
}
}
}
请注意,这只是对代码中明显错误的修正建议,仍然需要您根据实际需求和环境进行进一步调整。
内容由零声教学AI助手提供,问题来源于学员提问