?DynamicObject对象复制拷贝,界面对象复制拷贝,万能拷贝方法分享原创
7人赞赏了该文章
3,053次浏览
编辑于2021年06月10日 20:44:22
场景1,由A实体数据复制到B实体,根据字段名相同赋值,前提字段类型要相同
场景2,由A实体生成一个数据相同的实体可用于存库
代码如下
/** * 拷贝对象数据 包含分录数据<br> * 从 from 拷贝到 to<br> * 以 to 有的属性 从 from 中获取 * @param from * @param to * @param entryCopyType 1 分录不处理 2 分录清空全覆盖 3 分录追加 4 分录按ID覆盖 * @param ignoreNull 空值 不设 * @param isMulReset 重置多选主键 * @param clearPrimarykeyValue 清除主键 */ public static void copyDynamicObject(DynamicObject from, DynamicObject to, int entryCopyType, boolean ignoreNull, boolean isMulReset, boolean clearPrimarykeyValue) { DynamicObjectType dynamicObjectType = to.getDynamicObjectType(); DataEntityPropertyCollection properties = dynamicObjectType.getProperties(); DynamicObjectType dataFromDynamicObjectType = from.getDynamicObjectType(); DataEntityPropertyCollection dataFromProperties = dataFromDynamicObjectType.getProperties(); for(IDataEntityProperty property : properties) { String name = property.getName(); if(!dataFromProperties.containsKey(name)) { continue; } //分录处理 if(property instanceof EntryProp) { if(entryCopyType == 1) { continue; } //分录对象 DynamicObjectCollection toDynamicObjectCollection = to.getDynamicObjectCollection(name); if(entryCopyType == 2) { toDynamicObjectCollection.clear(); } DynamicObjectCollection dataFromDynamicObjectCollection = from.getDynamicObjectCollection(name); for(DynamicObject dataFromDynamicObject : dataFromDynamicObjectCollection) { String fromEntryPk = DTF.getString(dataFromDynamicObject.getPkValue()); DynamicObject dynamicObject = null; boolean isadd = false;//是追加的行 if(entryCopyType == 4 && !DTF.isEmpty(fromEntryPk)) { for(DynamicObject toObj : toDynamicObjectCollection) { String toEntryPk = DTF.getString(toObj.getPkValue()); if(DTF.isEmpty(toEntryPk)) { continue; } if(toEntryPk.equals(fromEntryPk)) { dynamicObject = toObj; break; } } } if(dynamicObject == null) { dynamicObject = new DynamicObject(toDynamicObjectCollection.getDynamicObjectType()); isadd = true; } copyDynamicObject(dataFromDynamicObject, dynamicObject, 1, ignoreNull, isMulReset, clearPrimarykeyValue); if((entryCopyType == 2 || entryCopyType == 3) && isadd) { toDynamicObjectCollection.add(dynamicObject); } } } else if(property instanceof MulBasedataProp && isMulReset) { MulBasedataProp mulBasedataProp = ((MulBasedataProp) property); IDataEntityType itemType = mulBasedataProp.getItemType(); ISimpleProperty primaryKey = itemType.getPrimaryKey(); DynamicObjectCollection toColls = (DynamicObjectCollection)to.get(name); toColls.clear(); DynamicObjectType toDynamicObjectType = toColls.getDynamicObjectType(); DynamicObjectCollection fromColls = (DynamicObjectCollection)from.get(name); for (DynamicObject coll : fromColls) { DynamicObject mulBaseData = new DynamicObject(toDynamicObjectType); copyDynamicObject(coll, mulBaseData, 1, ignoreNull, false, false); primaryKey.resetValue(mulBaseData); toColls.add(mulBaseData); } } else { if(ignoreNull && from.get(name) == null) { continue; } to.set(name, from.get(name)); } } if(clearPrimarykeyValue) { ISimpleProperty toPrimaryKey = dynamicObjectType.getPrimaryKey(); toPrimaryKey.resetValue(to); } }
推荐阅读