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
BHANOO RATNAWATBHANOO RATNAWAT 

How to assigned a record to a different user?I have a custom object Board__c and a custom field Assigned_To__c(lookup to users from other profiles).Assigned users see only those records which they are assigned.

How to assigned a record to a different user?
  • I have a custom object Board__c
  • and a custom field Assigned_To__c(lookup to users from other profiles).
  • Assigned users see only those records which they are assigned.
  • I will answer on this post after if I done it. 
Best Answer chosen by BHANOO RATNAWAT
BHANOO RATNAWATBHANOO RATNAWAT
Thanks Maini
I have shared the answer as given below:

trigger shareCustomizedBoardTrigger on Customise_Board__c (after update) {
    if(trigger.isAfter && trigger.isUpdate ){
        CustomizedBoardTriggerHelper.AfterUpdateOperations(Trigger.New, trigger.oldMap);
    }
}

========================================================================================
public class CustomizedBoardTriggerHelper {
    
    public static void AfterUpdateOperations(List<Customise_Board__c> customizedboardList, Map<id, Customise_Board__c> oldMapCustomizedboard){
        try{
            List<Customise_Board__Share> lstBoardShare  = new List<Customise_Board__Share>();
            Set<Id> setCustomizedBoardIdsOnAssigned = new Set<Id>();
            Set<Id> setRemovedAssingedUsers = new Set<Id>();
            Set<Id> setCustomizedBoardIdsAfternRemovedAssignedUser = new Set<Id>();
            
            for (Customise_Board__c ctb : customizedboardList){
                if(ctb.Assigned_To__c != null && ctb.Assigned_To__c != oldMapCustomizedboard.get(ctb.id).Assigned_To__c){
                    setCustomizedBoardIdsOnAssigned.add(ctb.Id);
                    
                    Customise_Board__Share cShare = new Customise_Board__Share();
                    cShare.ParentId = ctb.id;
                    system.debug('##lstBoardShareparendid=====>'+cShare.ParentId);
                    cShare.UserOrGroupId = ctb.Assigned_To__c;
                    system.debug('##SharewithId=====>'+cShare.UserOrGroupId);
                    cShare.AccessLevel ='Edit';
                    lstBoardShare.add(cShare);
                    system.debug('##addinlstBoardShare=====>'+lstBoardShare);
                }
                
                //If AssignedUser is removed from CustomizedBoard
                if(ctb.Assigned_To__c != oldMapCustomizedboard.get(ctb.id).Assigned_To__c){
                    setRemovedAssingedUsers.add(oldMapCustomizedboard.get(ctb.id).Assigned_To__c);
                    system.debug('##setRemovedAssingedUsers=====>'+setRemovedAssingedUsers);
                    setCustomizedBoardIdsAfternRemovedAssignedUser.add(ctb.id);
                    system.debug('##setCustomizedBoardIdsAfternRemovedAssignedUser=====>'+setCustomizedBoardIdsAfternRemovedAssignedUser);
                }
            }
            if(lstBoardShare !=null && lstBoardShare.size() > 0){
                insert lstBoardShare;
                system.debug('##insertlstBoardShare=====>'+lstBoardShare);
            }
            try{
                if(setRemovedAssingedUsers!=null){
                    List<Customise_Board__Share> lstRemovedShare = new List<Customise_Board__Share>([Select id from Customise_Board__Share where UserOrGroupId IN : setRemovedAssingedUsers AND ParentId in : setCustomizedBoardIdsAfternRemovedAssignedUser]);
                    if(lstRemovedShare!=null && lstRemovedShare.size()>0) delete lstRemovedShare;
                    system.debug('##lstRemovedShare=====>'+lstRemovedShare);
                }
            }Catch(Exception e){
                System.debug('Ex**** Share  Del '+e.getMessage());
            } 
        }Catch(Exception ex){
            System.debug('Ex**** '+ex.getMessage());
            
        } 
    }
}

All Answers

PriyaPriya (Salesforce Developers) 

Hi Bhanoo,

Do you have any criteria to assign it to the other user?

If yes then you can use workflow/process builder/Assignment rule.

Regards,

Priya Ranjan

Ankit Maini.Ankit Maini.
With the stament you have provided it looks like the OWD for Board__c object is private (I assume profile level acces is already given to Board__c ) so that only owner can access the record and you want to share that same record to the user who is in Assigned_To__c field, so for this you have to write a trigger on Board__c and use apex sharing to share the record with that user. You have to delete the sharing if Assigned_to__c field gets changes.

Please find the apex sharing link:
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_bulk_sharing_creating_with_apex.htm

Let us know if this works.
BHANOO RATNAWATBHANOO RATNAWAT
Thanks Maini
I have shared the answer as given below:

trigger shareCustomizedBoardTrigger on Customise_Board__c (after update) {
    if(trigger.isAfter && trigger.isUpdate ){
        CustomizedBoardTriggerHelper.AfterUpdateOperations(Trigger.New, trigger.oldMap);
    }
}

========================================================================================
public class CustomizedBoardTriggerHelper {
    
    public static void AfterUpdateOperations(List<Customise_Board__c> customizedboardList, Map<id, Customise_Board__c> oldMapCustomizedboard){
        try{
            List<Customise_Board__Share> lstBoardShare  = new List<Customise_Board__Share>();
            Set<Id> setCustomizedBoardIdsOnAssigned = new Set<Id>();
            Set<Id> setRemovedAssingedUsers = new Set<Id>();
            Set<Id> setCustomizedBoardIdsAfternRemovedAssignedUser = new Set<Id>();
            
            for (Customise_Board__c ctb : customizedboardList){
                if(ctb.Assigned_To__c != null && ctb.Assigned_To__c != oldMapCustomizedboard.get(ctb.id).Assigned_To__c){
                    setCustomizedBoardIdsOnAssigned.add(ctb.Id);
                    
                    Customise_Board__Share cShare = new Customise_Board__Share();
                    cShare.ParentId = ctb.id;
                    system.debug('##lstBoardShareparendid=====>'+cShare.ParentId);
                    cShare.UserOrGroupId = ctb.Assigned_To__c;
                    system.debug('##SharewithId=====>'+cShare.UserOrGroupId);
                    cShare.AccessLevel ='Edit';
                    lstBoardShare.add(cShare);
                    system.debug('##addinlstBoardShare=====>'+lstBoardShare);
                }
                
                //If AssignedUser is removed from CustomizedBoard
                if(ctb.Assigned_To__c != oldMapCustomizedboard.get(ctb.id).Assigned_To__c){
                    setRemovedAssingedUsers.add(oldMapCustomizedboard.get(ctb.id).Assigned_To__c);
                    system.debug('##setRemovedAssingedUsers=====>'+setRemovedAssingedUsers);
                    setCustomizedBoardIdsAfternRemovedAssignedUser.add(ctb.id);
                    system.debug('##setCustomizedBoardIdsAfternRemovedAssignedUser=====>'+setCustomizedBoardIdsAfternRemovedAssignedUser);
                }
            }
            if(lstBoardShare !=null && lstBoardShare.size() > 0){
                insert lstBoardShare;
                system.debug('##insertlstBoardShare=====>'+lstBoardShare);
            }
            try{
                if(setRemovedAssingedUsers!=null){
                    List<Customise_Board__Share> lstRemovedShare = new List<Customise_Board__Share>([Select id from Customise_Board__Share where UserOrGroupId IN : setRemovedAssingedUsers AND ParentId in : setCustomizedBoardIdsAfternRemovedAssignedUser]);
                    if(lstRemovedShare!=null && lstRemovedShare.size()>0) delete lstRemovedShare;
                    system.debug('##lstRemovedShare=====>'+lstRemovedShare);
                }
            }Catch(Exception e){
                System.debug('Ex**** Share  Del '+e.getMessage());
            } 
        }Catch(Exception ex){
            System.debug('Ex**** '+ex.getMessage());
            
        } 
    }
}
This was selected as the best answer