Toggle Side Panel

  • Home
  • Articles
    • All Articles
    • Blogs
    • Videos
    • Infographics
  • Consultants
    • Salesforce Product Expertise
      • Top Salesforce ConsultantsTop Salesforce Consultants
      • Marketing Cloud ConsultantsMarketing Cloud Consultants
      • Service Cloud ConsultantsService Cloud Consultants
      • Experience Cloud ConsultantsExperience Cloud Consultants
      • Analytics Cloud ConsultantsAnalytics Cloud Consultants
    • Salesforce Industry Expertise
      • Non-Profit Cloud ConsultantsNon-Profit Cloud Consultants
      • Financial Service Cloud ConsultantsFinancial Service Cloud Consultants
      • Health Cloud ConsultantsHealth Cloud Consultants
      • Commerce Cloud ConsultantsCommerce Cloud Consultants
      • Manufacturing Cloud ConsultantsManufacturing Cloud Consultants
    • Salesforce Experts by Location
      • USATop Salesforce Consultants in USA
      • IndiaTop Salesforce Consultants in India
      • AustraliaTop Salesforce Consultants in Australia
      • United KingdomTop Salesforce Consultants in UK
      • CanadaTop Salesforce Consultants in Canada
  • Webinars
  • Contact Us
  • Discussions
More options
    Sign in Sign up
    • Home
    • Articles
      • All Articles
      • Blogs
      • Videos
      • Infographics
    • Consultants
      • Salesforce Product Expertise
        • Top Salesforce ConsultantsTop Salesforce Consultants
        • Marketing Cloud ConsultantsMarketing Cloud Consultants
        • Service Cloud ConsultantsService Cloud Consultants
        • Experience Cloud ConsultantsExperience Cloud Consultants
        • Analytics Cloud ConsultantsAnalytics Cloud Consultants
      • Salesforce Industry Expertise
        • Non-Profit Cloud ConsultantsNon-Profit Cloud Consultants
        • Financial Service Cloud ConsultantsFinancial Service Cloud Consultants
        • Health Cloud ConsultantsHealth Cloud Consultants
        • Commerce Cloud ConsultantsCommerce Cloud Consultants
        • Manufacturing Cloud ConsultantsManufacturing Cloud Consultants
      • Salesforce Experts by Location
        • USATop Salesforce Consultants in USA
        • IndiaTop Salesforce Consultants in India
        • AustraliaTop Salesforce Consultants in Australia
        • United KingdomTop Salesforce Consultants in UK
        • CanadaTop Salesforce Consultants in Canada
    • Webinars
    • Contact Us
    • Discussions
    Close search
    Salesforce Apex Trigger

    Salesforce Apex Trigger – Count Number of Open Tasks and Closed Tasks on the Account.

    Avnish Yadav Sep 9, 2018
    13,814  Views

    Hello guys,

    Today, I’m sharing the trigger code that how you can count the number of open tasks and closed task on the account. For this, you need to make to custom fields on Account. They are –

    1. Open Task field.
    2. Closed Task field.

    Apex Trigger code –

    trigger countOpenAndClosedTask on Task (after insert, after undelete, after delete, after update) {    
        Set<Id> setOpenTaskAccountIds = new Set<Id>();
        Set<Id> setClosedTaskAccountIds = new Set<Id>();
        List<Account> listAccountUpdate = new List<Account>();
        List<Account> listOpenTaskAccounts = new List<Account>();
        List<Account> listClosedTaskAccounts = new List<Account>();
        if(Trigger.IsAfter){
            if(Trigger.IsInsert || Trigger.IsUndelete  || Trigger.isUpdate) {
                for(Task t: Trigger.new) {
                    if(String.valueOf(t.WhatId).startsWithIgnoreCase('001')) {
                        if(t.Status.equalsIgnoreCase('Completed')){
                            setClosedTaskAccountIds.add(t.WhatId);
                            System.debug('@@@@Inside Completed@@@'+setClosedTaskAccountIds);
                        }
                        else {
                            setOpenTaskAccountIds.add(t.WhatId);
                            System.debug('@@@@Inside Open@@@'+setOpenTaskAccountIds);
                        }
                        if(Trigger.IsUpdate){
                            if(Trigger.oldMap.get(t.Id).WhatId != t.WhatId){
                                if(t.Status.equalsIgnoreCase('Completed')){
                                    setClosedTaskAccountIds.add(Trigger.oldMap.get(t.Id).WhatId );
                                    System.debug('@@@Inside Update Closed@@@'+setClosedTaskAccountIds);
                                }
                                else {
                                    setOpenTaskAccountIds.add(Trigger.oldMap.get(t.Id).WhatId );
                                    System.debug('@@@Inside Update Open@@@'+setOpenTaskAccountIds);
                                }
                            }
                        }
                    }
                }
            }        
            if(Trigger.IsDelete){
                for(Task t : Trigger.Old){
                    if(String.valueOf(t.WhatId).startsWithIgnoreCase('001')) {
                        if(t.Status.equalsIgnoreCase('Completed')){
                            setClosedTaskAccountIds.add(t.WhatId);
                            System.debug('@@@@Inside Deleted Completed');
                        }
                        else {
                            setOpenTaskAccountIds.add(t.WhatId);
                            System.debug('@@@@Inside Deleted Open');
                        }
                    }
                }
            }            
            listOpenTaskAccounts =[SELECT Id, Name, Open_Task__c,(Select Status From Tasks Where Status != 'Completed' ) FROM Account WHERE Id =:setOpenTaskAccountIds];
            listClosedTaskAccounts =[SELECT Id, Name, Closed_Task__c,(Select Status From Tasks Where Status = 'Completed' )  FROM Account WHERE Id =:setClosedTaskAccountIds];
            System.debug('@@@@ListOpenTaskAccounts'+listOpenTaskAccounts );
            System.debug('@@@@ListClosedTaskAccounts'+listClosedTaskAccounts );       
            for(Account acc:listOpenTaskAccounts) {
                List<Task> listTask = acc.Tasks;
                acc.Open_Task__c = listTask.size();
                listAccountUpdate.add(acc);           
            }
            for(Account acc:listClosedTaskAccounts) {
                List<Task> listTask = acc.Tasks;
                acc.Closed_Task__c = listTask.size();
                listAccountUpdate.add(acc);           
            }
            try{
                System.debug('@@@@listAccountUpdate'+listAccountUpdate);
                update listAccountUpdate;
            }catch(System.Exception e){
                System.debug('@@@error'+e.getMessage());
            }
        }
    }
    

    Thanks.

    Happy coding.

    Categories: Others
    Tagged: Apex Trigger Code, Closed Task Field, Open Task Field, Salesforce Account, Salesforce Account Management, Salesforce Apex Trigger, Salesforce Code, Salesforce Custom Fields, Salesforce Triggers, System Debug, Trigger.oldMap.get, Triggers, Undelete

    Get listed your company

    Have an innovative Salesforce solution that delivers faster, smarter results?
    Join the Marketplace

    [adinserter block=”16″]

    best salesforce consultants
    best salesforce consultants
    best salesforce consultants
    salesforce consultants

    [adinserter block=”10″]

    salesforce consultants

    [adinserter block=”10″]

    salesforce consultants

    [adinserter block=”10″]

    salesforce consultants

    [adinserter block=”10″]

    salesforce consultants
    salesforce consultants

    [adinserter block=”10″]

    salesforce consultants
    salesforce consultants
    Footer Forcetalks logo

    support@forcetalks.com

    • twitterx

    Quick Links

    Advertise with Us

    Salesforce® Articles

    Dreamforce 2023

    Top Salesforce® Bloggers 2023

    Top Salesforce Consultants

    Get Listed

    Company

    Contact Us

    About Us

    Privacy Policy

    Terms & Conditions

    InsightHub

    Salesforce Blogs

    Salesforce Videos

    Salesforce Groups

    Salesforce Jobs

    © 2026 - Forcetalks ● All Rights Reserved

    Salesforce® is a trademark of Salesforce® Inc. No claim is made to the exclusive right to use “Salesforce”. Any services offered within the Forcetalks website/app are not sponsored or endorsed by Salesforce®.

    Try AuditMyCRM - It is a Salesforce CRM Audit tool which comprehensively scans your Salesforce org and gives you the list of errors or warnings you need to take care of.
    We use cookies to enhance your browsing experience. Please see our privacy policy if you'd like more information on our use of cookies.