如何将一个DAC的数据完整复制到另一个DAC?代码报错求助
问题分析与修复方案
让我一步步拆解你两段代码里的问题,再给出能正常工作的实现方式:
第一段代码无效果的原因
- 错误获取源数据:你在
RowPersisting事件里用this.RoutingDetails.Select(),这个方法只会返回数据视图里的第一条记录,而不是所有需要复制的行。而且RowPersisting是针对单条正在持久化的RoutingOperation行触发的事件,应该处理当前的e.Row,而不是去查询整个视图。 - 跨DAC复制方式错误:
CreateCopy方法只能复制同类型DAC的对象,你直接把RoutingOperation实例复制后插入RoutingDetailRevs,因为类型不匹配,这个操作根本不会生效。
第二段代码报错的原因
PXCache<T>.CreateCopy不是静态方法,你不能直接通过类名调用,必须使用具体的缓存实例(比如this.RoutingDetailRevs.Cache)来调用这个方法。而且同样存在跨DAC直接复制的问题——不同DAC类型的对象无法通过CreateCopy直接转换。
正确的实现思路
要把RoutingOperation的数据复制到RoutingOperationRev,核心是:针对每一条源DAC记录,创建目标DAC的新实例,手动(或用工具)映射对应字段,再插入到目标数据视图中。
方案1:单条行复制(针对RowPersisting事件)
如果只需要在每条RoutingOperation持久化时,复制当前行到目标DAC,用这段代码:
protected void RoutingOperation_RowPersisting(PXCache cache, PXRowPersistingEventArgs e) { var sourceRow = (RoutingOperation)e.Row; if (sourceRow == null) return; // 创建目标DAC的新实例 var targetRow = new RoutingOperationRev(); // 手动映射字段(请根据实际字段名调整) targetRow.OperationID = sourceRow.OperationID; targetRow.Description = sourceRow.Description; targetRow.WorkCenterID = sourceRow.WorkCenterID; // 继续添加其他需要复制的字段... // 将目标行插入到对应数据视图 this.RoutingDetailRevs.Insert(targetRow); }
方案2:批量复制所有行
如果需要一次性复制所有RoutingOperation行到目标DAC(比如在保存单据时),可以在主DAC的Persisting事件中处理:
protected void Routing_Persisting(PXCache cache, PXPersistingEventArgs e) { // 只在插入或更新单据时执行复制 if (e.Operation is PXDBOperation.Insert or PXDBOperation.Update) { // 可选:先清空已有的目标行,避免重复数据 foreach (var existingRev in this.RoutingDetailRevs.Select()) { this.RoutingDetailRevs.Delete(existingRev); } // 遍历所有源行,逐个复制 foreach (var sourceRow in this.RoutingDetails.Select()) { var targetRow = new RoutingOperationRev(); // 字段映射,这里可以用PXCopyPasteHelper简化(如果字段名/类型匹配) PXCopyPasteHelper.Copy(cache, sourceRow, this.RoutingDetailRevs.Cache, targetRow); // 手动补充PXCopyPasteHelper没覆盖的字段(如果有) // targetRow.CustomField = sourceRow.CustomField; this.RoutingDetailRevs.Insert(targetRow); } } }
小技巧:用PXCopyPasteHelper简化字段映射
如果两个DAC的字段名称和数据类型大部分一致,可以用PXCopyPasteHelper.Copy()自动匹配复制,省去手动逐一赋值的麻烦,就像上面方案2里用到的那样。
内容的提问来源于stack exchange,提问作者Helmi Nandani
相关产品推荐
相关产品推荐

