ロール階層取得
ユーザより下の階層のロールに所属するユーザの取得
public with sharing class TestSFDC {
public static Set<ID> getRoleSubordinateUsers(Id userId) {
Id roleId = [select UserRoleId from User where Id = :userId].UserRoleId;
Set<Id> allSubRoleIds = getAllSubRoleIds(new Set<ID>{roleId});
Map<Id,User> users = new Map<Id, User>([Select Id, Name From User where UserRoleId IN :allSubRoleIds]);
return users.keySet();
}
private static Set<ID> getAllSubRoleIds(Set<ID> roleIds) {
Set<ID> currentRoleIds = new Set<ID>();
for(UserRole userRole :[select Id from UserRole where ParentRoleId IN :roleIds AND ParentRoleID != null])
currentRoleIds.add(userRole.Id);
if(currentRoleIds.size() > 0)
currentRoleIds.addAll(getAllSubRoleIds(currentRoleIds));
return currentRoleIds;
}
}
指定ユーザの上位ロールたどる
Set<ID> allSuperRoleIds = new Set<ID>();
Id userID = '00590000002sz4p';
Id roleId = [select UserRoleId from User where Id = :userId].UserRoleId;
while (roleId != Null){
list<UserRole> ur = [select ParentRoleId from UserRole where Id = :roleId];
if(ur.size() > 0 && ur[0].ParentRoleId != null){
roleId = ur[0].ParentRoleId ;
allSuperRoleIds.add(roleId);
System.debug('###### roleId'+ roleId);
} else {
break;
}
}
Map<Id,User> users = new Map<Id, User>([Select Id, Name From User where UserRoleId IN :allSuperRoleIds]);
System.debug('############'+ allSuperRoleIds );
System.debug('############'+ users.keySet() );