function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
vpmvpm 

create an opportunity when stage Name=="ClosedWon"

When an opportunity is created as Stage Name = =’Closed Won ‘ create an opportunity of this opportunity whose Name will be as  "Cloned+Name of new Opportunity".

As well as Associated Account will be same as new opportunity

 

Thanks in advance

Best Answer chosen by Admin (Salesforce Developers) 
Devender MDevender M
trigger CloneOpp on Opportunity (before insert, before update) {
list<Opportunity> listOfOppTiInsert = new list<Opportunity>();
String StageChanged='Closed Won';
for(Opportunity o:trigger.new){
if(o.StageName==StageChanged)
{
Opportunity Clone = o.clone(false,true);
clone.Name='Cloned ' + clone.Name;
clone.StageName='Closed Won Cloned';
clone.CloseDate =clone.CloseDate+365;
listOfOppTiInsert.add(clone);
}

}
if(!listOfOppTiInsert.isEmpty()) {
insert listOfOppTiInsert;
}

}

All Answers

Vinita_SFDCVinita_SFDC

Hello,

 

For this requirement create a trigger after update with the condition stage name - "closed won" within the trigger and while cloning the opportunity you can specify the account name within the code.

For code samples please refer following links:

 

http://salesforce.stackexchange.com/questions/11639/cloning-opportunities

 

http://salesforce.stackexchange.com/questions/8493/deep-clone-parent-child-grand-child

Devender MDevender M
Hi

You can try this code
trigger OpportunityClone on Opportunity (after insert) {
list<Opportunity> listOfOpportunity = new list<Opportunity>();
for(Opportunity opp : trigger.New) {
if(opp.StageName == 'Closed Won') {
Opportunity newOpp = opp.clone(false, true);
newOpp.Name = 'Cloned' + newOpp.Name;
listOfOpportunity.add(newOpp);
}
}
if(!listOfOpportunity.isEmpty()) {
insert listOfOpportunity;
}
}
vpmvpm
Hi
This s my code.
trigger CloneOpp on Opportunity (before insert, before update) {

Set<Id> oppId=new Set<id>();


String StageChanged='Closed Won';
for(Opportunity o:trigger.new){
if(o.StageName==StageChanged)
{
oppId.add(o.Id);

}

system.debug('#$%$%$%$'+o);
Opportunity Clone = o.clone(false,true);
system.debug('@#$@!534'+clone);
clone.Name='Cloned';
clone.StageName='Closed Won Cloned';
clone.CloseDate =clone.CloseDate+365;
insert clone;
//oppclone.add(clone);
system.debug('!@@@#!1@#'+Clone);
}


}



but I got this error
Error:Apex trigger CloneOpp caused an unexpected exception, contact your administrator: CloneOpp: execution of BeforeUpdate caused by: System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, CloneOpp: maximum trigger depth exceeded Opportunity trigger event BeforeUpdate for [0069000000BeUb9] Opportunity trigger event BeforeInsert for [new] Opportunity trigger event BeforeInsert for [new] Opportunity trigger event BeforeInsert for [new] Opportunity trigger event BeforeInsert for [new] Opportunity trigger event BeforeInsert for [new] Opportunity trigger event BeforeInsert for [new] Opportunity trigger event BeforeInsert for [new] Opportunity trigger event BeforeInsert for [new] Opportunity trigger event BeforeInsert for [new] Opportunity trigger event BeforeInsert for [new] Opportunity trigger event BeforeInsert for [new] Opportunity trigger event BeforeInsert for [new] Opportunity trigger event BeforeInsert for [new] Opportunity trigger event BeforeInsert for [new] Opportunity trigger event BeforeInsert for [new]: []: Trigger.CloneOpp: line 20, column 1
Devender MDevender M
hi copy paste this code it will work

trigger CloneOpp on Opportunity (before insert, before update) {
list<Opportunity> listOfOppTiInsert = new list<Opportunity>();
String StageChanged='Closed Won';
for(Opportunity o:trigger.new){
if(o.StageName==StageChanged)
{
Opportunity Clone = o.clone(false,true);
clone.Name='Cloned';
clone.StageName='Closed Won Cloned';
clone.CloseDate =clone.CloseDate+365;
listOfOppTiInsert.add(clone)'
}

}
if(!listOfOppTiInsert.isEmpty()) {
insert listOfOppTiInsert;
}

}
vpmvpm
I tried your code. While updating a opportunity stageName='Closed won', record was saved. But Name,StageName and CloseDate remains same.
In debug log i checked that stageName='Closed Won Clonned'.

In detail page trigger is not reflected.
My trigger is active only.
vpmvpm
FYI.. My scenario

Write trigger/triggers on Opportunity for the following scenario
When an opportunity is created as Stage Name = =’Closed Won ‘ create an opportunity of this opportunity whose
Name will be as ‘Cloned’+’Name of new opportunity.
Stage Name will be “Closed Won Cloned”
Close Date will be new opportunity’s Close Date + 1year
Associated Account will be same as new opportunity.
Same functionality if any opportunity gets updated as Stage Name “Closed Won”.
Devender MDevender M
trigger CloneOpp on Opportunity (before insert, before update) {
list<Opportunity> listOfOppTiInsert = new list<Opportunity>();
String StageChanged='Closed Won';
for(Opportunity o:trigger.new){
if(o.StageName==StageChanged)
{
Opportunity Clone = o.clone(false,true);
clone.Name='Cloned ' + clone.Name;
clone.StageName='Closed Won Cloned';
clone.CloseDate =clone.CloseDate+365;
listOfOppTiInsert.add(clone);
}

}
if(!listOfOppTiInsert.isEmpty()) {
insert listOfOppTiInsert;
}

}
This was selected as the best answer
vpmvpm

Thanks. Record remains the same. Nothing updated.

Can you explain the scenario what are the steps i have to follow ?
when Stage name is changed or created to "closed won" , this trigger has to fire. Name , stage name,close date will change like above.
In database there will be 2 record like
*test
*clonned test
Is this rite?

 

 If I have 3 scenarios in opportunity, i have to write 3 separate trigger or in single trigger  ?


vpm wrote:
FYI.. My scenario

Write trigger/triggers on Opportunity for the following scenario
When an opportunity is created as Stage Name = =’Closed Won ‘ create an opportunity of this opportunity whose
Name will be as ‘Cloned’+’Name of new opportunity.
Stage Name will be “Closed Won Cloned”
Close Date will be new opportunity’s Close Date + 1year
Associated Account will be same as new opportunity.
Same functionality if any opportunity gets updated as Stage Name “Closed Won”.

 

Devender MDevender M
You can use same trigger, rather than writing separate triggers.