現在ログインしているユーザーの役割の下にあるすべての役割を取得しようとしています。階層のレベルはわかりません。ログインしているユーザーによって異なります。
一般的な方法でこれを達成する方法についての指針
currentUserRoleId= userInfo.getUserRoleId();
currentUserRoleId の下のすべてのロールと、各レベルの下のロールを表示したいと考えています。
ありがとう
現在ログインしているユーザーの役割の下にあるすべての役割を取得しようとしています。階層のレベルはわかりません。ログインしているユーザーによって異なります。
一般的な方法でこれを達成する方法についての指針
currentUserRoleId= userInfo.getUserRoleId();
currentUserRoleId の下のすべてのロールと、各レベルの下のロールを表示したいと考えています。
ありがとう
残念ながら、これを行うための事前に構築された方法はないようです。ただし、次のように再帰的に実行するコードを記述できるはずです。
public static set<Id> getSubordinateRoles(Id roleId) {
map<Id, set<Id>> parentAndChildren = new map<Id, set<Id>>();
set<Id> children;
for(UserRole ur : [select Id, ParentRoleId from UserRole]) {
children = parentAndChildren.containsKey(ur.ParentRoleId) ? parentAndChildren.get(ur.ParentRoleId) : new set<Id>();
children.add(ur.Id);
parentAndChildren.put(ur.ParentRoleId, children);
}
return getSubordinateRoles(role, parentAndChildren);
}
public static set<Id> getSubordinateRoles(Id roleId, map<Id, set<Id>> parentAndChildren) {
set<Id> subordinateRoles = new set<Id>();
set<Id> remainingSubordinateRoles = new set<Id>();
if(parentAndChildren.containsKey(roleId)) {
subordinateRoles.addAll(parentAndChildren.get(roleId));
for(Id subRoleId : subordinateRoles) {
remainingSubordinateRoles.addAll(getSubordinateRoles(subRoleId, parentAndChildren));
}
}
subordinateRoles.addAll(remainingSubordinateRoles);
return subordinateRoles;
}
私はこれをテストしていないので、動作しない場合はお知らせください。