• Shimba
  • NEWBIE
  • 0 Points
  • Member since 2016

  • Chatter
    Feed
  • 0
    Best Answers
  • 1
    Likes Received
  • 0
    Likes Given
  • 2
    Questions
  • 3
    Replies
I'm trying to get the activity records whose RelatedTo is of type Account in order to update Total_Touches field on Account. Somehow it is not getting the Activity records and I'm not getting any error. Below is my code, Any advice please?


    public static set<Id> filterTaskOrEventRecords(List<sObject> lstActivities,map<Id,sObject> mapOldActivities)
    {
        set<Id> setAccountIds = new set<Id>();

        for(sObject objActivity : lstActivities)  
        {
            Boolean isRelatedToCompany = objActivity.get('AccountId') != null ? (((Id)objActivity.get('AccountId')).getsObjectType() == Account.sObjectType ? true : false) : false;
             
            // Filtering records in insert,update and delete case.
            if((trigger.isInsert) || (trigger.isDelete) || trigger.isUpdate)
            {
                 if(isRelatedToCompany) 
                    setAccountIds.add((Id)objActivity.get('AccountId'));
                
                 if( trigger.isUpdate && ((Id)mapOldActivities.get(objActivity.Id).get('AccountId')).getsObjectType() == Account.sObjectType)    
                     setAccountIds.add((Id)mapOldActivities.get(objActivity.Id).get('AccountId'));
            }
        }
        return setAccountIds;
    }
Hi,

When updating mass tasks or events, I get errors on;

Class.SL_TaskTriggerHandler.updateLastTouchDateAccount:  line 91 (try)
Class.SL_TaskTriggerHandler.onBeforeUpdate: 
Trigger.SL_Task: line 8

Please help, below is my code.

Class:

public with sharing class SL_TaskTriggerHandler 
{
    
    public void onBeforeInsert(List<Task> lstTasks)
    {
        updateCharactersAndWordsField(lstTasks,null);
        updateLastTouchDateAccount(lstTasks);
    }
    
    public void onBeforeUpdate(List<Task> lstTasks,map<Id,Task> mapOldTasks)
    {
        updateCharactersAndWordsField(lstTasks,mapOldTasks);
        updateLastTouchDateAccount(lstTasks);
    } 
    
    public void onAfterInsert(List<Task> lstTasks)
    {
        populateTouchInfoOnAccount(lstTasks,null);
        updateLastTouchDateAccount(lstTasks);
    }
    
    public void onAfterUpdate(List<Task> lstTasks,map<Id,Task> mapOldTasks)
    {
        populateTouchInfoOnAccount(lstTasks,mapOldTasks);
    } 
    
    public void onAfterDelete(map<Id,Task> mapOldTasks)
    {
        populateTouchInfoOnAccount(mapOldTasks.values(),null); 
    } 
    
    private void populateTouchInfoOnAccount(List<Task> lstTasks,map<Id,Task> mapOldTasks)
    {
        set<Id> setAcctIdsToUpdate = SL_UtilActivityHandler.filterTaskOrEventRecords(lstTasks,mapOldTasks);

        if(!setAcctIdsToUpdate.isEmpty())
            SL_UtilActivityHandler.updateActivityInfoOnAccount(setAcctIdsToUpdate);
    } 

    private void updateCharactersAndWordsField(List<Task> lstTasks,map<Id,Task> mapOldTasks){
        for(Task e : lstTasks) 
        {
            if(trigger.isInsert || ( trigger.isUpdate && e.Description != mapOldTasks.get(e.Id).Description))
            {
                if(String.isNotBlank(e.Description)) 
                {
                  e.NumberOfCharacters__c = e.Description.length();
                  e.NumberOfWords__c = e.Description.split('\\s+').size();
                }
                else {
                  e.NumberOfCharacters__c = 0;
                  e.NumberOfWords__c = 0;
                }
            }
        }
    }
    
    public void updateLastTouchDateAccount(List<Task> lstTasks)
    {
        if(lstTasks.size() ==1){
        Map<Id, Account> AccountMap = new Map<ID, Account>();
        
        for(Task t: lstTasks){
            AccountMap.put(t.WhatID,null); 
        }
            
        AccountMap.remove(null);
        
        AccountMap.putAll([SELECT ID, NAME, Date_of_Last_Touch__c from Account where ID in :AccountMap.keySet()]);
        
        Set<Account> recordsToUpdate1 = new Set<Account>();
        
        for(Task t: lstTasks)
        {
            if(!AccountMap.isEmpty())
            {
                 Account accountRecord = AccountMap.get(t.WhatID);    
                 
                 if(accountRecord != null)
                 {
                     if(accountRecord.Date_Of_Last_Touch__c == null || accountRecord.Date_Of_Last_Touch__c < t.ActivityDate)
                     {
                        accountRecord.Date_Of_Last_Touch__c  = t.ActivityDate;
                        
                        recordsToUpdate1.add(accountRecord);
                     }
                 }
            }
        }
        
        try // This is where the error starts
        { 
            //update AccountMap.values();
            List<Account> recordsToUpdate = new List<Account>(recordsToUpdate1);
            update recordsToUpdate;    
        }
        catch(DmlException e)
        {
            UUtil.Udebug.printExceptionToDebug(e);
        }    
        }
    }
}


Trigger:

trigger SL_Task on Task (before insert, before update,after insert,after delete,after update) {
    
    SL_TaskTriggerHandler objHandler = new SL_TaskTriggerHandler();
    
    if(trigger.isBefore && trigger.isInsert)
        objHandler.onBeforeInsert(trigger.New);
    else if(trigger.isBefore && trigger.isUpdate)
        objHandler.onBeforeUpdate(trigger.New,trigger.oldMap);   // This is where the error is
    else if(trigger.isAfter && trigger.isInsert)    
        objHandler.onAfterInsert(trigger.New);
    else if(trigger.isAfter && trigger.isUpdate)        
        objHandler.onAfterUpdate(trigger.New,trigger.oldMap);
    else if(trigger.isAfter && trigger.isDelete)        
        objHandler.onAfterDelete(trigger.oldMap);    
}
I'm trying to get the activity records whose RelatedTo is of type Account in order to update Total_Touches field on Account. Somehow it is not getting the Activity records and I'm not getting any error. Below is my code, Any advice please?


    public static set<Id> filterTaskOrEventRecords(List<sObject> lstActivities,map<Id,sObject> mapOldActivities)
    {
        set<Id> setAccountIds = new set<Id>();

        for(sObject objActivity : lstActivities)  
        {
            Boolean isRelatedToCompany = objActivity.get('AccountId') != null ? (((Id)objActivity.get('AccountId')).getsObjectType() == Account.sObjectType ? true : false) : false;
             
            // Filtering records in insert,update and delete case.
            if((trigger.isInsert) || (trigger.isDelete) || trigger.isUpdate)
            {
                 if(isRelatedToCompany) 
                    setAccountIds.add((Id)objActivity.get('AccountId'));
                
                 if( trigger.isUpdate && ((Id)mapOldActivities.get(objActivity.Id).get('AccountId')).getsObjectType() == Account.sObjectType)    
                     setAccountIds.add((Id)mapOldActivities.get(objActivity.Id).get('AccountId'));
            }
        }
        return setAccountIds;
    }
I'm trying to get the activity records whose RelatedTo is of type Account in order to update Total_Touches field on Account. Somehow it is not getting the Activity records and I'm not getting any error. Below is my code, Any advice please?


    public static set<Id> filterTaskOrEventRecords(List<sObject> lstActivities,map<Id,sObject> mapOldActivities)
    {
        set<Id> setAccountIds = new set<Id>();

        for(sObject objActivity : lstActivities)  
        {
            Boolean isRelatedToCompany = objActivity.get('AccountId') != null ? (((Id)objActivity.get('AccountId')).getsObjectType() == Account.sObjectType ? true : false) : false;
             
            // Filtering records in insert,update and delete case.
            if((trigger.isInsert) || (trigger.isDelete) || trigger.isUpdate)
            {
                 if(isRelatedToCompany) 
                    setAccountIds.add((Id)objActivity.get('AccountId'));
                
                 if( trigger.isUpdate && ((Id)mapOldActivities.get(objActivity.Id).get('AccountId')).getsObjectType() == Account.sObjectType)    
                     setAccountIds.add((Id)mapOldActivities.get(objActivity.Id).get('AccountId'));
            }
        }
        return setAccountIds;
    }