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
jaishrijaishri 

Run Case Assignment Rule From Apex

I'm getting issue in the below code can anyone help me where is wrong :- CaseAssignmentRuleTrigger: execution of BeforeInsert caused by: System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, CaseAssignmentRuleTrigger: maximum trigger depth exceeded Case trigger event BeforeInsert 
trigger CaseAssignmentRuleTrigger on Case (before insert,before update) {
    //Fetching the assignment rules on case
    AssignmentRule AR = new AssignmentRule();
    AR = [select id from AssignmentRule where SobjectType = 'Case' and Active = true limit 1];
    
    //Creating the DMLOptions for "Assign using active assignment rules" checkbox
    Database.DMLOptions dmlOpts = new Database.DMLOptions();
    dmlOpts.assignmentRuleHeader.assignmentRuleId= AR.id;
    
    Case newCase = new Case(Status = 'New') ;
    //Setting the DMLOption on Case instance
    newCase.setOptions(dmlOpts);
    insert newCase ;
}

 
Best Answer chosen by jaishri
Sai PraveenSai Praveen (Salesforce Developers) 
Hi,

If you dont have any conditions you can try the below trigger.
 
trigger CaseAssignmentRuleTrigger on Case (after insert,after update) {
 List<Case> CaseList = new List<Case>();
   public static Boolean isFirstTime = true;
    for(Case currCase : Trigger.New)
    {
        if((Trigger.isInsert && Trigger.isAfter) && isFirstTime )
        {
            isFirstTime=false;
            CaseList.add(new Case(id = currCase.id));
        }
        else if((Trigger.isUpdate && Trigger.isAfter) && isFirstTime)
        {
            isFirstTime=false;
            caseList.add(new Case(id = currCase.Id));
        }
    }
   AssignmentRule AR = [select id from AssignmentRule where SobjectType = 'Case' and Active = true  limit 1];
Database.DMLOptions dmo = new Database.DMLOptions();
dmo.assignmentRuleHeader.assignmentRuleId = AR.Id;
    Database.update(CaseList, dmo);
 
}

Let me know if you face any issues.

If this solution helps, Please mark it as best answer.

Thanks,

All Answers

Sai PraveenSai Praveen (Salesforce Developers) 
Hi,

Are you trying to insert new case using before trigger?

Thanks,
 
jaishrijaishri
Hi Sai ,
         I want to create a case on community site if case is created it will automatically assign to that users.
 
Sai PraveenSai Praveen (Salesforce Developers) 
Hi Jai,

Is there any condition on status to fire the assignment rule or it should fire always a record is updated or created?

Generally you should fire assigment rule in after context. please check the similar example on leads 


If this solution helps, Please mark it as best answer.
Thanks,


 
jaishrijaishri
Hi sai, 
 there is only two rule entries in case - type and based on type there is subtype .In org side it is working fine but in experience sites it is not working the active assginment rule.
Thanks
 
Sai PraveenSai Praveen (Salesforce Developers) 
Hi,

As mentioned above you should not write in before context. It should be after update/after insert 

Thanks,
 
jaishrijaishri

Hi Sai, 

 same issue is coming .

Sai PraveenSai Praveen (Salesforce Developers) 
Hi,

If you dont have any conditions you can try the below trigger.
 
trigger CaseAssignmentRuleTrigger on Case (after insert,after update) {
 List<Case> CaseList = new List<Case>();
   public static Boolean isFirstTime = true;
    for(Case currCase : Trigger.New)
    {
        if((Trigger.isInsert && Trigger.isAfter) && isFirstTime )
        {
            isFirstTime=false;
            CaseList.add(new Case(id = currCase.id));
        }
        else if((Trigger.isUpdate && Trigger.isAfter) && isFirstTime)
        {
            isFirstTime=false;
            caseList.add(new Case(id = currCase.Id));
        }
    }
   AssignmentRule AR = [select id from AssignmentRule where SobjectType = 'Case' and Active = true  limit 1];
Database.DMLOptions dmo = new Database.DMLOptions();
dmo.assignmentRuleHeader.assignmentRuleId = AR.Id;
    Database.update(CaseList, dmo);
 
}

Let me know if you face any issues.

If this solution helps, Please mark it as best answer.

Thanks,
This was selected as the best answer
Sai PraveenSai Praveen (Salesforce Developers) 

Hi,

Is it possible to connect over gmeet to check. Same is working in my org.


Thanks

Sai PraveenSai Praveen (Salesforce Developers) 
Hi,

I cannot share personal email. But can share gmeet link once you join I will delete so no one else can join it.

Thanks,
 
Sai PraveenSai Praveen (Salesforce Developers) 
Hi JaiShri,

Is the assignment rule satisfying the criteria of the record?

Thanks,
 
jaishrijaishri
Hi Sai, 
   Thank you for your solution.