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
Ragaz MaheRagaz Mahe 

Trigger to assign a task to the users in the public group

Can anyone please help to solve the below scenario.
I am having a Case object with two picklist fields
Reason
Secondary reason
The above picklist fields contains many values. I am focusing on whenver a Case is created or updated with Reason value as Test_Reason & Seconday Reason value as Test_Secondary_Reason, I would be assigning the created task by fetching the two fixed users(A & B) stored in a public group(Group name: Test_PG).
v varaprasadv varaprasad
Hi Ragaz,

Try below code : 
 
trigger createTaskOnCase on case(After insert, After Update){

Group gr = [select id,relatedid,name from Group where name = 'Test_PG' limit 1];
list<task> lstTasks = new list<task>();


for(case cs : trigger.new){
   if(cs.Reason__c == 'Test_Reason' cs.Seconday_Reason__c == ''){
       		
  lstTasks.add(new Task(
  Status = 'Not Started',   // Status
  Subject = 'Call',           // Subject
  WhatId = cs.id,  // Name
  ActivityDate = null,        // Due Date  
  Priority = 'Normal',        // Priority
  OwnerId = gr.id;
));

		
   }

}
insert lstTasks;

}

Hope this helps you!
If my answer helps resolve your query, please mark it as the 'Best Answer' & upvote it to benefit others.

Thanks
Varaprasad
@For SFDC Support: varaprasad4sfdc@gmail.com
Blog: http://salesforceprasad.blogspot.com/

Salesforce latest interview questions  :
https://www.youtube.com/channel/UCOcam_Hb4KjeBdYJlJWV_ZA?sub_confirmation=1


 
mritzimritzi
Following is Trigger & a Trigger Handler class for your requirement.
Please change API name, fix syntax errors and change code to suite your requirement.
Trigger:
trigger caseTrigger(after Insert, after Update){
	if(Trigger.isAfter && Trigger.isInsert){
		new CaseTriggerHandler().createNewTasks(Trigger.new);
	}
	else if(Trigger.isAfter && Trigger.isUpdate){
		new CaseTriggerHandler().createTasksOnUpdate(Trigger.new, Trigger.oldMap);
	}
}

Trigger Handler Class:
public class CaseTriggerHandler{
    public CaseTriggerHandler(){}

    public void createNewTasks(List<Case> caseList){
        if( caseList != null && caseList.size() > 0){
            //get list of users who are part of the group (you can filter the criteria further)
            //for the time being, I am assuming there are only two users in the group
            List<GroupMember> groupMemberList = new List<GroupMember>([
                Select Id, UserorGroupId, GroupId From GroupMember Where GroupId.DeveloperName = 'Test_PG'
            ]);
            List<Task> taskList = new List<Task>();
            for(Case case:caseList){
                Task task = getNewTaskWithAssignment(case, groupMemberList);
                taskList.add(task);
            }
            //you can further improve error handling, this is simplest one
            try{
                insert taskList;
            }catch(Exception ex){
                System.debug(ex.getMessage());
            }
        }
    }
    public void createTasksOnUpdate(List<Case> caseList, Map<Id, Case> oldCaseMap){
        if(caseList != null && oldCaseMap != null && caseList.size() > 0 && oldCaseMap.keySet().size() > 0){
            //get list of users who are part of the group (you can filter the criteria further)
            //for the time being, I am assuming there are only two users in the group
            List<GroupMember> groupMemberList = new List<GroupMember>([
                Select Id, UserorGroupId, GroupId From GroupMember Where GroupId.DeveloperName = 'Test_PG'
            ]);
            List<Task> taskList = new List<Task>();
            for(Case case:caseList){
                Case oldCase = oldCaseMap.get(case.Id);
                if(case.Reason__c != oldCase.Reason__c || case.Secondary_Reason__c != oldCase.Secondary_Reason__c){
                    Task task = getNewTaskWithAssignment(case, groupMemberList);
                    taskList.add(task);
                }
            }
            try{
                insert taskList;
            }catch(Exception ex){
                System.debug(ex.getMessage());
            }
        }
    }
    private Task getNewTaskWithAssignment(Case case, List<GroupMemberList> groupMemberList){
        Task task = new Task(
            Status = 'Not Started',
            Subject = '<The subject you want>',
            WhatId = case.Id,
            ActivityDate = Date.Today().addDays(7), //7 days from now   
            Priority = 'Normal'
        );
        if(case.Reason__c == 'Test_Reason' && case.Secondary_Reason__c != 'Test_Secondary_Reason')
            task.Owner.Id = groupMemberList[0].UserorGroupId;
        else if(case.Reason__c == 'Test_Reason' && case.Secondary_Reason__c == 'Test_Secondary_Reason')
            task.Owner.Id = groupMemberList[1].UserorGroupId;
        else 
            task.Owner.Id = UserInfo.getUserId();

        return task;
    }
}

Please mark this as BEST ANSWER, if this helps solve your problem.