You need to sign in to do that
Don't have an account?
Tyler Harris 8
Trying to clone attachment and associate to new object record
Hello,
I'm trying to query attachments associated to a 'published' version of a record and clone the record and the attachment. So far I've been able to clone the record, but I can't get the attachment to relate to the new record. I'm doing this in a class that I'm using in a trigger.
It starts to fall apart when I try to generate a map of the attachment ids here:
Debug log:
10:23:33.0 (1097819166)|METHOD_ENTRY|[17]|01p34000000tOfg|GlobalPRM_PartnerLocatorTriggerHelper.updateDraftRecord(Map<Id,Partner_Locator_Detail__c>) 10:23:33.0 (1107909785)|SOQL_EXECUTE_BEGIN|[36]|Aggregations:0|SELECT Id, Name, Partner_Account__c, Publication_Status__c FROM Partner_Locator_Detail__c WHERE Publication_Status__c = 'Published' 10:23:33.0 (1116469314)|SOQL_EXECUTE_END|[36]|Rows:230 10:23:33.0 (1145927691)|SOQL_EXECUTE_BEGIN|[48]|Aggregations:0|SELECT Id, Advantage_Partner_Program_Tier__c, Applications_Usage__c, Business_Segment__c, Field_Embedded_Images__c, Field_Product_Image__c, Field_Product_Image2__c, Field_Product_Image2_Timestamp__c, Field_Product_Image_Timestamp__c, Industries__c, Partner_Type__c, Product_Portfolio_Alternate_Text__c, Product_Portfolio_Title__c, Products__c, Regions__c, Segment_Overview__c, Segment_Headline__c, Partner_Locator_Detail__c FROM Business_Segment__c WHERE Partner_Locator_Detail__c IN :tmpVar1 10:23:33.0 (1333273631)|SOQL_EXECUTE_END|[48]|Rows:410 10:23:33.0 (1385104076)|SOQL_EXECUTE_BEGIN|[56]|Aggregations:0|SELECT Id, Body, BodyLength, ContentType, Description, Name, ParentID FROM Attachment WHERE ParentID IN :tmpVar1 10:23:34.102 (2102263073)|SOQL_EXECUTE_END|[56]|Rows:17 10:23:34.102 (2108363986)|DML_BEGIN|[90]|Op:Insert|Type:Business_Segment__c|Rows:1 10:23:34.102 (2139209464)|DML_END|[90]
I'm trying to query attachments associated to a 'published' version of a record and clone the record and the attachment. So far I've been able to clone the record, but I can't get the attachment to relate to the new record. I'm doing this in a class that I'm using in a trigger.
public void updateDraftRecord(Map<Id,Partner_Locator_Detail__c> newMap){ List<Partner_Locator_Detail__c> ptr = [SELECT Id, Name, Partner_Account__c,Publication_Status__c FROM Partner_Locator_Detail__c WHERE Publication_Status__c = 'Published' ]; Map<Id, Partner_Locator_Detail__c> acctPldMap = new Map<Id, Partner_Locator_Detail__c>(); for(Partner_Locator_Detail__c pld:ptr){ acctPldMap.put(pld.Partner_Account__c, pld); } system.debug(acctPldMap); // List<Attachment> atc = [SELECT Id, Name, ParentID FROM Attachment WHERE ParentID IN :acctPldMap.values()]; // Map<Id, Attachment> attachMap = new Map<Id, Attachment>(); List<Business_Segment__c> biz = [SELECT Id, Advantage_Partner_Program_Tier__c,Applications_Usage__c,Business_Segment__c,Field_Embedded_Images__c,Field_Product_Image__c,Field_Product_Image2__c,Field_Product_Image2_Timestamp__c, Field_Product_Image_Timestamp__c,Industries__c,Partner_Type__c, Product_Portfolio_Alternate_Text__c,Product_Portfolio_Title__c,Products__c, Regions__c, Segment_Overview__c,Segment_Headline__c, Partner_Locator_Detail__c FROM Business_Segment__c WHERE Partner_Locator_Detail__c IN :acctPldMap.values() ]; Map<Id, Business_Segment__c> ptrBizMap = new Map<Id, Business_Segment__c>(); system.debug(ptrBizMap); for(Business_Segment__c bizSeg: biz){ ptrBizMap.put(bizSeg.Partner_Locator_Detail__c, bizSeg); } system.debug(ptrBizMap); List<Attachment> bizAttach = [SELECT Id,Body,BodyLength,ContentType,Description, Name, ParentID FROM Attachment WHERE ParentID IN :ptrBizMap.values()]; system.debug(bizAttach); Map<Id, Attachment> bizAttachMap = new Map<Id, Attachment>(); for(Attachment attach: bizAttach){ bizAttachMap.put(attach.ParentId, attach); } system.debug(bizAttachMap.values()); List<Business_Segment__c> bizSegInsert = new List<Business_Segment__c>(); List<Attachment> attachmentToInsert = new List<Attachment>(); for(Partner_Locator_Detail__c psd : newMap.values()){ if(acctPldMap.containsKey(psd.Partner_Account__c) && psd.Publication_Status__c=='Draft' && psd.isClone()){ if(ptrBizMap.size() >0 && ptrBizMap.containsKey(acctPldMap.get(psd.Partner_Account__c).id)){ Business_Segment__c bizs = ptrBizMap.get(acctPldMap.get(psd.Partner_Account__c).id); Business_Segment__c bizClone = bizs.clone(false,true); bizClone.Partner_Locator_Detail__c = psd.id; BizSegInsert.add(bizClone); if(psd.Partner_Account__c !=null){ if(ptrBizMap.get(psd.Partner_Account__c) != null ){ if(bizAttachMap.size() > 0 && bizAttachMap.containsKey(ptrBizMap.get(psd.Partner_Account__c).Id)){ Attachment biza = bizAttachMap.get(ptrBizMap.get(psd.Partner_Account__c).Id); system.debug(biza); Attachment bizaClone = biza.clone(false,true); bizaClone.ParentId = psd.id; attachmentToInsert.add(bizaClone); } } } } } } if(BizSegInsert !=null && BizSegInsert.size()>0){ insert BizSegInsert; } if(attachmentToInsert !=null && attachmentToInsert.size() > 0){ insert attachmentToInsert; } }
It starts to fall apart when I try to generate a map of the attachment ids here:
List<Attachment> bizAttach = [SELECT Id,Body,BodyLength,ContentType,Description, Name, ParentID FROM Attachment WHERE ParentID IN :ptrBizMap.values()]; system.debug(bizAttach); Map<Id, Attachment> bizAttachMap = new Map<Id, Attachment>(); for(Attachment attach: bizAttach){ bizAttachMap.put(attach.ParentId, attach); }
Debug log:
10:23:33.0 (1097819166)|METHOD_ENTRY|[17]|01p34000000tOfg|GlobalPRM_PartnerLocatorTriggerHelper.updateDraftRecord(Map<Id,Partner_Locator_Detail__c>) 10:23:33.0 (1107909785)|SOQL_EXECUTE_BEGIN|[36]|Aggregations:0|SELECT Id, Name, Partner_Account__c, Publication_Status__c FROM Partner_Locator_Detail__c WHERE Publication_Status__c = 'Published' 10:23:33.0 (1116469314)|SOQL_EXECUTE_END|[36]|Rows:230 10:23:33.0 (1145927691)|SOQL_EXECUTE_BEGIN|[48]|Aggregations:0|SELECT Id, Advantage_Partner_Program_Tier__c, Applications_Usage__c, Business_Segment__c, Field_Embedded_Images__c, Field_Product_Image__c, Field_Product_Image2__c, Field_Product_Image2_Timestamp__c, Field_Product_Image_Timestamp__c, Industries__c, Partner_Type__c, Product_Portfolio_Alternate_Text__c, Product_Portfolio_Title__c, Products__c, Regions__c, Segment_Overview__c, Segment_Headline__c, Partner_Locator_Detail__c FROM Business_Segment__c WHERE Partner_Locator_Detail__c IN :tmpVar1 10:23:33.0 (1333273631)|SOQL_EXECUTE_END|[48]|Rows:410 10:23:33.0 (1385104076)|SOQL_EXECUTE_BEGIN|[56]|Aggregations:0|SELECT Id, Body, BodyLength, ContentType, Description, Name, ParentID FROM Attachment WHERE ParentID IN :tmpVar1 10:23:34.102 (2102263073)|SOQL_EXECUTE_END|[56]|Rows:17 10:23:34.102 (2108363986)|DML_BEGIN|[90]|Op:Insert|Type:Business_Segment__c|Rows:1 10:23:34.102 (2139209464)|DML_END|[90]