0

APEX Code:

public Class AgencyNameService{
    Set<String> updatedAgencyIds = new Set<String> ();
    List<Agency_Name__c> updatedagencyList = new List<Agency_Name__c>();
    List<Agency_Name__c> agencylistRec  = new List<Agency_Name__c>();
    Agency_Name__c agencyName = new Agency_Name__c();

    public AgencyNameService(Agency_Name__c newAgencyName){
        agencyName = newAgencyName;        
    }

    public AgencyNameService(){
    }

    public void getAgencyNameList(){
          //Empty check added to unnecessary avoid query call
        if (agencylistRec.isEmpty()){
        //get all the list of agency names 
        //Modified the below query to exclude Alias Names
          agencylistRec = [Select Name, Agency_Name_Type__c,Effective_Date__c,Is_Display_Name__c,New_Agency_Name__c   
                         from Agency_Name__c where Agency__c =: agencyName.Agency__c and Agency_Name_Type__c <> 'Alias'];
        }
    }

    //Note:Assuming there is no bulk insertion of Agency Name records
    /*Unchecking the previous display name after 
      new agency name is selected as display name */
    public void UncheckAllrecords(){
        getAgencyNameList();

        for(Agency_Name__c agencyuse : agencylistRec){
            System.debug('kanhu ** '+agencyName.ID +' - '+ agencyuse.ID);
             if(agencyuse.Is_Display_Name__c && agencyName.ID != agencyuse.ID){
                 agencyuse.Is_Display_Name__c = false;
                 system.debug('uncheck:'+agencyuse.Is_Display_Name__c);
                 Update agencyuse;
             } 
        }    
    }

    /* Checking if no Agency name is Display name and making 
       Legal Name as Default Display Name */
    public void CheckLegalrecord(){
        system.debug('checklegal');
        Set<String> AgencyIds = new Set<String> ();
        Agency_Name__c agencynameLegal;
        getAgencyNameList();
        for(Agency_Name__c agencyuse : agencylistRec){
            if(agencyName.Agency__r.RecordtypeName__c != System.Label.Agency_Record_Type_Nationwide){
                if(agencyuse.Is_Display_Name__c)
                AgencyIds.add(agencyuse.ID);

              if(agencyuse.Agency_Name_Type__c.equals(System.label.AGENCY_NAME_TYPE_LEGAL))
                  agencynameLegal = agencyuse;   
            }
        }
        if(AgencyIds.isEmpty() && agencynameLegal != null){
            agencynameLegal.Is_Display_Name__c = true;
            Update agencynameLegal;
        }    

    }

/**Method to change the previous legal name as display name,
   when a new agency name is created as legal */
    public void ChangePreviousLegaltoDBA(){   
        getAgencyNameList(); 
        for(Agency_Name__c agencyuse : agencylistRec){
             if(agencyName.Agency_Name_Type__c == System.Label.Agency_Name_Type_Legal && agencyName.ID != agencyuse.ID){ 
                  agencyuse.Agency_Name_Type__c = System.Label.Agency_Name_Type_DBA;
                  update agencyuse;
             }      
        }
    }

/* Method to update the agency name used in processing code whenever 
   there is change in the value of it. */
    public void updateProcessingCodeName(){
        List<Processing_Code__c> PCagencyNameList = [select Processing_Code_Name_Val__c,Processing_Code_Name__c FROM Processing_Code__c WHERE Processing_Code_Name__c = : agencyName.ID];

        for(Processing_Code__c PCRec : PCagencyNameList){
            PCRec.Processing_Code_Name_Val__c = agencyName.Agency_Name_Type__c + ' - ' + agencyName.Name;
        }
        Update PCagencyNameList;
    }

    /*Agency Name changes for Bulk updates to Account and PC*/
    public void agencyNameUpdateAccPC(List<Agency_Name__c> nameList){
      Map<ID, String> PCNameIDMap = new Map<ID, String>();
      Map<ID, String> AgencyNameMap = new Map<ID, String>();
      Map<ID, String> AgencyLegalNameMap = new Map<ID, String>();
      Set<ID> AccIds = new Set<ID>();
      for(Agency_Name__c name_obj: nameList) {
        if(name_obj.Is_Display_Name__c) {

          AgencyNameMap.put(name_obj.agency__c, name_obj.name);
          AccIds.add(name_obj.agency__c);

        }
        if(name_obj.agency_name_type__c == System.Label.Agency_Name_Type_Legal) {
          AgencyLegalNameMap.put(name_obj.agency__c, name_obj.name);
          AccIds.add(name_obj.agency__c);
        }
        PCNameIDMap.put(name_obj.id,name_obj.Agency_Name_Type__c + ' - ' + name_obj.name);
      }

      if(!AgencyNameMap.isEmpty() || !AgencyLegalNameMap.isEmpty()) {
        List<Account> AgencyList = new List<Account>();
        for(Account acc : [SELECT id, name, R_Agency_Legal_Name__c from Account where id IN :AccIds]) {
          if(acc.name != AgencyNameMap.get(acc.id) && AgencyNameMap.get(acc.id)!=null){

              System.debug('kanhu ** '+AgencyNameMap.get(acc.id));
            acc.name = AgencyNameMap.get(acc.id);
          }
          if(AgencyLegalNameMap.get(acc.id) <> null && acc.R_Agency_Legal_Name__c != AgencyLegalNameMap.get(acc.id)){
            acc.R_Agency_Legal_Name__c = AgencyLegalNameMap.get(acc.id);
          }
          AgencyList.add(acc);
        }
        if(!AgencyList.isEmpty())
            database.update(AgencyList,false);

      }


      List<Processing_Code__c> PCList = new List<Processing_Code__c>();
      for(Processing_Code__c pc_obj : [select Processing_Code_Name_Val__c,Processing_Code_Name__c FROM Processing_Code__c WHERE Processing_Code_Name__c IN :PCNameIDMap.keySet()]) {
        if(pc_obj.Processing_Code_Name_Val__c != PCNameIDMap.get(pc_obj.Processing_Code_Name__c)){      
            pc_obj.Processing_Code_Name_Val__c = PCNameIDMap.get(pc_obj.Processing_Code_Name__c);
            PCList.add(pc_obj);
        }
      }      
      if(!PCList.isEmpty()) {
        database.update(PCList,false);
      }    
    }   



    /*Check for duplicates before inserting agency name*/
    public boolean agencyNameDupCheck(List<Agency_Name__c> nameList){ 
        Map<ID,List<Agency_Name__c>> agencyNamesMap = new Map<ID,List<Agency_Name__c>>();
        Set<ID> agencyIDSet = new Set<ID>();

        for(Agency_Name__c nameRec : nameList){
            agencyIDSet.add(nameRec.Agency__c);
        }

        for(Agency_Name__c nameRec : [SELECT ID,Agency__c, Name, Is_Display_Name__c, Agency_Name_Type__c,Effective_Date__c 
                                                FROM Agency_Name__c WHERE Agency__c IN :agencyIDSet]){
            if(agencyNamesMap.containskey(nameRec.Agency__c)){
                List<Agency_Name__c> childNames = agencyNamesMap.get(nameRec.Agency__c);
                childNames.add(nameRec); 
                agencyNamesMap.put(nameRec.Agency__c,childNames);
            }
            else{
                List<Agency_Name__c> childNames = new List<Agency_Name__c>();
                childNames.add(nameRec); 
                agencyNamesMap.put(nameRec.Agency__c,childNames);
            }
       }

       if(!agencyNamesMap.isEmpty()) {
         for(Agency_Name__c nameRec : nameList){
           for(Agency_Name__c childName : agencyNamesMap.get(nameRec.Agency__c)){
               if(nameRec.ID != childName.ID && nameRec.Name == childName.Name){
                   return true;
               }    
            }        
          }   
       }
        return false;
    }
}

Trigger:

trigger AgencyNameAfterTrigger on Agency_Name__c (after insert, after update,after delete) {

  FFIC_App_Settings__c s = FFIC_App_Settings__c.getInstance(UserInfo.GetUserID());
  if( null != s && s.Disable_Triggers__c ) return;

  /*
  Adding the below code snippet for Testing Outbound Messaging
  */
  COBM.from_trigger = 'AgencyNameAfterTrigger';
  COBM.add_stack();

  if(Trigger.IsDelete == False && !COBM.convert_prospect_to_location_flag && !COBM.create_new_account_flag){
    AgencyNameService agencyname = new AgencyNameService(Trigger.New[0]);

    if(trigger.new.size() == 1) {

    //To uncheck old display name when new agency name is selected as display name
    //Calling the class to uncheck the previous Agency Name where the Display Name check box is checked
      if(Trigger.isInsert || (Trigger.isUpdate && Trigger.oldMap.get(Trigger.New[0].ID).Is_Display_Name__c != Trigger.New[0].Is_Display_Name__c)){
        system.debug('display::'+Trigger.New[0].Is_Display_Name__c);
          if(Trigger.New[0].Is_Display_Name__c)
          agencyname.UncheckAllrecords(); //Class to Uncheck previous display name  
        else
          agencyname.CheckLegalrecord();  //Class to Make Legal name as default display name
      }

      TriggerRecursionHelper.setAlreadyCreated();

    // Moved query inside display name check to avoid unnecessary query
      if(trigger.new[0].Is_Display_Name__c || Trigger.new[0].agency_name_type__c == System.Label.Agency_Name_Type_Legal){
        Account accObj = [SELECT ID, Name, R_Agency_Legal_Name__c FROM Account WHERE ID = :trigger.new[0].Agency__c];
        if(trigger.new[0].Is_Display_Name__c && accObj.Name != trigger.new[0].Name){
          accObj.Name = trigger.new[0].Name;
        }
          system.debug('legel1::'+Trigger.new[0].agency_name_type__c);
        if(Trigger.new[0].agency_name_type__c == System.Label.Agency_Name_Type_Legal) { 
          accObj.R_Agency_Legal_Name__c = trigger.new[0].Name;

        }
          update accObj;
      } 

      TriggerRecursionHelper.unCheckCreated();

      if(trigger.New[0].Agency_Name_Type__c == System.Label.Agency_Name_Type_Legal  
       && (trigger.isInsert || (trigger.isupdate &&  Trigger.oldMap.get(Trigger.New[0].ID).Agency_Name_Type__c != Trigger.New[0].Agency_Name_Type__c )))
        agencyname.ChangePreviousLegaltoDBA();  
    }

// For Bulk updates to Account and PC
    if(Trigger.isUpdate) {
       System.debug(trigger.New[0].Agency_Name_Type__c+'** Kanhu **'+Trigger.new[0].name+' ** '+trigger.new[0].Is_Display_Name__c);
       agencyname.agencyNameUpdateAccPC(Trigger.new);
    }
  }

/*
Adding the below code snippet for Outbound Messaging - Agency Name 
*/  
  COBM.from_trigger = 'AgencyNameAfterTrigger';
  COBM.parent_api_name = 'agency__c';
  Set<String> name_acc_ids = new Set<String>();

  if(Trigger.isInsert || Trigger.isUpdate) {
    for(Agency_Name__c name_obj: Trigger.new) {
      if(!COBM.s_acc_map.keyset().contains(name_obj.agency__c)) {
        name_acc_ids.add(name_obj.agency__c);
      }
    }
    if(name_acc_ids.size() > 0){
      for(Account acc_obj: [SELECT id, name, location_code__c, nationwide_code_2__c, active_status_effective_date__c, status__c, lastmodifieddate, recordtypename__c, personal_effective_status__c, commercial_effective_status__c, special_risk_effective_status__c, entertainment_effective_status__c, obsolete_effective_status__c, billingstate, Hierarchy_Type__c from Account where id IN :name_acc_ids]) {
//        System.debug('Adding Name Parent - Agency to Static Map' + acc_obj.id);
        COBM.s_acc_map.put(acc_obj.id, acc_obj);
      }
    }
    COBM cobm_obj = new COBM(Trigger.new[0].getsObjectType(),Trigger.new, Trigger.old);
  } else {
    COBM cobm_obj = new COBM(Trigger.old[0].getsObjectType(),Trigger.old, 'DELETE');
  }
}
tugce
  • 2,645
  • 18
  • 28
ABC
  • 41
  • 6
  • Your problem doesn't seem to be coming from the code you posted. Do you have a trigger on update on your Agency_Name__c? – Martin Lezer Jan 19 '17 at 14:14
  • 1
    Hi ABC, welcome to SFSE! Please take the time to visit the [Help] and read How do I ask a good question. The more details you provide, particularly code you've written, the more likely it is that someone will respond to your question with an answer you'll find helpful. It appears there must be code that you've omitted from your post. Is this part of a trigger? Please edit your post using the link at the bottom left to add additional details and/or code. – crmprogdev Jan 19 '17 at 14:21
  • If this class is being called multiple times, as in once/record in a trigger, the query in the last for loop could easily cause the query limit exception. – crmprogdev Jan 19 '17 at 14:23
  • We need to see the calling code to assess why you are exceeding your governor limits. As is, this code seems properly bulkified. Do note that there's no need to skip DML on empty lists. – Adrian Larson Jan 19 '17 at 14:33
  • Is this trigger written on before/after update event? – Ashwani Jan 19 '17 at 14:40
  • Please help me as soon as possible to find the issue and in resolving it. – ABC Jan 22 '17 at 10:29

0 Answers0