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
Abhishek RayAbhishek Ray 

Trigger: Case visibility not working

Trigger:  I have to create a workaround which salesforce recommended me to use trigger. I need to create a visiblity to case. User A creates a ticket and the owner of ticket is assigned. The ticket is visible to owner and his/her group through case sharing rules. But the case is not visible to the actual person who created the ticket and the contact owner. The scenerio is I don't want anybody to view this ticket except Owner, the owner group and the creator. I tried using sharing setting but in that scenrio either all users are able to see or none of the users cannot see except owner and their group. Salesforce recommended me to use this sample trigger. Since I dont have much idea in trigger, this code is not working. Please help.

 

trigger CaseTeamTrigger on Case (after insert, after update) {

    Map<Id, CaseTeamMember> membersToAdd = new Map<Id, CaseTeamMember>();

    List<Case> cases = [Select Id,OwnerId,RecordTypeId,RecordType.Name

                  from Case where id IN :Trigger.newMap.keySet()];

                 

      for (Case c : cases)

    {

        membersToAdd.put(c.Id, new CaseTeamMember(ParentId = c.Id, MemberId = UserInfo.getUserId()));      

    }   

    if (!membersToAdd.isEmpty()) {

      try {

        CaseTeamRole caseTeamRole = [SELECT Id FROM CaseTeamRole WHERE Name = 'Creator' 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) {}

    }

 

}

 

 

Please help.

Best Answer chosen by Admin (Salesforce Developers) 
Saikishore Reddy AengareddySaikishore Reddy Aengareddy

Sorry for the confusion... use this piece of code.. it should work..

 

trigger CaseShare on case(after update,after insert) {
// if(trigger.isInsert){
List<caseShare> CreatorAccessList = new List<CaseShare>();
for(case AR: trigger.new){
if((Trigger.isUpdate && Ar.OwnerId<>trigger.oldMap.get(AR.Id).OwnerId) || Trigger.IsInsert){
caseShare creatorShare = new caseShare();
creatorshare.CaseId= AR.id;
creatorshare.userOrGroupID = AR.createdbyID;
creatorShare.CaseAccessLevel = 'Edit';

CreatorAccessList.add(CreatorShare);
}
}

Database.SaveResult[] AssistRequestShareInsertResult = Database.insert(CreatorAccessList,False);


// }


}

All Answers

Saikishore Reddy AengareddySaikishore Reddy Aengareddy

trigger CaseShare on case(after insert,after update) {
   // if(trigger.isInsert){
    List<case__Share> CreatorAccessList = new List<Case__Share>();
        for(case AR: trigger.new){
          case__Share creatorShare = new case__Share();
                creatorshare.parentID = AR.id;
                creatorshare.userOrGroupID = AR.createdbyID;
                creatorShare.AccessLevel = 'edit';
                creatorShare.RowCause = Schema.Assist_Request__Share.RowCause.Creator_Access__c; //(Create an apex sharing reason on case object...there would be a relatedlist on case object called case share reason)

            CreatorAccessList.add(CreatorShare);
        }
    
    Database.SaveResult[] AssistRequestShareInsertResult = Database.insert(CreatorAccessList,False);    
        
            
   // }


}

Abhishek RayAbhishek Ray

I tried your code but it is giving me error.

 

Compile Error: line 14:101 no viable alternative at character '​' at line 14 column 101

 

Database.SaveResult[] AssistRequestShareInsert​Result = Database.insert(CreatorAccessList,False);​

 

Please help

Saikishore Reddy AengareddySaikishore Reddy Aengareddy

Sorry for the confusion... use this piece of code.. it should work..

 

trigger CaseShare on case(after update,after insert) {
// if(trigger.isInsert){
List<caseShare> CreatorAccessList = new List<CaseShare>();
for(case AR: trigger.new){
if((Trigger.isUpdate && Ar.OwnerId<>trigger.oldMap.get(AR.Id).OwnerId) || Trigger.IsInsert){
caseShare creatorShare = new caseShare();
creatorshare.CaseId= AR.id;
creatorshare.userOrGroupID = AR.createdbyID;
creatorShare.CaseAccessLevel = 'Edit';

CreatorAccessList.add(CreatorShare);
}
}

Database.SaveResult[] AssistRequestShareInsertResult = Database.insert(CreatorAccessList,False);


// }


}

This was selected as the best answer
Abhishek RayAbhishek Ray

Thanks for your help. You are genius. It worked perfectly as expected.