Skip to main content
    public static Set<Id> getUserIdsFromGroup(List<String> groupNameList){

 

        Set<Id> userIdSet=new Set<Id>();

 

        String userType = Schema.SObjectType.User.getKeyPrefix();

 

        String groupType = Schema.SObjectType.Group.getKeyPrefix();

 

        Set<Id> groupIdSet = new Set<Id>();

 

        Set<Id> groupIdSetWithAccessUsingHierarchySet = new Set<Id>();

 

        Map<Id, UserRole> orgRoleMap = new Map<Id, UserRole>([SELECT Id,ParentRoleID 

 

                                                              FROM UserRole 

 

                                                              LIMIT 10000]);

 

        

 

        // Loop through all group members in a group

 

        for(GroupMember groupMemberRecord : [SELECT Id, UserOrGroupId, Group.DoesIncludeBosses, Group.Type, Group.RelatedId 

 

                                             FROM GroupMember 

 

                                             WHERE Group.Name in :groupNameList 

 

                                             LIMIT 10000]){

 

            // If the user or group id is a user

 

            if(((String)groupMemberRecord.UserOrGroupId).startsWith(userType)){

 

                userIdSet.add(groupMemberRecord.UserOrGroupId);

 

            }

 

            // If the user or group id is a group

 

            // Note: there may be a problem with governor limits if this is called too many times

 

            else if (((String)groupMemberRecord.UserOrGroupId).startsWith(groupType) && !groupMemberRecord.Group.DoesIncludeBosses){

 

                // Call this function again but pass in the group found within this group

 

                groupIdSet.add(groupMemberRecord.userOrGroupId);

 

                

 

            }

 

            else if (((String)groupMemberRecord.UserOrGroupId).startsWith(groupType) && groupMemberRecord.Group.DoesIncludeBosses){

 

                // Call this function again but pass in the group found within this group

 

                groupIdSetWithAccessUsingHierarchySet.add(groupMemberRecord.userOrGroupId);

 

                

 

            }

 

        }

 

        if(groupIdSet.size()>0){

 

            userIdSet.addAll(getAllMembersFromGroup(groupIdSet, orgRoleMap, false));

 

        }

 

        if(groupIdSetWithAccessUsingHierarchySet.size()>0){

 

            userIdSet.addAll(getAllMembersFromGroup(groupIdSetWithAccessUsingHierarchySet, orgRoleMap, true));

 

        }

 

        return userIdSet;  

 

    }
2 respostas
  1. 16 de mar. de 2021, 19:10
    Hi Learner, 

     

    Use below test class for your above apex class. it is not covering only 1 line. rest of code is covered. Replace your class and test class name accordingly.

    @isTest

    private class YourApexClassTest

    {

    static testMethod void testMethod1()

    {

    UserRole role = new UserRole(DeveloperName = 'MyCustomRole', Name = 'My Role');

    insert role;

    Group g1 = new Group(Name = 'TestGroup1', Type = 'Regular' );

    insert g1 ;

    Group g2 = new Group(Name = 'TestGroup2', Type = 'Regular' );

    insert g2 ;

    Group g3 = new Group(Name = 'TestGroup3', Type = 'Regular' );

    insert g3 ;

    Group g4 = new Group(Name = 'TestGroup4', Type = 'Regular', DoesIncludeBosses = false );

    insert g4 ;

    GroupMember gm1 = new GroupMember(GroupId = g1.Id, UserOrGroupId = UserInfo.getUserId());

    GroupMember gm2 = new GroupMember(GroupId = g1.Id, UserOrGroupId = g2.Id );

    GroupMember gm3 = new GroupMember(GroupId = g4.Id, UserOrGroupId = g2.Id);

    insert new List<GroupMember>{gm1, gm2} ;

    List<String> groupNames = new List<String>{'TestGroup1', 'TestGroup2', 'TestGroup3', 'TestGroup4'};

    YourApexClass.getUserIdsFromGroup(groupNames);

    }

    }

     

     
0/9000