You need to sign in to do that
Don't have an account?
Subhodeep Dey 1
Bulkification issue
Trigger:-
trigger CloneInternshipOpportunityTrigger on alu_Internship_Cycle__c after insert, before update, after update, before delete, after delete, after undelete){
if(Trigger.isInsert && Trigger.isAfter){
CloneInternshipOpportunity.createInternshipOpportunity(Trigger.new);
}
}
Helper class:-
public class CloneInternshipOpportunity {
@InvocableMethod
public static void createInternshipOpportunity(List<alu_Internship_Cycle__c> internCycle) {
try{
Map<Id,alu_Internship_Cycle__c> mapIdbyNewInternCyc = new Map<Id,alu_Internship_Cycle__c>();
//Fetch Existing Internship cycle
for(alu_Internship_Cycle__c newInternCyc : internCycle){
mapIdbyNewInternCyc.put(newInternCyc.Id, newInternCyc);
}
Map<Id,alu_Internship_Cycle__c> mapIdbyOldInternCyc = new Map<Id,alu_Internship_Cycle__c> ([
SELECT Id, Name, Start_Date__c
FROM alu_Internship_Cycle__c
WHERE Id NOT IN: mapIdbyNewInternCyc.keySet()
AND Start_Date__c =: mapIdbyNewInternCyc.values().Start_Date__c.addYears(-1) ]);
System.debug('mapIdbyOldInternCyc '+mapIdbyOldInternCyc);
List<Opportunity> oppListByOldCyc = [
SELECT id, Name, RecordTypeId, AccountId, Account.Name, Internship_Cycle__c, Internship_Cycle__r.Name, CloseDate, StageName
FROM Opportunity
WHERE Internship_Cycle__c IN: mapIdbyOldInternCyc.KeySet()
];
System.debug('oppListByOldCyc '+oppListByOldCyc);
//Set<Opportunity> oppsToClone = new Set<Opportunity>();
List<Opportunity> oppsToClone = new List<Opportunity>();
for(Id tmp : mapIdbyNewInternCyc.keySet()){
for(Opportunity opp : oppListByOldCyc){
Opportunity opps = new Opportunity();
opps.Name = 'Clone Opportunity';
opps.RecordTypeId = opp.RecordTypeId;
opps.CloseDate = opp.CloseDate;
opps.StageName = opp.StageName;
opps.AccountId = opp.AccountId;
opps.Internship_Cycle__c = tmp;
oppsToClone.add(opps);
}
}
insert oppsToClone;
System.debug('Opportunity>>>'+oppsToClone);
}catch (Exception e){
system.debug('Error '+e.getMessage() +' '+e.getLineNumber());
}
}
}
I have a task assigned to clone child record with new parent identity by referring the parent StartDate fields value with the record contains exactly one-year difference value.
Means:-
If Internship Cycle 'Cycle 1' have date 1/1/2016 and have 10 child records 'opportunities', If a user will create a new Internship Cycle record 'Cycle 2' have date 1/1/2017. Then it'll clone all the opportunities from 'Cycle 1' to 'Cycle 2' with new parent identity.
This task needs to be in upsert logic on the opportunity. i.e., if the 'Cycle 1's one of the child records 'opportunity 1' will update, then the cloned opportunity from 'opportunity 1' needs to be updated.
This is a high priority task for me, plz help me! :)
trigger CloneInternshipOpportunityTrigger on alu_Internship_Cycle__c after insert, before update, after update, before delete, after delete, after undelete){
if(Trigger.isInsert && Trigger.isAfter){
CloneInternshipOpportunity.createInternshipOpportunity(Trigger.new);
}
}
Helper class:-
public class CloneInternshipOpportunity {
@InvocableMethod
public static void createInternshipOpportunity(List<alu_Internship_Cycle__c> internCycle) {
try{
Map<Id,alu_Internship_Cycle__c> mapIdbyNewInternCyc = new Map<Id,alu_Internship_Cycle__c>();
//Fetch Existing Internship cycle
for(alu_Internship_Cycle__c newInternCyc : internCycle){
mapIdbyNewInternCyc.put(newInternCyc.Id, newInternCyc);
}
Map<Id,alu_Internship_Cycle__c> mapIdbyOldInternCyc = new Map<Id,alu_Internship_Cycle__c> ([
SELECT Id, Name, Start_Date__c
FROM alu_Internship_Cycle__c
WHERE Id NOT IN: mapIdbyNewInternCyc.keySet()
AND Start_Date__c =: mapIdbyNewInternCyc.values().Start_Date__c.addYears(-1) ]);
System.debug('mapIdbyOldInternCyc '+mapIdbyOldInternCyc);
List<Opportunity> oppListByOldCyc = [
SELECT id, Name, RecordTypeId, AccountId, Account.Name, Internship_Cycle__c, Internship_Cycle__r.Name, CloseDate, StageName
FROM Opportunity
WHERE Internship_Cycle__c IN: mapIdbyOldInternCyc.KeySet()
];
System.debug('oppListByOldCyc '+oppListByOldCyc);
//Set<Opportunity> oppsToClone = new Set<Opportunity>();
List<Opportunity> oppsToClone = new List<Opportunity>();
for(Id tmp : mapIdbyNewInternCyc.keySet()){
for(Opportunity opp : oppListByOldCyc){
Opportunity opps = new Opportunity();
opps.Name = 'Clone Opportunity';
opps.RecordTypeId = opp.RecordTypeId;
opps.CloseDate = opp.CloseDate;
opps.StageName = opp.StageName;
opps.AccountId = opp.AccountId;
opps.Internship_Cycle__c = tmp;
oppsToClone.add(opps);
}
}
insert oppsToClone;
System.debug('Opportunity>>>'+oppsToClone);
}catch (Exception e){
system.debug('Error '+e.getMessage() +' '+e.getLineNumber());
}
}
}
I have a task assigned to clone child record with new parent identity by referring the parent StartDate fields value with the record contains exactly one-year difference value.
Means:-
If Internship Cycle 'Cycle 1' have date 1/1/2016 and have 10 child records 'opportunities', If a user will create a new Internship Cycle record 'Cycle 2' have date 1/1/2017. Then it'll clone all the opportunities from 'Cycle 1' to 'Cycle 2' with new parent identity.
This task needs to be in upsert logic on the opportunity. i.e., if the 'Cycle 1's one of the child records 'opportunity 1' will update, then the cloned opportunity from 'opportunity 1' needs to be updated.
This is a high priority task for me, plz help me! :)