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
EklavyamEklavyam 

trigger handler class help !

Hello,
My trigger :

trigger stopTaskDelete on Task (before delete) {
    Id profileid = Userinfo.getProfileId();
    profile profilename = [select Name from Profile where id=:profileid];
    for(Task T1:Trigger.old){
        if(profilename.Name != 'System Administrator'){
            T1.adderror('You can not delete task');
        }
    }
}

How can I make this trigger work via Handler class? and how do I write test class for this?
Rameshwar gaurRameshwar gaur
Your Handler Class 
Public Class TaskDeleteHandler {
    Public Static Void Method(List<Task> TaskTrigger)
        {
         Id profileid = Userinfo.getProfileId();
            profile profilename = [select Name from Profile where id=:profileid];
            for(Task T1 : TaskTrigger){
                if(profilename.Name != 'System Administrator'){
                    T1.adderror('You can not delete task');
                }
            }
        }
}

Your Trigger
trigger stopTaskDelete on Task (before delete) {
   if(Trigger.isDelete)
   {
       TaskDeleteHandler TDL =  new TaskDeleteHandler();
       TDL.Method(Trigger.old);
   }
}
I hope you find the above solution helpful. If it does, please mark as Best Answer to help others too.
 
Ravindra Kashyap 7Ravindra Kashyap 7

Hi Eklavyam,

Use runAs() to run your code in different user context. please refer below link find out more about runAs().
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_testing_tools_runas.htm

Check the below code to get an idea of how we can write a test class for your sample code, I have tested and code is working fine.

Trigger
 

trigger TaskTrigger on Task (before delete) {
    if(Trigger.isDelete){
        TaskTriggerHandler.deleteTaskBaseOnProfile(Trigger.old);
    }
}


Trigger Handler
public class TaskTriggerHandler {
    public static void deleteTaskBaseOnProfile(List<Task> tasks){
        
        Id profileid = Userinfo.getProfileId();
        profile profilename = [select Name from Profile where id=:profileid];
        for(Task eachTask : tasks){
            if(profilename.Name != 'System Administrator'){
                eachTask.adderror('You can not delete task');
            }
        }
    }
}

Test Class
 
@isTest
public class TaskTriggerHandlerTest {
    //first create sample account and task
    @testSetup static void methodName(){
        Account newAccount = new Account(name='test');
        insert newAccount;
        Task newTask = new Task(whatID = newAccount.ID,Status='Completed', Subject ='testfortaskdelete',Priority='High');
        insert newTask;        
    }
    
    static testMethod void test1(){
        
        List<Profile> ps = [select id, name from Profile where name = 'Standard User' limit 1];        
        // First make a new user.  
        User standard = new User(alias = 'standt', 
                                 email='standarduser@testorg.com', 
                                 emailencodingkey='UTF-8', 
                                 lastname='Testing', languagelocalekey='en_US', 
                                 localesidkey='en_US', 
                                 profileid = ps[0].ID, 
                                 timezonesidkey='America/Los_Angeles', 
                                 username='standarduserfsfdfdfsf@testorg.com');
        
        insert standard;        
        // Confirm that the standard user cannot see the admin account  
        system.runas(standard){
            Task getTask = [select ID from Task where Subject ='testfortaskdelete' limit 1];
            try{
                delete getTask;   
            }catch(DmlException ex){
                //system.debug('ex => '+ ex.getTypeName());
                System.assert(true);         
            }                      
        }     
    }
    
    static testMethod void test2(){
        List<Profile> ps = [select id, name from Profile where name = 'System Administrator' limit 1];
        //  make a new admin user.  
        User admin = new User(alias = 'admin', 
                              email='admin@testorg.com', 
                              emailencodingkey='UTF-8', 
                              lastname='Testing', languagelocalekey='en_US', 
                              localesidkey='en_US', 
                              profileid = ps[0].ID, 
                              timezonesidkey='America/Los_Angeles', 
                              username='adminfsfdfdfsf@testorg.com');
        
        insert admin;                 
        system.runas(admin){  
            Task getTask = [select ID from Task where Subject ='testfortaskdelete' limit 1];
            delete getTask;
            //system.debug('id => ' + getTask.ID);
            List<Task> getTask2 = [select ID from Task where Subject ='testfortaskdelete'];
            System.assertEquals(getTask2.size(), 0);
        }
        
    }
    
}

Hope It will help you :)
Tushar Tyagi 45Tushar Tyagi 45
Trigger TaskTrigger on Task(before delete)
{
    TriggerHandler.deleteTask(trigger.old);
}

public class TriggerHandler
{
    public static void deleteTask(list<task> tasks)
    {
        Id profileid = Userinfo.getProfileId();
        profile profilename = [select Name from Profile where id=:profileid];
         for(Task T1:tasks)
         {
            if(profilename.Name != 'System Administrator')
            {
                T1.adderror('You can not delete task');
            }
         }
    }
}

You can create a class Trigger Handler and call its method i.e. deleteTask from Trigger Body
Ajay K DubediAjay K Dubedi
Hi Eklavyam,
I have found the same issue, here is the link. Please follow the below link that may be helpful for you:
https://developer.salesforce.com/forums?id=9062I000000IIYjQAOs
I hope you find the above solution helpful. If it does, please mark as Best Answer to help others too.
Thanks,
Ajay Dubedi