You need to sign in to do that
Don't have an account?
Snita Lal
Where to place an IF on a trigger?
Hi,
We've managed to get the trigger working fine in our production system although our processes have recently changed which means that we only want the trigger to fire when certain conditions are met. Please see below the working trigger with the IF statement placed where we believe it should be however it still fires even when these conditions are met. We've tried a couple times to place the IF statement in other areas and either hit errors and we are a little lost.
Any help would be greatfully appreciated.
Thanks,
Snita
We've managed to get the trigger working fine in our production system although our processes have recently changed which means that we only want the trigger to fire when certain conditions are met. Please see below the working trigger with the IF statement placed where we believe it should be however it still fires even when these conditions are met. We've tried a couple times to place the IF statement in other areas and either hit errors and we are a little lost.
trigger UpdateAccountLookup on Opportunity (before insert,before update){ Set<id> setSiteids=new set<id>(); map<Id, String> mapsiteIdToopptId = new map<Id, String>(); Map<Id, String> mapOpptIdToAccId = new Map<Id, String>(); list<account> acclst = new list<account>(); For(Opportunity o : trigger.new){ setSiteids.add(o.Site_Location__c); mapsiteIdToopptId.put(o.Site_Location__c, o.Id); } for(Site__c objSite : [Select Id , Parent_Account__c from Site__c where Id IN :setSiteids ]) { mapOpptIdToAccId.put(mapsiteIdToopptId.get(objSite.Id), objSite.Parent_Account__c); } for(Opportunity o : trigger.new){ if(o.New_Site__c == false || o.Takeover__c == false){ o.AccountId = mapOpptIdToAccId.get(o.Id); } } }
Any help would be greatfully appreciated.
Thanks,
Snita
check ,whether you want to perform this functionality while update transaction or insert transaction, Based on the that you can use Trigger context variable like Trigger.insert or Trigger.isUpdate.
Please check below code ,
trigger UpdateAccountLookup on Opportunity (before insert,before update){
Set<id> setSiteids=new set<id>();
map<Id, String> mapsiteIdToopptId = new map<Id, String>();
Map<Id, String> mapOpptIdToAccId = new Map<Id, String>();
For(Opportunity o : trigger.new){
if(o.New_Site__c == false || o.Takeover__c == false){
setSiteids.add(o.Site_Location__c);
mapsiteIdToopptId.put(o.Site_Location__c, o.Id);
}
}
for(Site__c objSite : [Select Id , Parent_Account__c from Site__c where Id IN :setSiteids ])
{
mapOpptIdToAccId.put(mapsiteIdToopptId.get(objSite.Id), objSite.Parent_Account__c);
}
if(mapOpptIdToAccId != null && mapOpptIdToAccId.size()>0){
for(Opportunity o : trigger.new){
o.AccountId = mapOpptIdToAccId.get(o.Id);
}
}
}
}
You can even debug value of New_Site__c and Takeover__c field while executing the trigger using Syestem.debug() ;
If a reply to a post answers your question or resolves your problem, please mark it as the solution to the post so that others
All Answers
What is the condition ?
Abdelhakim - We are trying to get the trigger to only execute when either the New Site checkbox is unticked or when the checkbox Takeover is unticked.
Thanks,
Snita
map<Id, String> mapsiteIdToopptId = new map<Id, String>();
Map<Id, String> mapOpptIdToAccId = new Map<Id, String>();
please check line --12 code -- mapsiteIdToopptId.put(o.Site_Location__c, o.Id);
line --12 consider the mapsiteidToopptId<id,id>
but you have declared as map<id,string>
please check this part .
i hope you should be declared as map<Id, id> mapsiteIdToopptId = new map<Id, id>();
then your problem will solve it
check ,whether you want to perform this functionality while update transaction or insert transaction, Based on the that you can use Trigger context variable like Trigger.insert or Trigger.isUpdate.
Please check below code ,
trigger UpdateAccountLookup on Opportunity (before insert,before update){
Set<id> setSiteids=new set<id>();
map<Id, String> mapsiteIdToopptId = new map<Id, String>();
Map<Id, String> mapOpptIdToAccId = new Map<Id, String>();
For(Opportunity o : trigger.new){
if(o.New_Site__c == false || o.Takeover__c == false){
setSiteids.add(o.Site_Location__c);
mapsiteIdToopptId.put(o.Site_Location__c, o.Id);
}
}
for(Site__c objSite : [Select Id , Parent_Account__c from Site__c where Id IN :setSiteids ])
{
mapOpptIdToAccId.put(mapsiteIdToopptId.get(objSite.Id), objSite.Parent_Account__c);
}
if(mapOpptIdToAccId != null && mapOpptIdToAccId.size()>0){
for(Opportunity o : trigger.new){
o.AccountId = mapOpptIdToAccId.get(o.Id);
}
}
}
}
You can even debug value of New_Site__c and Takeover__c field while executing the trigger using Syestem.debug() ;
If a reply to a post answers your question or resolves your problem, please mark it as the solution to the post so that others