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
RajevlsRajevls 

Fire Apex Trigger Only Once

I want to make this part of the trigger run once 

 

------------------------------------------------------------------------------------------------

List<OAR_Member_Added__c> objList = new List<OAR_Member_Added__c>();
set<id> stypes = new set<id>();
for(recordtype objr : [Select Id From RecordType where sObjectType='Task' and developername = 'Renewals_Record_Type']){
 
     stypes.add(objr.id);
}
System.Debug('Stypes ------>' + stypes);
System.Debug('NEw trigger------>' +Trigger.new);
map<id,opportunity> opps = new map<id,opportunity>();
map<id,account> acc = new map<id,account>();
for(Task T: Trigger.new){
if((stypes.contains(T.RecordTypeId))&&(T.Status == 'Completed')){

OAR_Member_Added__c obj = new OAR_Member_Added__c();
obj.Text_1__c = T.Type__c;
obj.Text_2__c = T.Type_Detail__c;
obj.Text_3__c = T.Subject;
obj.Text_4__c = T.Description;

if(t.whatid!=null&&t.whatid.getsobjecttype()==opportunity.sobjecttype) {
    opps.put(t.whatid,null);
    }
opps.putAll([select id,Opportunity_Number__c from opportunity where id in :opps.keyset()]);
if(opps.containskey(t.whatid)) {
      String Oppnum = opps.get(t.whatid).Opportunity_Number__c;
      obj.Text_5__c = Oppnum;
   }
   
if(t.whatid!=null&&t.whatid.getsobjecttype()==account.sobjecttype) {
    opps.put(t.whatid,null);
    }
acc.putAll([select id,Name from account where id in :acc.keyset()]);
if(acc.containskey(t.whatid)) {
      String Accname = acc.get(t.whatid).Name;
      obj.Text_6__c = Accname;
   }   

String TempObj = Userinfo.getUserId();
System.Debug('Task Owner........' +TempObj);
if( t.ownerid.getsobjecttype() == user.sobjecttype ) {
  obj.user_1__c = t.ownerid;
}
System.Debug('Trigger.oldMap.get(T.Id).Owner....' + T.Owner);

String urlForObj= URL.getSalesforceBaseUrl().toExternalForm() + '/'+T.WhatId;
obj.Task_Related_To_URL__c = urlForObj;

String RelUrl = URL.getSalesforceBaseUrl().toExternalForm() + '/'+T.Id;
obj.Task_URL__c = RelUrl;

objList.add(obj);
}
}
if(!objList.isEmpty())

insert objList;
   }
}

----------------------------------------------------

 

Plz help

Best Answer chosen by Admin (Salesforce Developers) 
Vinit_KumarVinit_Kumar


Rajev,

Create a TriggerHelperClass in your org as follows :-

public class TriggerHelperClass {   

    private static boolean flagvalue = false;


    public static boolean hasAlreadyfired() {
        return flagvalue;
    }
    
    public static void setAlreadyfired() {
        flagvalue = true;
    }


}

Then,in you Trigger use it as follows :-

if(!TriggerHelperClass.hasAlreadyfired()){
List<OAR_Member_Added__c> objList = new List<OAR_Member_Added__c>();
set<id> stypes = new set<id>();
for(recordtype objr : [Select Id From RecordType where sObjectType='Task' and developername = 'Renewals_Record_Type']){
 
     stypes.add(objr.id);
}
System.Debug('Stypes ------>' + stypes);
System.Debug('NEw trigger------>' +Trigger.new);
map<id,opportunity> opps = new map<id,opportunity>();
map<id,account> acc = new map<id,account>();
for(Task T: Trigger.new){
if((stypes.contains(T.RecordTypeId))&&(T.Status == 'Completed')){

OAR_Member_Added__c obj = new OAR_Member_Added__c();
obj.Text_1__c = T.Type__c;
obj.Text_2__c = T.Type_Detail__c;
obj.Text_3__c = T.Subject;
obj.Text_4__c = T.Description;

if(t.whatid!=null&&t.whatid.getsobjecttype()==opportunity.sobjecttype) {
    opps.put(t.whatid,null);
    }
opps.putAll([select id,Opportunity_Number__c from opportunity where id in :opps.keyset()]);
if(opps.containskey(t.whatid)) {
      String Oppnum = opps.get(t.whatid).Opportunity_Number__c;
      obj.Text_5__c = Oppnum;
   }
   
if(t.whatid!=null&&t.whatid.getsobjecttype()==account.sobjecttype) {
    opps.put(t.whatid,null);
    }
acc.putAll([select id,Name from account where id in :acc.keyset()]);
if(acc.containskey(t.whatid)) {
      String Accname = acc.get(t.whatid).Name;
      obj.Text_6__c = Accname;
   }   

String TempObj = Userinfo.getUserId();
System.Debug('Task Owner........' +TempObj);
if( t.ownerid.getsobjecttype() == user.sobjecttype ) {
  obj.user_1__c = t.ownerid;
}
System.Debug('Trigger.oldMap.get(T.Id).Owner....' + T.Owner);

String urlForObj= URL.getSalesforceBaseUrl().toExternalForm() + '/'+T.WhatId;
obj.Task_Related_To_URL__c = urlForObj;

String RelUrl = URL.getSalesforceBaseUrl().toExternalForm() + '/'+T.Id;
obj.Task_URL__c = RelUrl;

objList.add(obj);
}
}
if(!objList.isEmpty())

insert objList;
   }
}
TriggerHelperClass.setAlreadyfired();
}

All Answers

Vinit_KumarVinit_Kumar


Rajev,

Create a TriggerHelperClass in your org as follows :-

public class TriggerHelperClass {   

    private static boolean flagvalue = false;


    public static boolean hasAlreadyfired() {
        return flagvalue;
    }
    
    public static void setAlreadyfired() {
        flagvalue = true;
    }


}

Then,in you Trigger use it as follows :-

if(!TriggerHelperClass.hasAlreadyfired()){
List<OAR_Member_Added__c> objList = new List<OAR_Member_Added__c>();
set<id> stypes = new set<id>();
for(recordtype objr : [Select Id From RecordType where sObjectType='Task' and developername = 'Renewals_Record_Type']){
 
     stypes.add(objr.id);
}
System.Debug('Stypes ------>' + stypes);
System.Debug('NEw trigger------>' +Trigger.new);
map<id,opportunity> opps = new map<id,opportunity>();
map<id,account> acc = new map<id,account>();
for(Task T: Trigger.new){
if((stypes.contains(T.RecordTypeId))&&(T.Status == 'Completed')){

OAR_Member_Added__c obj = new OAR_Member_Added__c();
obj.Text_1__c = T.Type__c;
obj.Text_2__c = T.Type_Detail__c;
obj.Text_3__c = T.Subject;
obj.Text_4__c = T.Description;

if(t.whatid!=null&&t.whatid.getsobjecttype()==opportunity.sobjecttype) {
    opps.put(t.whatid,null);
    }
opps.putAll([select id,Opportunity_Number__c from opportunity where id in :opps.keyset()]);
if(opps.containskey(t.whatid)) {
      String Oppnum = opps.get(t.whatid).Opportunity_Number__c;
      obj.Text_5__c = Oppnum;
   }
   
if(t.whatid!=null&&t.whatid.getsobjecttype()==account.sobjecttype) {
    opps.put(t.whatid,null);
    }
acc.putAll([select id,Name from account where id in :acc.keyset()]);
if(acc.containskey(t.whatid)) {
      String Accname = acc.get(t.whatid).Name;
      obj.Text_6__c = Accname;
   }   

String TempObj = Userinfo.getUserId();
System.Debug('Task Owner........' +TempObj);
if( t.ownerid.getsobjecttype() == user.sobjecttype ) {
  obj.user_1__c = t.ownerid;
}
System.Debug('Trigger.oldMap.get(T.Id).Owner....' + T.Owner);

String urlForObj= URL.getSalesforceBaseUrl().toExternalForm() + '/'+T.WhatId;
obj.Task_Related_To_URL__c = urlForObj;

String RelUrl = URL.getSalesforceBaseUrl().toExternalForm() + '/'+T.Id;
obj.Task_URL__c = RelUrl;

objList.add(obj);
}
}
if(!objList.isEmpty())

insert objList;
   }
}
TriggerHelperClass.setAlreadyfired();
}

This was selected as the best answer
RajevlsRajevls

Thanks .. Vinit