Monday, October 6, 2014

Case Team via Apex

Hello Guys,

I am back with new topic. This time we all are going to discuss about Case Team Via Apex. So first of all let's brief discussion on  Case Team.
 A case team is a team of users that work together on a case. For example, your case team may include a support rep, support manager, and a product manager.

So the requirement is that whenever a new case is created then creator should be added in Case Team.
The user who edit the case , will be added on that case based on last modified.

To implement this you will need following two main things

  1.  Case Team Roles 
  2.  Related List of Case Team in Case detail page.  


trigger addTeamMembers on Case (after insert, After Update) {
   User Us = [SELECt id, name , profile.name from User WHERE id =: UserInfo.getUserId( )];
   if(checkRecursive.runOnce()){
   if(us.profile.name != 'TM Customer Community Login'){
       Map<Id, CaseTeamMember> membersToAdd = new Map<Id, CaseTeamMember>();
       if(trigger.isAfter){
            List<Case> cases = [Select Id,OwnerId, LastModifiedById from Case where id IN :Trigger.newMap.keySet()];
            if(trigger.IsInsert){
                for (Case c : cases) {
                      membersToAdd.put(c.Id, new CaseTeamMember(ParentId = c.Id, MemberId = UserInfo.getUserId( )));
                }
            }
            if(trigger.IsUpdate){
               for (Case c : cases) {
                      membersToAdd.put(c.Id, new CaseTeamMember(ParentId = c.Id, MemberId = c.LastModifiedById));
                } 
            }    
            if (!membersToAdd.isEmpty()) {
              try {
                CaseTeamRole caseTeamRole = [SELECT Id FROM CaseTeamRole WHERE Name = 'Immerti' LIMIT 1];
        
                for (CaseTeamMember ctm : membersToAdd.values()) {
                  ctm.TeamRoleId = caseTeamRole.Id;
                }
              for (CaseTeamMember ctm : [SELECT Id, MemberId, ParentId FROM CaseTeamMember
                                           WHERE ParentId IN :membersToAdd.keySet()
                                           AND MemberId = :UserInfo.getUserId()
                                           ORDER BY ParentId]) {
                 if (membersToAdd.containsKey(ctm.ParentId)) {
                    membersToAdd.remove(ctm.ParentId);
                  }
                }
                
                if (!membersToAdd.isEmpty()) {
                  insert membersToAdd.values();
                }
              } catch (System.QueryException qe) {}
           }
        }
      }else{
           User u1 = [SELECT id, name from User WHERE name = 'Carla Martin'];
           User u = [SELECT id, name from User WHERE name = 'Zina Sejdic'];
           set<Id> csId = new set<Id>();
           if(trigger.isInsert){
           if(trigger.isAfter){
               for(Case c : trigger.new){
                   csId.add(c.id);  
               }
             if(csId.size() > 0){
                  Case cs = [SELECT id, ownerId from case WHERE id IN : csId];
                  cs.ownerId = u1.id;
                  update cs;
                  CaseTeamRole caseTeamRole = [SELECT Id FROM CaseTeamRole WHERE Name = 'Immerti' LIMIT 1];
                  CaseTeamMember tm = new CaseTeamMember();
                  tm.ParentId = cs.id;
                  tm.MemberId = u.id;
                  tm.TeamRoleId = caseTeamRole.id;
                  insert tm;
            }     
          }
        }
     }
   } 
}






~Vikas

No comments:

Post a Comment