You need to sign in to do that
Don't have an account?
Vignesh Ramshetty
Below is screenshort of error im getting unable to insert
Whenever the record inserted need to insert another record with same data
trigger opprunitybeforeandafter on Opportunity (Before insert, after insert){
if(trigger.isbefore == true && trigger.isinsert == true){
oppurinityamountclass.makefunction(trigger.new);
}
if(trigger.isafter == true && trigger.isinsert == true){
oppurinityamountclass.makefunction2(trigger.new,trigger.oldMap);
}
}
Public class oppurinityamountclass{
Public static void makefunction(list<Opportunity> varocc){
for(Opportunity varo : varocc){
if (varo.Amount >= 50000){
varo.Amount = varo.Amount/2;
}
}
}
Public static void makefunction2(list<Opportunity> varocd,map<id,Opportunity> varold){
List<Opportunity> varins = new List<Opportunity>();
for (Opportunity opp : varocd ){
opp.Name = varold.get(opp.id).Name;
opp.CloseDate = varold.get(opp.id).CloseDate;
opp.StageName = varold.get(opp.id).StageName;
varins.add(opp);
}
insert varins;
}
}
trigger opprunitybeforeandafter on Opportunity (Before insert, after insert){
if(trigger.isbefore == true && trigger.isinsert == true){
oppurinityamountclass.makefunction(trigger.new);
}
if(trigger.isafter == true && trigger.isinsert == true){
oppurinityamountclass.makefunction2(trigger.new,trigger.oldMap);
}
}
Public class oppurinityamountclass{
Public static void makefunction(list<Opportunity> varocc){
for(Opportunity varo : varocc){
if (varo.Amount >= 50000){
varo.Amount = varo.Amount/2;
}
}
}
Public static void makefunction2(list<Opportunity> varocd,map<id,Opportunity> varold){
List<Opportunity> varins = new List<Opportunity>();
for (Opportunity opp : varocd ){
opp.Name = varold.get(opp.id).Name;
opp.CloseDate = varold.get(opp.id).CloseDate;
opp.StageName = varold.get(opp.id).StageName;
varins.add(opp);
}
insert varins;
}
}
Can you try the below trigger and handler.
Trigger:
Handler:
Let me know if you face any issues.
If this solution helps, Please mark it as best answer.
Thanks,
All Answers
Can you share the error message more clearly. It is Blured out.
Also can you confirm what functionality you are trying to achieve in this trigger?
Thanks,
opprunitybeforeandafter: execution of AfterInsert caused by: System.NullPointerException: Attempt to de-reference a null object Class.oppurinityamountclass.makefunction2: line 22, column 1 Trigger.opprunitybeforeandafter: line 9, column 1
Below is the Code:
trigger opprunitybeforeandafter on Opportunity (Before insert, after insert){
if(trigger.isbefore == true && trigger.isinsert == true){
oppurinityamountclass.makefunction(trigger.new);
}
if(trigger.isafter == true && trigger.isinsert == true){
oppurinityamountclass.makefunction2(trigger.new,trigger.oldMap);
}
Public class oppurinityamountclass{
Public static void makefunction(list<Opportunity> varocc){
for(Opportunity varo : varocc){
if (varo.Amount >= 50000){
varo.Amount = varo.Amount/2;
}
}
}
Public static void makefunction2(list<Opportunity> varocd,map<id,Opportunity> varold){
List<Opportunity> varins = new List<Opportunity>();
for (Opportunity opp : varocd ){
opp.Amount = varold.get(opp.id).Amount == null ?0 : varold.get(opp.id).Amount;
opp.Name = varold.get(opp.id).Name;
opp.CloseDate = varold.get(opp.id).CloseDate;
opp.StageName = varold.get(opp.id).StageName;
varins.add(opp);
}
insert varins;
}
}
Thanks for sharing the error. What functionality you are trying to achieve with this triger.
The main issue in the trigger is Trigger.oldmap will be always null in insert mode. You have to use Trigger.newmap.
Also as per the code i see you are trying to update same opporunity in afterinsert. In after context the record will be in readonly mode so it fails to save it. If any modification you perform on same record should be in before context only.
Thanks,
Can you let me know what excatly is the requirement so i can share the code for it,
Thanks,
Can you try the below trigger and handler.
Trigger:
Handler:
Let me know if you face any issues.
If this solution helps, Please mark it as best answer.
Thanks,